a cli to list, start and create issues in the linear issue tracker. git and jj aware to keep you in the right views in linear. allows jumping to the web or the linear desktop app similar to gh.
> /plugin marketplace add schpet/linear-cli> /plugin install linear-cli@linear-cli
Repo: schpet/linear-cli
What's inside
a cli to list, start and create issues in the linear issue tracker. git and jj aware to keep you in the right views in linear. allows jumping to the web or the linear desktop app similar to gh.
works great with AI agents โ the CLI includes a skill that lets agents create issues, update status, and manage your Linear workflow alongside your code.
here's how it works:
linear config # setup your repo, it writes a config file
linear issue mine # list unstarted issues assigned to you
linear issue query --all-teams # query issues across all teams
linear issue query --search "login bug" # search issues in your configured team
linear issue start # choose an issue to start, creates a branch
linear issue start ABC-123 # start a specific issue
linear issue view # see current branch's issue as markdown
linear issue pr # makes a PR with title/body preset, using gh cli
linear issue create # create a new issue
it aims to be a complement to the web and desktop apps that lets you stay on the command line in an interactive or scripted way.
brew install schpet/tap/linear
deno install -A --reload -f -g -n linear jsr:@schpet/linear-cli
install as a dev dependency to pin a version in your project:
npm install -D @schpet/linear-cli
# or
bun add -D @schpet/linear-cli
# or
pnpm add -D @schpet/linear-cli
then run via your package manager:
npx linear issue list
bunx linear issue list
note: this package ships pre-built binaries
package on npm: @schpet/linear-cli
https://github.com/schpet/linear-cli/releases/latest
git clone https://github.com/schpet/linear-cli
cd linear-cli
deno task install
create an API key at linear.app/settings/account/security1
authenticate with the CLI:
linear auth login
configure your project:
cd my-project-repo
linear config
see docs/authentication.md for multi-workspace support and other authentication options.
the CLI works with both git and jj version control systems:
eng-123-my-feature). use linear issue start or linear UI's 'copy git branch name' button and related automations.Linear-issue trailers in your commit descriptions. use linear issue start to automatically add the trailer, or add it manually with jj describe, e.g. jj describe "$(linear issue describe ABC-123)"the current issue is determined by:
eng-123-my-feature)Linear-issue trailer in the current or ancestor commitsnote that Linear's GitHub integration will suggest git branch names.
linear issue view # view current issue details in terminal
linear issue view ABC-123
linear issue view 123
linear issue view -w # open issue in web browser
linear issue view -a # open issue in Linear.app
linear issue id # prints the issue id from current branch (e.g., "ENG-123")
linear issue title # prints just the issue title
linear issue url # prints the Linear.app URL for the issue
linear issue pr # creates a GitHub PR with issue details via `gh pr create`
linear issue list # list your issues in a table view (supports -s/--state and --sort)
linear issue list --project "My Project" --milestone "Phase 1" # filter by milestone
linear issue list -w # open issue list in web browser
linear issue list -a # open issue list in Linear.app
linear issue query --search "login bug" # search issues by text in your configured team
linear issue query --search "oauth timeout" --team ENG --json # structured search output for agents
linear issue query --all-teams --json --limit 0 # export all issues as JSON
linear issue start # create/switch to issue branch and mark as started
linear issue create # create a new issue (interactive prompts)
linear issue create -t "title" -d "description" # create with flags
linear issue create --project "My Project" --milestone "Phase 1" # create with milestone
linear issue update # update an issue (interactive prompts)
linear issue update ENG-123 --milestone "Phase 2" # set milestone on existing issue
linear issue delete # delete an issue
linear issue comment list # list comments on current issue
linear issue comment add # add a comment to current issue
linear issue comment add -p <id> # reply to a specific comment
linear issue comment update <id> # update a comment
linear issue commits # show all commits for an issue (jj only)
attach files to an issue or comment. uploads are private by default (readable only by workspace members), matching the Linear web app.
linear issue attach ENG-123 ./screenshot.png # attach a file to an issue
linear issue attach ENG-123 ./doc.pdf -t "Spec" # custom attachment title
linear issue attach ENG-123 ./img.png -c "see this" # add a linked comment
linear issue comment add ENG-123 -a ./screenshot.png # attach a file to a comment
linear issue comment add ENG-123 -a ./a.png -a ./b.png # attach multiple files
by default attachments are private. pass --public to upload raster images (png/jpeg/gif/webp/bmp/tiff) to a public public.linear.app URL readable by anyone, unauthenticated โ useful for sharing outside the workspace, but a warning is printed since it bypasses workspace access controls. non-image files cannot be made public.
linear issue attach ENG-123 ./screenshot.png --public # public image URL
linear issue comment add ENG-123 -a ./screenshot.png --public # public image URL
linear team list # list teams
linear team id # print out the team id (e.g. for scripts)
linear team members # list team members
linear team members --all --json # include inactive members, as JSON
linear team create # create a new team
linear team autolinks # configure GitHub repository autolinks for Linear issues
linear user list # list everyone in the workspace
linear user list --all # include deactivated members
linear user list --json # machine-readable output
linear project list # list projects
linear project view # view project details
linear project create --name "API v2" --team ENG --content-file overview.md
linear project create --name "Mobile launch" --team APP --priority high --label Launch --member jane@example.com
linear milestone list --project <projectId> # list milestones for a project
linear m list --project <projectId> # list milestones (alias)
linear milestone view <milestoneId> # view milestone details
linear m view <milestoneId> # view milestone (alias)
linear milestone create --project <projectId> --name "Q1 Goals" --target-date "2026-03-31" # create a milestone
linear m create --project <projectId> # create a milestone (interactive)
linear milestone update <milestoneId> --name "New Name" # update milestone name
linear m update <milestoneId> --target-date "2026-04-15" # update target date
linear milestone delete <milestoneId> # delete a milestone
linear m delete <milestoneId> --force # delete without confirmation
manage Linear documents from the command line. documents can be attached to projects or issues, or exist at the workspace level.
# list documents
linear document list # list all accessible documents
linear docs list # alias for document
linear document list --project <projectId> # filter by project
linear document list --issue TC-123 # filter by issue
linear document list --json # output as JSON
# view a document
linear document view <slug> # view document rendered in terminal
linear document view <slug> --raw # output raw markdown (for piping)
linear document view <slug> --web # open in browser
linear document view <slug> --json # output as JSON, including document comments
# create a document
linear document create --title "My Doc" --content "# Hello" # inline content
linear document create --title "Spec" --content-file ./spec.md # from file
linear document create --title "Doc" --project <projectId> # attach to project
linear document create --title "Notes" --issue TC-123 # attach to issue
cat spec.md | linear document create --title "Spec" # from stdin
# update a document
linear document update <slug> --title "New Title" # update title
linear document update <slug> --content-file ./updated.md # update content
linear document update <slug> --edit # open in $EDITOR
linear document update <slug> --content-file ./updated.md --force # bypass comment-anchor guard
# delete a document
linear document delete <slug> # soft delete (move to trash)
linear document delete <slug> --permanent # permanent delete
linear document delete --bulk <slug1> <slug2> # bulk delete
content updates are refused by default when a document has active inline Linear comments, because replacing markdown can detach or hide those anchors. top-level document comments do not block updates. review the inline comment first, then rerun with --force if you intentionally want to replace the content anyway.
linear --help # show all commands
linear --version # show version
linear config # setup the project
linear completions # generate shell completions
the CLI supports configuration via environment variables or a .linear.toml config file. environment variables take precedence over config file values.
| option | env var | toml key | example | description |
|---|---|---|---|---|
| Team ID | LINEAR_TEAM_ID | team_id | "ENG" | default team for operations |
| Workspace | LINEAR_WORKSPACE | workspace | "mycompany" | workspace slug for web/app URLs |
| Issue sort | LINEAR_ISSUE_SORT | issue_sort | "priority" or "manual" | how to sort issue lists |
| Ask project | LINEAR_ISSUE_CREATE_ASK_PROJECT | issue_create_ask_project | true or false | ask for a project during interactive issue create |
| Assign self | LINEAR_ISSUE_CREATE_ASSIGN_SELF | issue_create_assign_self | "always", "auto", or "never" | control default self-assignment during issue creation |
| VCS | LINEAR_VCS | vcs | "git" or "jj" | version control system (default: git) |
| Download images | LINEAR_DOWNLOAD_IMAGES | download_images | true or false | download images when viewing issues |
the config file can be placed at (checked in order, first found is used):
./linear.toml or ./.linear.toml (current directory)<repo-root>/linear.toml or <repo-root>/.linear.toml (repository root)<repo-root>/.config/linear.toml$XDG_CONFIG_HOME/linear/linear.toml or ~/.config/linear/linear.toml (Unix)%APPDATA%\linear\linear.toml (Windows)linear-cli includes a skill that helps AI agents use the CLI effectively. for use cases outside the CLI, it includes instructions to interact directly with the graphql api, including authentication.
install the skill using claude code's plugin system:
# from claude code
/plugin marketplace add schpet/linear-cli
/plugin install linear-cli@linear-cli
# from bash
claude plugin marketplace add schpet/linear-cli
claude plugin install linear-cli@linear-cli
# to update
claude plugin marketplace update linear-cli
claude plugin update linear-cli@linear-cli
install the skill using skills.sh:
npx skills add schpet/linear-cli
view the skill at skills.sh/schpet/linear-cli/linear-cli
the skill documentation in skills/linear-cli/ is automatically generated from the CLI help text. after making changes to commands or help text, regenerate the docs:
deno task generate-skill-docs
this will:
linear --helpSKILL.md file from SKILL.template.mdimportant: the CI checks will fail if the generated docs are out of date, so make sure to run this before committing changes that affect command structure or help text.
ensure code is formatted consistently:
deno fmt
the project uses deno's built-in formatter with configuration in deno.json. formatting is checked in CI.
linear's UI is incredibly good but it slows me down. i find the following pretty grating to experience frequently:
this cli solves this. it knows what you're working on (via git branches or jj commit trailers), does the work of managing your version control state, and will write your pull request details for you.
creating an API key requires member access, it is not available for guest accounts. โฉ
.claude/
.claude-plugin/
marketplace.json
plugin.json
settings.json
skills/
release/
SKILL.md
.editorconfig
.git-blame-ignore-revs
.gitattributes
.github/
build-setup.yml
workflows/
ci.yaml
publish.yaml
release.yml
.gitignore
.graphqlrc.yaml
.linear.toml
.zed/
settings.json
AGENTS.md
CHANGELOG.md
CLAUDE.md
codegen.ts
CONVENTIONS.md
deno.json
deno.lock
dist-workspace.toml
docs/
authentication.md
cast-issue-create.svg
cast-issue-start.svg
deno-permissions.md
usage.md
evals/
linear-cli-skill/
cases.ts
fixtures/
alternate-comment.md
alternate-description.md
comment.md
issue-description.md
screenshot.png
server.log
grade.ts
README.md
results/
baseline.jsonl
baseline.meta.json
comparison.md
image-baseline.jsonl
image-baseline.meta.json
image-comparison.md
image-gold-labels.jsonl
image-post-change.jsonl
image-post-change.meta.json
post-change.jsonl
post-change.meta.json
run.ts
shims/
curl
linear
npx
graphql/
schema.graphql
justfile
lefthook.yaml
LICENSE
mise.toml
README.md
skills/
linear-cli/
references/
api.md
auth.md
commands.md
config.md
cycle.md
document.md
initiative-update.md
initiative.md
issue.md
label.md
milestone.md
organization-features.md
project-update.md
project.md
schema.md
team.md
user.md
scripts/
generate-docs.ts
SKILL.md
SKILL.template.md
src/
cli.ts
commands/
api.ts
auth/
auth-default.ts
auth-list.ts
auth-login.ts
auth-logout.ts
auth-migrate.ts
auth-status.ts
auth-token.ts
auth-whoami.ts
auth.ts
config.ts
cycle/
cycle-list.ts
cycle-view.ts
cycle.ts
document/
document-create.ts
document-delete.ts
document-list.ts
document-update.ts
document-view.ts
document.ts
initiative/
initiative-update/
initiative-update-create.ts
initiative-update-list.ts
initiative-update.ts
initiative-add-project.ts
initiative-archive.ts
initiative-create.ts
initiative-delete.ts
initiative-list.ts
initiative-remove-project.ts
initiative-unarchive.ts
initiative-update.ts
initiative-view.ts
initiative.ts
issue/
issue-agent-session-list.ts
issue-agent-session-view.ts
issue-agent-session.ts
issue-attach.ts
issue-comment-add.ts
issue-comment-delete.ts
issue-comment-list.ts
issue-comment-update.ts
issue-comment.ts
issue-commits.ts
issue-create.ts
issue-delete.ts
issue-describe.ts
issue-id.ts
issue-link.ts
issue-mine.ts
issue-pull-request.ts
issue-query.ts
issue-relation.ts
issue-start.ts
issue-title.ts
issue-update.ts
issue-url.ts
issue-view.ts
issue.ts
label/
label-create.ts
label-delete.ts
label-list.ts
label.ts
milestone/
milestone-create.ts
milestone-delete.ts
milestone-list.ts
milestone-update.ts
milestone-view.ts
milestone.ts
project/
project-update/
project-update-create.ts
project-update-list.ts
project-update.ts
project-create.ts
project-delete.ts
project-description.ts
project-list.ts
project-update.ts
project-view.ts
project.ts
schema.ts
team/
team-autolinks.ts
team-create.ts
team-delete.ts
team-id.ts
team-list.ts
team-members.ts
team-states.ts
team.ts
user/
user-list.ts
user.ts
config.ts
const.ts
credentials.ts
keyring/
index.ts
linux.ts
macos.ts
windows.ts
main.ts
utils/
actions.ts
bulk.ts
charmd-hyperlink-extension.ts
display.ts
editor.ts
errors.ts
git.ts
graphql.ts
hyperlink.ts
issue-identifier.ts
jj.ts
linear.ts
markdown-images.ts
member-display.ts
pager.ts
styling.ts
upload.ts
vcs.ts
test/
commands/
__snapshots__/
api.test.ts.snap
api.test.ts
auth/
auth-migrate.test.ts
cycle/
__snapshots__/
cycle-list.test.ts.snap
cycle-view.test.ts.snap
cycle-list.test.ts
cycle-view.test.ts
document/
__snapshots__/
document-create.test.ts.snap
document-delete.test.ts.snap
document-list.test.ts.snap
document-update.test.ts.snap
document-view.test.ts.snap
document-create.test.ts
document-delete.test.ts
document-list.test.ts
document-update.test.ts
document-view.test.ts
fixtures/
api-filter.json
initiative/
initiative-update/
__snapshots__/
initiative-update-list.test.ts.snap
initiative-update-list.test.ts
__snapshots__/
initiative-list.test.ts.snap
initiative-view.test.ts.snap
initiative-list.test.ts
initiative-view.test.ts
issue/
__snapshots__/
issue-agent-session-list.test.ts.snap
issue-agent-session-view.test.ts.snap
issue-attach.test.ts.snap
issue-comment-add.test.ts.snap
issue-comment-delete.test.ts.snap
issue-comment-list.test.ts.snap
issue-comment-update.test.ts.snap
issue-commits.test.ts.snap
issue-create.test.ts.snap
issue-describe.test.ts.snap
issue-link.test.ts.snap
issue-list.test.ts.snap
issue-mine.test.ts.snap
issue-query.test.ts.snap
issue-relation.test.ts.snap
issue-update.test.ts.snap
issue-view.test.ts.snap
image-download.test.ts
issue-agent-session-list.test.ts
issue-agent-session-view.test.ts
issue-attach.test.ts
issue-comment-add.test.ts
issue-comment-delete.test.ts
issue-comment-list.test.ts
issue-comment-update.test.ts
issue-commits.test.ts
issue-create.test.ts
issue-describe.test.ts
issue-link.test.ts
issue-list.test.ts
issue-mine.test.ts
issue-query.test.ts
issue-relation.test.ts
issue-start.test.ts
issue-update.test.ts
issue-view.test.ts
label/
__snapshots__/
label-list.test.ts.snap
label-list.test.ts
milestone/
__snapshots__/
milestone-create.test.ts.snap
milestone-delete.test.ts.snap
milestone-list.test.ts.snap
milestone-update.test.ts.snap
milestone-view.test.ts.snap
milestone-create.test.ts
milestone-delete.test.ts
milestone-list.test.ts
milestone-update.test.ts
milestone-view.test.ts
project/
project-update/
__snapshots__/
project-update-list.test.ts.snap
project-update-list.test.ts
__snapshots__/
project-create.test.ts.snap
project-delete.test.ts.snap
project-list.test.ts.snap
project-update.test.ts.snap
project-view.test.ts.snap
project-create.test.ts
project-delete.test.ts
project-description.test.ts
project-list.test.ts
project-update.test.ts
project-view.test.ts
team/
__snapshots__/
team-autolinks.test.ts.snap
team-id.test.ts.snap
team-list.test.ts.snap
team-members.test.ts.snap
team-states.test.ts.snap
team-autolinks.test.ts
team-create.test.ts
team-id.test.ts
team-list.test.ts
team-members.test.ts
team-states.test.ts
user/
__snapshots__/
user-list.test.ts.snap
user-list.test.ts
config.test.ts
credentials.test.ts
evals/
linear-cli-skill-grade.test.ts
keyring.integration.test.ts
keyring.test.ts
main_test.ts
utils/
display.test.ts
errors.test.ts
git.test.ts
graphql.test.ts
hyperlink.test.ts
issue-identifier.test.ts
jj.test.ts
linear.test.ts
mock_linear_server.ts
pager.test.ts
snapshot_with_fake_time.ts
test-helpers.ts
upload.test.ts
vcs.test.tsFAQ
linear-cli is a Claude Code plugin with 2 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes release, linear-cli. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.