
Ops Linear
- 55 installs
- 3.2k repo stars
- Updated August 2, 2026
- davepoon/buildwithclaude
Run a Linear command center - view the current sprint, create and update issues, manage priorities, and sync with GSD phases.
About
A Linear command center that shows the current sprint and creates, updates, and prioritizes issues while syncing with GSD phases. A developer uses it to manage Linear work from the ops suite.
- Sprint view plus issue create/update and priority management
- Syncs Linear issues with GSD project phases
Ops Linear by the numbers
- 55 all-time installs (skills.sh)
- Ranked #1,591 of 3,280 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/davepoon/buildwithclaude --skill ops-linearAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 55 |
|---|---|
| repo stars | ★ 3.2k |
| Last updated | August 2, 2026 |
| Repository | davepoon/buildwithclaude ↗ |
What it does
Run a Linear command center - view the current sprint, create and update issues, manage priorities, and sync with GSD phases.
Files
OPS ► LINEAR COMMAND CENTER
Runtime Context
Before executing, load available context:
1. 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)
2. Preferences: Read ${CLAUDE_PLUGIN_DATA_DIR}/preferences.json for secrets_manager / doppler config.
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:
1. mcp__linear__list_teams — get all team IDs 2. mcp__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:
1. Check if a Linear issue exists with matching phase reference. 2. If not, offer to create one. 3. 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 } } } }"}')