{"id":22168731,"url":"https://github.com/schpet/linear-cli","last_synced_at":"2026-01-29T07:22:50.215Z","repository":{"id":264486921,"uuid":"893112240","full_name":"schpet/linear-cli","owner":"schpet","description":"linear without leaving the command line: list, start, and create PRs for linear issues","archived":false,"fork":false,"pushed_at":"2025-02-20T22:47:04.000Z","size":159,"stargazers_count":8,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T06:43:35.755Z","etag":null,"topics":["cli","linear","linearapp"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schpet.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-23T15:10:09.000Z","updated_at":"2025-03-22T18:16:32.000Z","dependencies_parsed_at":"2024-12-10T18:23:35.270Z","dependency_job_id":"305efb81-144d-4a43-8e58-dfc533c0811f","html_url":"https://github.com/schpet/linear-cli","commit_stats":null,"previous_names":["schpet/linear-cli"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schpet%2Flinear-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schpet%2Flinear-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schpet%2Flinear-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schpet%2Flinear-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schpet","download_url":"https://codeload.github.com/schpet/linear-cli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248281396,"owners_count":21077423,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","linear","linearapp"],"created_at":"2024-12-02T06:25:03.202Z","updated_at":"2026-01-29T07:22:50.207Z","avatar_url":"https://github.com/schpet.png","language":"TypeScript","readme":"# linear cli\n\na cli to list, start and create issues in the [linear](https://linear.app/) issue tracker. git and [jj](https://www.jj-vcs.dev/) aware to keep you in the right views in linear. allows jumping to the web or the linear desktop app similar to `gh`.\n\n**works great with AI agents** — the CLI includes a [skill for Claude Code](#claude-code-skill) that lets agents create issues, update status, and manage your Linear workflow alongside your code.\n\nhere's how it works:\n\n```bash\nlinear config               # setup your repo, it writes a config file\n\nlinear issue list           # list unstarted issues assigned to you\nlinear issue list -A        # list unstarted issues assigned to anyone\nlinear issue start          # choose an issue to start, creates a branch\nlinear issue start ABC-123  # start a specific issue\nlinear issue view           # see current branch's issue as markdown\nlinear issue pr             # makes a PR with title/body preset, using gh cli\nlinear issue create         # create a new issue\n```\n\nit 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.\n\n## screencast demos\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003elinear issue create\u003c/code\u003e\u003c/summary\u003e\n\n\u003cimg width=\"600\" src=\"docs/cast-issue-create.svg?1\" alt=\"screencast showing the linear issue create command, interactively adding issue details\"\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003elinear issue start\u003c/code\u003e\u003c/summary\u003e\n\n\u003cimg width=\"600\" src=\"docs/cast-issue-start.svg?1\" alt=\"screencast showing the linear issue start command, interactively choosing an issue to start\"\u003e\n\n\u003c/details\u003e\n\n## install\n\n### homebrew\n\n```\nbrew install schpet/tap/linear\n```\n\n### deno via jsr\n\n```bash\ndeno install -A --reload -f -g -n linear jsr:@schpet/linear-cli\n```\n\n### binaries\n\nhttps://github.com/schpet/linear-cli/releases/latest\n\n### local dev\n\n```bash\ngit clone https://github.com/schpet/linear-cli\ncd linear-cli\ndeno task install\n```\n\n## setup\n\n\u003e [!WARNING]\n\u003e The `linear auth login` command is new and may have issues. For stable release setup instructions, see the [v1.8.1 README](https://github.com/schpet/linear-cli/blob/v1.8.1/README.md).\n\n1. create an API key at [linear.app/settings/account/security](https://linear.app/settings/account/security)[^1]\n\n2. authenticate with the CLI:\n\n   ```sh\n   linear auth login\n   ```\n\n3. configure your project:\n\n   ```sh\n   cd my-project-repo\n   linear config\n   ```\n\nsee [docs/authentication.md](docs/authentication.md) for multi-workspace support and other authentication options.\n\nthe CLI works with both git and jj version control systems:\n\n- **git**: works best when your branches include Linear issue IDs (e.g. `eng-123-my-feature`). use `linear issue start` or linear UI's 'copy git branch name' button and [related automations](https://linear.app/docs/account-preferences#git-related-automations).\n- **jj**: detects issues from `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)\"`\n\n## commands\n\n### issue commands\n\nthe current issue is determined by:\n\n- **git**: the issue id in the current branch name (e.g. `eng-123-my-feature`)\n- **jj**: the `Linear-issue` trailer in the current or ancestor commits\n\nnote that [Linear's GitHub integration](https://linear.app/docs/github#branch-format) will suggest git branch names.\n\n```bash\nlinear issue view      # view current issue details in terminal\nlinear issue view ABC-123\nlinear issue view 123\nlinear issue view -w   # open issue in web browser\nlinear issue view -a   # open issue in Linear.app\nlinear issue id        # prints the issue id from current branch (e.g., \"ENG-123\")\nlinear issue title     # prints just the issue title\nlinear issue url       # prints the Linear.app URL for the issue\nlinear issue pr        # creates a GitHub PR with issue details via `gh pr create`\nlinear issue list      # list your issues in a table view (supports -s/--state and --sort)\nlinear issue list -w   # open issue list in web browser\nlinear issue list -a   # open issue list in Linear.app\nlinear issue start     # create/switch to issue branch and mark as started\nlinear issue create    # create a new issue (interactive prompts)\nlinear issue create -t \"title\" -d \"description\"  # create with flags\nlinear issue update    # update an issue (interactive prompts)\nlinear issue delete    # delete an issue\nlinear issue comment list          # list comments on current issue\nlinear issue comment add           # add a comment to current issue\nlinear issue comment add -p \u003cid\u003e   # reply to a specific comment\nlinear issue comment update \u003cid\u003e   # update a comment\nlinear issue commits               # show all commits for an issue (jj only)\n```\n\n### team commands\n\n```bash\nlinear team list       # list teams\nlinear team id         # print out the team id (e.g. for scripts)\nlinear team members    # list team members\nlinear team create     # create a new team\nlinear team autolinks  # configure GitHub repository autolinks for Linear issues\n```\n\n### project commands\n\n```bash\nlinear project list    # list projects\nlinear project view    # view project details\n```\n\n### milestone commands\n\n```bash\nlinear milestone list --project \u003cprojectId\u003e     # list milestones for a project\nlinear m list --project \u003cprojectId\u003e             # list milestones (alias)\nlinear milestone view \u003cmilestoneId\u003e             # view milestone details\nlinear m view \u003cmilestoneId\u003e                     # view milestone (alias)\nlinear milestone create --project \u003cprojectId\u003e --name \"Q1 Goals\" --target-date \"2026-03-31\"  # create a milestone\nlinear m create --project \u003cprojectId\u003e           # create a milestone (interactive)\nlinear milestone update \u003cmilestoneId\u003e --name \"New Name\"  # update milestone name\nlinear m update \u003cmilestoneId\u003e --target-date \"2026-04-15\"  # update target date\nlinear milestone delete \u003cmilestoneId\u003e           # delete a milestone\nlinear m delete \u003cmilestoneId\u003e --force           # delete without confirmation\n```\n\n### document commands\n\nmanage Linear documents from the command line. documents can be attached to projects or issues, or exist at the workspace level.\n\n```bash\n# list documents\nlinear document list                            # list all accessible documents\nlinear docs list                                # alias for document\nlinear document list --project \u003cprojectId\u003e      # filter by project\nlinear document list --issue TC-123             # filter by issue\nlinear document list --json                     # output as JSON\n\n# view a document\nlinear document view \u003cslug\u003e                     # view document rendered in terminal\nlinear document view \u003cslug\u003e --raw               # output raw markdown (for piping)\nlinear document view \u003cslug\u003e --web               # open in browser\nlinear document view \u003cslug\u003e --json              # output as JSON\n\n# create a document\nlinear document create --title \"My Doc\" --content \"# Hello\"           # inline content\nlinear document create --title \"Spec\" --content-file ./spec.md        # from file\nlinear document create --title \"Doc\" --project \u003cprojectId\u003e            # attach to project\nlinear document create --title \"Notes\" --issue TC-123                 # attach to issue\ncat spec.md | linear document create --title \"Spec\"                   # from stdin\n\n# update a document\nlinear document update \u003cslug\u003e --title \"New Title\"                     # update title\nlinear document update \u003cslug\u003e --content-file ./updated.md             # update content\nlinear document update \u003cslug\u003e --edit                                  # open in $EDITOR\n\n# delete a document\nlinear document delete \u003cslug\u003e                   # soft delete (move to trash)\nlinear document delete \u003cslug\u003e --permanent       # permanent delete\nlinear document delete --bulk \u003cslug1\u003e \u003cslug2\u003e   # bulk delete\n```\n\n### other commands\n\n```bash\nlinear --help          # show all commands\nlinear --version       # show version\nlinear config          # setup the project\nlinear completions     # generate shell completions\n```\n\n## configuration options\n\nthe CLI supports configuration via environment variables or a `.linear.toml` config file. environment variables take precedence over config file values.\n\n| option          | env var                  | toml key          | example                    | description                           |\n| --------------- | ------------------------ | ----------------- | -------------------------- | ------------------------------------- |\n| Team ID         | `LINEAR_TEAM_ID`         | `team_id`         | `\"ENG\"`                    | default team for operations           |\n| Workspace       | `LINEAR_WORKSPACE`       | `workspace`       | `\"mycompany\"`              | workspace slug for web/app URLs       |\n| Issue sort      | `LINEAR_ISSUE_SORT`      | `issue_sort`      | `\"priority\"` or `\"manual\"` | how to sort issue lists               |\n| VCS             | `LINEAR_VCS`             | `vcs`             | `\"git\"` or `\"jj\"`          | version control system (default: git) |\n| Download images | `LINEAR_DOWNLOAD_IMAGES` | `download_images` | `true` or `false`          | download images when viewing issues   |\n\nthe config file can be placed at (checked in order, first found is used):\n\n- `./linear.toml` or `./.linear.toml` (current directory)\n- `\u003crepo-root\u003e/linear.toml` or `\u003crepo-root\u003e/.linear.toml` (repository root)\n- `\u003crepo-root\u003e/.config/linear.toml`\n- `$XDG_CONFIG_HOME/linear/linear.toml` or `~/.config/linear/linear.toml` (Unix)\n- `%APPDATA%\\linear\\linear.toml` (Windows)\n\n## claude code skill\n\nlinear-cli includes [a skill for claude code](https://code.claude.com/docs/en/skills) that helps claude use the CLI effectively. for use cases outside the CLI, it includes instructions to interact directly with the graphql api, including authentication.\n\n```bash\n# from claude code\n/plugin marketplace add schpet/linear-cli\n/plugin install linear-cli@linear-cli\n\n# from bash\nclaude plugin marketplace add schpet/linear-cli\nclaude plugin install linear-cli@linear-cli\n\n# to update\nclaude plugin marketplace update linear-cli\nclaude plugin update linear-cli@linear-cli\n```\n\n## why\n\nlinear's UI is incredibly good but it slows me down. i find the following pretty grating to experience frequently:\n\n- switching context from my repo to linear\n- not being on the right view when i open linear\n- linear suggests a git branch, but i have to do the work of creating or switching to that branch\n- linear's suggested git branch doesn't account for it already existing or having a merged pull request\n\nthis 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.\n\n[^1]: creating an API key requires member access, it is not available for guest accounts.\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschpet%2Flinear-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschpet%2Flinear-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschpet%2Flinear-cli/lists"}