mcpField
O
ops-linear

ops-linear

github.com/davepoon開発3.7k69 回インストール今日更新
リポジトリ

ops-linear について

ops-linear は Linear の課題、スプリントボード、バックログを確認・管理する Claude スキルです。GSD の進行中フェーズと Linear の課題状態の同期にも対応します。

主な機能

  1. 01現在のスプリントとバックログの表示
  2. 02Linear の課題の作成と更新
  3. 03サイクル間での課題の移動
  4. 04GSD フェーズの同期
  5. 05Linear MCP または GraphQL による代替

活用シーン

  1. 01現在のスプリントの作業計画を確認
  2. 02Linear の課題を作成または編集
  3. 03Linear の課題と GSD フェーズを整合

MCP 対応

Linear MCP ツールでチームと課題を一覧表示し、課題を作成します。MCP ツールが利用できない、または失敗した場合は Linear GraphQL API に切り替えます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davepoon/buildwithclaude --skill ops-linear

インストール後、Claude Code で/ops-linearを入力して読み込まれたか確認します。

詳細

OPS ► LINEAR COMMAND CENTER

ランタイムコンテキスト

実行する前に、利用可能なコンテキストを読み込みます。

  1. シークレット:MCP フォールバッククエリには Linear API キーが必要です。

    シークレットの解決
    • $LINEAR_API_KEY 環境変数を確認します
    • 次に、Doppler MCP ツール(mcp__doppler__*)を確認します(Doppler MCP サーバーが設定されている場合)
    • 次に、doppler secrets get LINEAR_API_KEY --plain を実行します(設定で doppler CLI が構成されている場合)
    • 次に、${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json の password_manager_config.query_cmd を使用します
    • 利用できない場合は、Linear MCP ツールのみを使用します(curl へのフォールバックはできません)
  2. 設定:${CLAUDE_PLUGIN_DATA_DIR}/preferences.json を読み込み、secrets_manager / doppler の設定を確認します。

CLI/API リファレンス

Linear GraphQL(MCP が利用できない場合のフォールバック)
コマンド使用方法出力
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 } } } }"}'アクティブな課題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 } } }"}'現在のサイクルJSON

フェーズ 1 — データの読み込み

並行して実行します。

  1. mcp__linear__list_teams — すべてのチーム ID を取得します
  2. mcp__linear__list_issues — サイクルフィルターを使用して課題を取得します(必要に応じてサイクルクエリには GraphQL フォールバックを使用します)

次に、現在のサイクル ID でフィルターした mcp__linear__list_issues を使って、現在のサイクルの課題を取得します。


$ARGUMENTS に応じた振り分け

引数アクション
(空)、sprint現在のスプリントボードを表示します
backlog未割り当て/未スケジュールの課題を表示します
create [title]新しい課題を作成します(詳細を確認します)
update [id]ID で課題を更新します
syncGSD フェーズを Linear の課題に同期します
[issue-id]指定した課題を表示して編集します

スプリントボード表示

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 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] ([%])
──────────────────────────────────────────────────────

AskUserQuestion の呼び出しはバッチ処理(各呼び出しで最大 4 個の選択肢)にします。

AskUserQuestion 呼び出し 1:

  [Create new issue]
  [Update issue status]
  [Move issue to/from sprint]
  [More...]

AskUserQuestion 呼び出し 2(「More...」の場合のみ):

  [View backlog]
  [Sync with GSD phases]

課題の作成フロー

ユーザーから情報を収集します(または $ARGUMENTS から解析します)。

  • タイトル
  • チーム(曖昧な場合は選択肢を表示します)
  • 優先度(urgent/high/medium/low)
  • サイクル(現在のスプリントまたはバックログ)
  • 担当者(任意)
  • 見積もり(任意)

mcp__linear__create_issue を使用して作成します。確認メッセージ:Created [id]: [title]


GSD 同期フロー

プロジェクト全体から、アクティブな GSD STATE.md ファイルをすべて読み込みます。アクティブなフェーズごとに、次の操作を行います。

  1. 対応するフェーズ参照を持つ Linear の課題が存在するか確認します。
  2. 存在しない場合は、作成を提案します。
  3. ステータスが異なる場合(GSD では完了、Linear では進行中など)は、同期を提案します。

GSD フェーズの完了ステータスに一致するように、Linear の課題を更新します。

ビューを表示した後、次のアクションを確認するために AskUserQuestion を使用します。


ネイティブツールの使用

タスク — スプリント作業の追跡

ユーザーが Linear の課題に取り組み始めたら、TaskCreate を使用してローカルで追跡します。課題の進行に応じて TaskUpdate で更新します。これにより、Linear の状態とローカルセッションの状態を連携できます。

WebFetch — Linear API のフォールバック

Linear MCP ツールがクォータ制限に達した場合、または失敗した場合は、Linear GraphQL API に WebFetch でフォールバックします。

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 } } } }"}')

コメント