ops-linear
OPS ► LINEAR COMMAND CENTER
Runtime Context
Before executing, load available context:
-
Secrets: Linear API key required for MCP fallback queries.
Secret Resolution
- Check
$LINEAR_API_KEYenv var - Then: Doppler MCP tools (
mcp__doppler__*) — if Doppler MCP server is configured - Then:
doppler secrets get LINEAR_API_KEY --plain(if doppler CLI configured in prefs) - Then: use
password_manager_config.query_cmdfrom${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json - If unavailable, use Linear MCP tools exclusively (no curl fallback possible)
- Check
-
Preferences: Read
${CLAUDE_PLUGIN_DATA_DIR}/preferences.jsonforsecrets_manager/dopplerconfig.
CLI/API Reference
Linear GraphQL (fallback when MCP unavailable)
| 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 |
Phase 1 — Load data
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.
Route by $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 |
Sprint board view
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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]
Create issue flow
Collect from user (or parse from $ARGUMENTS):
- Title
- Team (list choices if ambiguous)
- Priority (urgent/high/medium/low)
- Cycle (current sprint or backlog)
- Assignee (optional)
- Estimate (optional)
Use mcp__linear__create_issue to create. Confirm: Created [id]: [title]
GSD sync flow
Read all active GSD STATE.md files across projects. For each active phase:
- Check if a Linear issue exists with matching phase reference.
- If not, offer to create one.
- If status differs (GSD says done, Linear says in-progress), offer to sync.
Update Linear issues to match GSD phase completion status.
Use AskUserQuestion after displaying any view to get the next action.
Native tool usage
Tasks — sprint work tracking
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.
WebFetch — Linear API fallback
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 } } } }"}')
More from davepoon/buildwithclaude
file-organizer
Intelligently organizes your files and folders across your computer by understanding context, finding duplicates, suggesting better structures, and automating cleanup tasks. Reduces cognitive load and keeps your digital workspace tidy without manual effort.
212xlsx
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas
187content-research-writer
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
141docx
Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
122auth-patterns
This skill should be used when the user asks about "authentication in Next.js", "NextAuth", "Auth.js", "middleware auth", "protected routes", "session management", "JWT", "login flow", or needs guidance on implementing authentication and authorization in Next.js applications.
104server-actions
This skill should be used when the user asks about "Server Actions", "form handling in Next.js", "mutations", "useFormState", "useFormStatus", "revalidatePath", "revalidateTag", or needs guidance on data mutations and form submissions in Next.js App Router.
100