manage-linear
Manage Linear issues, projects, cycles, initiatives, and teams via the `linear` CLI (schpet/linear-cli)
SKILL.md.claude/skills/manage-linear/SKILL.md
GitHubManage Linear
CLI tool: linear (installed via Homebrew). Authenticated and ready to use.
Run linear --help or linear <command> --help for full option details — don't memorize flags, look them up.
Important: --sort flag
linear issue list requires a sort: --sort priority or --sort manual. Always include it.
Core commands
Issues
List issues:
linear issue list --team <KEY> --sort priority [--limit N]List all states: add
--all-states(default: unstarted only)Filter by state:
--state started,--state backlog, etc.Other people's issues (was
--all-assigneesonissue list): the flag was removed fromissue listand moved to a separateissue querysubcommand:linear issue query --team <KEY> --all-assignees --all-states --sort manualRunning
linear issue list --all-assigneesnow errors out with:--all-assignees has been removed from 'issue mine'. Use 'linear issue query --all-assignees' for assignee filtering.Create issue:
linear issue create --team <KEY> --title "..." [--description "..." | --description-file path] [--assignee self] [--priority 1-4] [--label "..."] [--project "..."] [--state "..."]View issue:
linear issue view <ID> [--json]Update issue:
linear issue update <ID> [--state "..." | --title "..." | --assignee "..." | --priority N | --label "..." | ...]Delete issue:
linear issue delete <ID>Comments:
linear issue comment add <ID>,linear issue comment list <ID>Relations:
linear issue relation add <ID> <type> <relatedID>
Gotchas
--projectonissue createrejects UUIDs. Pass the project name or slug:linear issue create --team AYC --project "Workspaces" --title "..." # works linear issue create --team AYC --project fb01ed91-... --title "..." # → "Project not found"UUIDs do work on
project view/project update, just not onissue create. Look up the slug vialinear project list --jsonwhen uncertain.linear issue viewdoes not list sub-issues. To enumerate children of a parent, use the raw GraphQL fallback:linear api 'query($id: String!){ issue(id:$id){ children{ nodes{ identifier title state{ name } } } } }' \ --variable id=<PARENT_ID>Newly created issues may not be queryable immediately. If
linear issue view <ID>right afterissue createfails with "Could not find referenced Issue", wait a second and retry — trust the URL printed bycreate.
Teams
- List teams:
linear team list - Team members:
linear team members [KEY]
Projects
- List:
linear project list - View:
linear project view <ID> - Create/update/delete — see
linear project --help
Cycles, Milestones, Initiatives
linear cycle list --team <KEY>,linear cycle view <ref>linear milestone list --project <ID>,linear milestone create/update/deletelinear initiative list,linear initiative view/create/update/archivelinear project-update create <projectId>,linear initiative-update create <initId>
Labels & Documents
linear label list,linear label createlinear document list,linear document view <ID>,linear document create/update
Raw GraphQL
For anything the CLI doesn't cover: linear api '<query>' [--variable key=value] [--paginate]
Ayunis workspace teams
| Key | Name |
|---|---|
| AYC | Ayunis Core |
| DEM | Demo |
| ENG | Engineering |
| AYL3 | Locaboo 3 |
| AYL4 | Locaboo 4 |
| MGM | Management |
| SAL | Sales |
Per-team state names
State names are NOT uniform across teams. Do not hardcode "In Progress",
"Merged", or "Done" — look up the team's actual state before updating. Confirmed
divergences:
| Team | Started state | Release-pending state | Closed state |
|---|---|---|---|
| AYC | In Development |
Merged |
Done |
(Other teams default to the standard In Progress / Done; look up whether a
release-pending state exists before moving a merged code ticket.)
To enumerate any team's states yourself:
linear api 'query($key: String!){ team(id: $key){ states { nodes { name type } } } }' \
--variable key=<TEAM_KEY>
Guidelines
- Always use
--no-interactiveonissue createwhen running non-interactively (avoids prompts). - Use
--jsononissue viewwhen you need structured data to process. - Issue IDs look like
AYC-4(team key + number). - Ask before creating/updating/deleting — treat writes with care.
- For code-backed issues, merge is not completion. The Git integration should move the issue to the team's release-pending state after merge (
Mergedfor AYC). Only the release process may move it toDoneafter a production release contains the change. Before reopening an unexpectedly completed issue, inspect its state history and linked release; restore it only when completion preceded the containing release. - Subtasks should always be created with
--state Backlog, notTriage— the parent has already been triaged. - Create sub-issues upfront when a ticket enumerates iterations. If the parent ticket spells out "iter 1 / iter 2 / iter 3" or numbered phases, propose creating one sub-issue per iteration during planning, before implementation starts. Progress each sub-issue through the team's workflow; code-backed subtasks follow the same release-pending/
Donelifecycle as their parent.