一键导入
ops-linear
Linear command center. Shows current sprint, creates/updates issues, manages priorities, syncs with GSD phases.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Linear command center. Shows current sprint, creates/updates issues, manages priorities, syncs with GSD phases.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Interactive OAuth init wizard for the multi-account Claude rotator. Walks through every account in the rotation config and, for any account missing a valid keychain token, delegates to the proven `rotate.mjs` magic-link flow (browser-driver cascade + Gmail polling), which writes the verified OAuth token to `Claude-Rotation-<key>` (key = account label or email, keychain account `$USER`). Re-runnable any time. Standalone alias of the same step inside `/ops:setup`.
Multi-account Claude Max rotator. Status, manual rotation, account list, add-account wizard, and CRS relay-pool auto-prioritization. Requires account_rotation_enabled=true in plugin settings.
Full inbox management across all channels — WhatsApp (whatsmeow bridge via mcp__whatsapp__*), iMessage (chat.db reader + AppleScript send via mcp__plugin_imessage_imessage__*), Email (Gmail MCP), Slack (MCP), Telegram (user-auth MCP), Discord (webhook + REST read), Notion (MCP — comments, mentions, assigned tasks). Scans FULL inbox (not just unread), identifies messages needing replies, archives handled conversations.
Read-only AWS account hygiene audit — security baseline, unused/orphaned resources, and cost optimization across all configured regions. Produces severity-ranked findings (CRITICAL→LOW) plus a machine-readable findings.json. Cleanup actions are always human-gated, never automatic. Use for cost reviews, security sweeps, recurring account hygiene, or "audit my AWS".
Token-efficient morning briefing. Pre-gathers all data via shell scripts, then presents a unified business dashboard with prioritized actions.
Revenue and costs tracker. AWS spend via aws ce, credits tracker, project revenue stages. Shows burn rate, runway estimate, credits expiring.
| name | ops-linear |
| description | Linear command center. Shows current sprint, creates/updates issues, manages priorities, syncs with GSD phases. |
| argument-hint | [sprint|create|update|sync|backlog|issue-id] |
| allowed-tools | ["Bash","Read","Grep","Glob","Skill","AskUserQuestion","TaskCreate","TaskUpdate","WebFetch","mcp__linear__list_issues","mcp__linear__list_teams","mcp__linear__list_projects","mcp__linear__get_issue","mcp__linear__update_issue","mcp__linear__create_issue","mcp__linear__create_comment","mcp__linear__search_issues"] |
| effort | medium |
| maxTurns | 30 |
Before executing, load available context:
Secrets: Linear API key required for MCP fallback queries.
$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.jsonPreferences: Read ${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 } } } }"}')
CLAIM_KEY: linear:issue:<identifier> (e.g. linear:issue:<TEAM>-123)
CLAIM_KEY="linear:issue:<identifier>"
ledger query --claim-key "$CLAIM_KEY" --since=-PT24H
If in_progress or done exists, skip — another session or Perplexity already
acted on this issue. Surface awaiting_sam entries as "update already staged."
# Claim when creating, updating, or triaging a Linear issue
ledger write \
--claim-key "$CLAIM_KEY" \
--kind "file" \
--status "in_progress" \
--title "Linear: <identifier> — <title>" \
--ttl-sec 3600
# Resolve after Linear state is updated
ledger write \
--claim-key "$CLAIM_KEY" \
--kind "file" \
--status "done" \
--title "Linear: <identifier> — <title>" \
--context "status→<new_state> | assignee→<assignee>"