Fetches and displays a GitHub issue with sub-issues. Use when: user wants to read an issue, view issue details, or understand issue context.
GitHub の Issue を取得し、サブ Issue・親 Epic・Epic 配下の兄弟 Issue・完了済み Issue の実装 PR まで含めてタスクの全体像を提示する。
Issue 番号 (例: 123 または #123)
$ARGUMENTS
引数から Issue 番号を抽出: 123 / #123 / https://github.com/<owner>/<repo>/issues/<n> を受け付ける。URL 形式なら <owner>/<repo> を記録し、以降の gh 呼び出しに --repo <owner>/<repo> を付与
対象 Issue を取得: gh issue view <n> --json number,title,body,state,url,comments
[PR として取得] を 1 行付け、サブ Issue・親 Epic 探索は通常通り続行サブ Issue を抽出 → 詳細を揃える
gh issue view <n> --repo <owner>/<repo> --json subIssues --jq '.subIssues.nodes[] | {number, title, state, url}'- [ ] #NNN / - [x] #NNN を抽出(API と dedup)#NNN 参照の振り分け(3 分岐、上から順に判定):Part of #N 以外の前置詞付き参照 / [text](#N) / クロスリポ / Discussion 等) → 「関連リンク」へ分離missing_nums = tasklist_nums - { s.number for s in api_subs }
for n in missing_nums:
gh issue view <n> --json number,title,body,state,url # ここでだけ呼ぶ
gh issue view の呼び出しは 必ず len(missing_nums) 件。--jq フィルタは正としない(生レスポンスを使う)。Discussion は「関連リンク」へ親 Epic を上向きに 1 階層辿る(全体像把握の中核)
gh issue view --json parent)。本文の Part of #N / Parent: #N / Epic: #N 等のテキスト規約は使わない(UI 上の公式紐づけが正)gh issue view <n> --repo <owner>/<repo> --json parent \
--jq 'if .parent == null then null else (.parent | {number, title, state, url, repo: (.url | capture("github\\.com/(?<r>[^/]+/[^/]+)/issues/").r)}) end'
number / title / state / url を返す。repo(owner/repo)は parent に repository サブフィールドが無いため url から抽出する。body も parent には含まれないので、本文が必要なら親番号確定後に gh issue view <parent_num> --json body で別途取得するparent が null: 「親 Epic なし」と 1 行記録し手順 5 / 6 をスキップrepo が <owner>/<repo> と異なる(クロスリポ親): 「親 Epic: クロスリポ参照 — parent.state などが取得できないなど例外時: 「親参照あり — 取得不可: <理由>」と 1 行記録し手順 5 / 6 をスキップ親 Epic 配下の兄弟 Issue 一覧と本文: まず一覧を取得:
gh issue view <parent_num> --repo <owner>/<repo> --json subIssues --jq '.subIssues.nodes[] | {number, title, state, url}'
続いて 対象 Issue 以外の全兄弟 について本文を取得(手順 7 と並列、兄弟同士も並列):
gh issue view <sibling_n> --repo <owner>/<repo> --json number,title,body,state,url
closed 兄弟の実装 PR を取得(state == "closed" の兄弟のみ。open には呼ばない):
gh issue view <n> --json number,closedByPullRequestsReferences \
--jq '{number, prs: [.closedByPullRequestsReferences[] | {number, url, state, title}]}'
-、skill は止めないstate == null 補完もこの 1 呼び出しに含める):gh pr view <pr> --repo <owner>/<repo> --json number,state,title,body,additions,deletions,changedFiles,files
additions / deletions / changedFiles で規模を 1 行(例: +120 -45 / 8 files)files[].path の上位 5 件を「主な変更ファイル」として 1 行実装 PR 欄だけ残す関連ファイルをコードベースから検索: 対象 Issue のタイトル・本文から 2-3 個のキーワードを抽出。1 シンボル = 1 キーワード(audit-log / auditLog / audit_log の表記ゆれは同一キーワードの 1 セット)。総数は最大 3 個:
grep -rln "<keyword>" . \
| grep -Ev '(^|/)(node_modules|\.next|dist|__generated__|\.claude/worktrees|\.playwright-mcp|\.turbo|coverage|\.git)(/|$)' \
| head -n 10
--exclude-dir は BSD/GNU で挙動が割れるため後段 grep -Ev を使う。0 件なら「該当なし」
逐次: 手順 2 → 4(対象 Issue がないと親参照を抽出できない)。並列可: 手順 3 の missing_nums 追加取得、手順 5 の兄弟一覧取得 → 兄弟本文取得(一覧が取れた直後に全兄弟を並列)、手順 6 の closed 兄弟ごとの closing PR 抽出と PR 本文取得(PR ごとに並列)、手順 7 — 兄弟が N 件あれば 1 メッセージに 2N 件程度の gh 呼び出しを並べる前提
共通ルール:
**太字** で統一(絵文字・矢印・色マーカー等は使わない)- で統一(open 兄弟 / closed だが closing PR なし / 取得失敗、すべて -)。手順 6 の内部記録上の区別は表セルには反映しない#<番号> <title> (state) / URL / 本文要点 3-5 行。comments が 0 件のときは comments 行を出さない(「コメント: なし」等の補足行は不要)# / title / state。0 件時は「サブ Issue なし」#<num> <title> (state) / URL / 本文要点 2-4 行# / title / state / 実装 PR。対象 Issue 行は **#<num>** のように太字で強調、実装 PR 列は #<pr>(state)、open 兄弟と PR なし closed は -closed: M / N、open: K / N の 1 行#<num>: 要点 2-4 行。兄弟が 0 件(自分のみ)のときは「兄弟 Issue 本文要点: なし(兄弟は対象のみ)」の 1 行#<pr> <title> / 本文要点 2-4 行 / +A -D / F files / 主な変更ファイル上位 5 件。closing PR を持つ closed 兄弟が 0 件のときは「実装 PR サマリ: なし」の 1 行Issue.parent が null のときに本文中の #NNN や Part of 等のテキストから類推して親を取得しない(UI で紐づいていない=親なしと扱う)sub_issues API が返す state は open / closed の 2 値。原文のまま提示