From linear
Linear issue management via linearis CLI with team inference. USE WHEN linear, issues, tasks, tickets, backlog, sprint, resolve issue, ship issue, plan project, break down feature, ship daily, what should I work on.
How this skill is triggered — by the user, by Claude, or both
Slash command
/linear:linearThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**BLOCKING skill** that intercepts ALL Linear operations via `linearis` CLI to enforce:
IssueTemplate.mdLinearContext.mdlinear-context.example.jsontools/linear-graphql.shworkflows/CloseIssue.mdworkflows/CreateIssue.mdworkflows/CreateProject.mdworkflows/ListIssues.mdworkflows/ManageInitiatives.mdworkflows/ManageMilestones.mdworkflows/MonitorCI.mdworkflows/PlanProject.mdworkflows/ResolveIssue.mdworkflows/ReviewPR.mdworkflows/ShipDaily.mdworkflows/UpdateIssue.mdBLOCKING skill that intercepts ALL Linear operations via linearis CLI to enforce:
All Linear operations use the linearis CLI which outputs JSON:
linearis issues create "<title>" -d "<desc>" -a <YOUR_LINEAR_USER_UUID> -p <N> --team <KEY> --project "<name>" --labels "<labels>"
linearis issues search "<query>" --assignee <YOUR_LINEAR_USER_UUID> --team <KEY> --status "<states>" -l 25
linearis issues list -l 25
linearis issues read <IDENTIFIER>
linearis issues update <IDENTIFIER> -s "<status>" -p <N> --labels "<labels>"
Set your Linear user UUID in linear-context.json under user.id. Use this UUID instead of "me" for all assignee operations for reliable results.
linearis does not support --due-date or --estimate flags. Use the GraphQL helper bundled in this plugin:
${CLAUDE_PLUGIN_ROOT}/skills/linear/tools/linear-graphql.sh set-due-date "<issueUUID>" "YYYY-MM-DD"
${CLAUDE_PLUGIN_ROOT}/skills/linear/tools/linear-graphql.sh set-estimate "<issueUUID>" <points>
${CLAUDE_PLUGIN_ROOT}/skills/linear/tools/linear-graphql.sh set-due-date-and-estimate "<issueUUID>" "YYYY-MM-DD" <points>
Requires LINEAR_API_TOKEN in environment or ~/.env.secrets.
linearis issues list has NO filters — use linearis issues search for all filtered querieslinearis issues search supports --team, --assignee, --project, --status, -llinearis issues update accepts both UUID and identifiers (e.g., <TEAM>-165)| Workflow | Trigger | File |
|---|---|---|
| CreateIssue | "create issue", "new task", "add to linear", "track this" | workflows/CreateIssue.md |
| CreateProject | "create project", "new project", "add project", "start a project" | workflows/CreateProject.md |
| UpdateIssue | "update issue", "change status", "modify task", "edit issue" | workflows/UpdateIssue.md |
| ListIssues | "list issues", "show tasks", "what's in backlog", "my issues" | workflows/ListIssues.md |
| CloseIssue | "close issue", "mark done", "complete task", "finish issue" | workflows/CloseIssue.md |
| ResolveIssue | "resolve issue", "work on -123", "fix issue", "ship issue" | /resolve <TEAM>-123 command (preferred) or workflows/ResolveIssue.md |
| PlanProject | "plan project", "break this down", "decompose feature", "create project plan" | workflows/PlanProject.md |
| ManageInitiatives | "create initiative", "list initiatives", "link project to initiative" | workflows/ManageInitiatives.md |
| ManageMilestones | "create milestone", "add milestone", "project milestone" | workflows/ManageMilestones.md |
| ShipDaily | "ship daily", "what should I work on", "daily standup", "ship" | workflows/ShipDaily.md |
| MonitorCI | "check CI", "CI status", "fix CI", "is CI passing" | workflows/MonitorCI.md |
| ReviewPR | "handle review", "PR feedback", "address review comments" | workflows/ReviewPR.md |
Example 1: Create a new issue
User: "Create an issue to update the API documentation"
-> Invokes CreateIssue workflow
-> Infers team from context or prompts
-> Prompts for due date
-> Assigns to configured user UUID
-> Creates issue via linearis CLI + GraphQL helper for due date
Example 2: List current tasks
User: "What issues do I have in my backlog?"
-> Invokes ListIssues workflow
-> Searches with --assignee UUID
-> Fetches issues across all teams
-> Formats with priority indicators
Example 3: Close a completed task
User: "Mark <TEAM>-165 as done"
-> Invokes CloseIssue workflow
-> Identifies issue by identifier
-> Updates status to "Done" via linearis issues update
Example 4: Resolve an issue end-to-end
User: "Resolve <TEAM>-200"
-> Fetches issue, looks up repo from linear-context.json
-> Creates feature branch, updates status to In Progress
-> Architect agent investigates codebase, proposes TDD strategy
-> Engineer agent writes failing tests, then implements solution
-> Commits, pushes, creates PR with issue reference
-> Monitors CI, fixes any failures via subagent
-> CI passes: immediately attempts merge (squash, delete branch)
-> If merge blocked: attempts self-approve, then merges
-> Only pauses if external reviewer required (re-enter with /resolve <TEAM>-200)
-> On approval: merges PR, closes Linear issue to Done
Example 5: Plan a new feature as issues
User: "Break down the search feature into issues"
-> Invokes PlanProject workflow
-> Decomposes feature using First Principles thinking
-> Creates 5 issues with max 3 acceptance criteria each
-> Sets dependencies, priorities, and estimates
-> Batch-creates in Linear after user approval
Example 6: Daily shipping workflow
User: "What should I work on today?"
-> Invokes ShipDaily workflow
-> Fetches open issues sorted by priority + due date
-> Presents top 3 candidates for selection
-> Triggers ResolveIssue for each selected issue
-> Reports daily shipping summary
Example 7: Check CI on a PR
User: "Is CI passing on <TEAM>-200?"
-> Invokes MonitorCI workflow
-> Checks GitHub Actions status for the feature branch
-> Reports: passing/failing with details
Example 8: Handle PR review feedback
User: "Address the review comments on <TEAM>-200"
-> Invokes ReviewPR workflow
-> Reads all review comments from GitHub
-> Spawns subagent to address each comment
-> Commits fixes, pushes, reports status
ALL fields must be populated. No partial issues.
| Field | Required | Action |
|---|---|---|
title | YES | Clear, actionable title |
team | YES | Infer from context triggers or ASK |
project | YES | Match using linear-context.json triggers |
assignee | YES | Always use your UUID from linear-context.json |
priority | YES | 1=Urgent, 2=High, 3=Normal, 4=Low |
dueDate | YES | ALWAYS prompt user if not provided |
estimate | RECOMMENDED | Story points (1, 2, 3, 5, 8) |
labels | RECOMMENDED | Based on label logic |
Workflow:
All issues route to the default team configured in linear-context.json. The defaultTeamKey field in the routing section determines which team key is used.
The skill infers project from conversation context using triggers in linear-context.json. Each project entry has a triggers array of keywords. If no project match is found, ASK the user which project (use AskUserQuestion).
| Context | Labels |
|---|---|
| Bug reports, errors, broken | Bug |
| New capabilities | Feature |
| Optimization, refactoring | Improvement |
| Client deliverables | Client-Facing + Deliverable |
| Training materials | Training |
| HR, payroll, benefits | HR/Compensation |
| Business workflows | Operations |
| Key checkpoints | Milestone |
--json flag. It doesn't exist and errors out.head -3 for id extraction from linearis output.${CLAUDE_PLUGIN_ROOT}/skills/linear/tools/linear-graphql.sh set-due-datelinear-context.json - Your workspace data: teams, projects, triggers, IDs (copy from linear-context.example.json and populate)LinearContext.md - Workflow documentation and examplesnpx claudepluginhub aojdevstudio/agentic-utilities --plugin linearCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.