Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Linear command center. Shows current sprint, creates/updates issues, manages priorities, syncs with GSD phases.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 15% | 0% |
Before executing, load available context:
### Secret Resolution
$LINEAR_API_KEY env varmcp__doppler__*) — if Doppler MCP server is configureddoppler secrets get LINEAR_API_KEY --plain (if doppler CLI configured in prefs)password_manager_config.query_cmd from ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json${CLAUDE_PLUGIN_DATA_DIR}/preferences.json for secrets_manager / doppler config.| Command | Usage | Output | |---------|-------|--------| | curl -X POST https://api.linear.app/graphql -H "Authorization: $LINEAR_API_KEY" -H "Content-Type: application/json" -d '{"query":"{ issues(filter: {state: {type: {in: [\"started\",\"unstarted\"]}}}) { nodes { id title state { name } priority assignee { name } } } }"}' | Active issues | JSON | | curl -X POST https://api.linear.app/graphql -H "Authorization: $LINEAR_API_KEY" -H "Content-Type: application/json" -d '{"query":"{ cycles(filter: {isActive: {eq: true}}) { nodes { id number startsAt endsAt } } }"}' | Current cycles | JSON |
Run in parallel:
mcp__linear__list_teams — get all team IDsmcp__linear__list_issues — get issues with cycle filter (use GraphQL fallback for cycle queries if needed)Then fetch issues for the current cycle: mcp__linear__list_issues filtered to current cycle ID.
$ARGUMENTS| Argument | Action | | --------------- | --------------------------------------- | | (empty), sprint | Show current sprint board | | backlog | Show unassigned/unscheduled issues | | create title] | Create a new issue (prompt for details) | | update id] | Update issue by ID | | sync | Sync GSD phases to Linear issues | | issue-id] | Show and edit that specific issue |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LINEAR ► SPRINT [N] — [start] → [end]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IN PROGRESS
[id] [priority] [title] [assignee] [estimate]
TODO
[id] [priority] [title] [assignee] [estimate]
DONE THIS SPRINT
[id] [title] [completed date]
BLOCKED / CANCELLED
[id] [title] [reason]
──────────────────────────────────────────────────────
Sprint velocity: [done points] / [total points] ([%])
──────────────────────────────────────────────────────Use batched AskUserQuestion calls (max 4 options each):
AskUserQuestion call 1:
[Create new issue]
[Update issue status]
[Move issue to/from sprint]
[More...]AskUserQuestion call 2 (only if "More..."):
[View backlog]
[Sync with GSD phases]Collect from user (or parse from $ARGUMENTS):
Use mcp__linear__create_issue to create. Confirm: Created [id]: [title]
Read all active GSD STATE.md files across projects. For each active phase:
Update Linear issues to match GSD phase completion status.
Use AskUserQuestion after displaying any view to get the next action.
When the user starts working on a Linear issue, use TaskCreate to track it locally. Update with TaskUpdate as the issue progresses. This bridges Linear state with local session state.
When Linear MCP tools hit quota limits or fail, fall back to WebFetch with the Linear GraphQL API:
WebFetch(url: "https://api.linear.app/graphql", method: "POST", headers: {"Authorization": "$LINEAR_API_KEY"}, body: '{"query":"{ issues(filter: {cycle: {id: {eq: \"<id>\"}}}}) { nodes { id title state { name } } } }"}')Other measured skills in the registry, with their headline benchmark lift.