npx skills add ...
npx skills add fandhe-ai/agent-cli-skills --skill create-issue
GitHub Issue を親子構造 (sub-issues) で作成する。`gh issue create` で親・子 Issue を生成し、`gh api .../sub_issues` で親子関係を紐付ける。タイトルは Conventional Commits 形式 (`feat:`, `fix:` 等) を推奨。「Issue 作って」「タスクを分解して Issue 化」などで使用。
npx skills add fandhe-ai/agent-cli-skills --skill create-issue
GitHub Issue を親子構造で作成します。
gh CLI がインストールされ、認証済みであることgh auth status で確認できるユーザーの説明から以下を抽出:
作成する Issue(親・子とも同一)に GitHub Milestone を割り当てるかユーザーに確認する。
milestone 非運用リポジトリのガード: リポジトリに milestone が 1 件も存在しない場合 (closed 含む)は milestone 非運用リポジトリとみなし、確認せずこのステップをスキップする (ユーザーが明示的に milestone 割当を求めた場合を除く)。
gh issue view <親番号> --json milestone --jq '.milestone.title // empty' で親の milestone を
取得し、継承してよいかユーザーに確認する。取得結果が空(親が milestone 未設定)の場合は
継承せず、次の一覧提示フローへ進むgh api repos/{owner}/{repo}/milestones --jq '.[] | select(.state=="open") | .title'
でオープン中の milestone 一覧を提示し、選んでもらうgh issue create --milestone が既存名しか
受け付けないため、先に gh api --method POST "repos/{owner}/{repo}/milestones" -f "title=<名前>"
で作成する(同名の closed milestone があると 422 になるため reopen か別名をユーザーに確認する)MILESTONE に設定するMILESTONE を
親にも gh issue edit <親番号> --milestone "${MILESTONE}" で反映する
(子だけ milestone が付き親が未設定のまま残る不整合を防ぐ。冪等)MILESTONE は空のまま Step 2 以降へ進む(Issue は milestone なしで作成する)タイトルは Conventional Commits 形式: feat:, fix:, chore: 等。
各個別タスクを子 Issue として作成(MILESTONE は親と同じ値を使う):
gh api を使用して子 Issue を親の sub-issues に追加する。GitHub sub-issues API は issue 番号ではなく database id を要求するため、先に gh api で database id を取得してから渡す:
作成した親 Issue と子 Issue の URL を一覧表示する。
Issue 作成後、以下で確認する。
| 問題 | 回避策 |
|---|---|
sub_issue_id に issue 番号を渡す | gh api .../issues/<number> の .id(database id)を取得して渡す |
| 子 Issue が独立して完了できない粒度になっている | 受け入れ条件を見直し、単一の関心事に絞って再分解する |
認証エラーで gh api が失敗する | gh auth status で認証状態を確認し、gh auth login で再認証する |
このスキルはネットワーク越しの GitHub 操作(gh issue create / gh api .../sub_issues)を必須とする。該当コマンドはコマンド単位で sandbox 無効にして実行する。ネットワーク遮断を解除できない環境では実行できない。
CHILD_ARGS=(--title "feat: タスク名")
if [[ -n "${MILESTONE}" ]]; then
CHILD_ARGS+=(--milestone "${MILESTONE}")
fi
gh issue create "${CHILD_ARGS[@]}" --body "..."# 子 Issue の database id を取得する(issue 番号 {child_number} から変換)
child_id=$(gh api "repos/{owner}/{repo}/issues/{child_number}" --jq '.id')
# database id を sub_issue_id に渡して紐付ける
gh api \
--method POST \
"repos/{owner}/{repo}/issues/{parent_number}/sub_issues" \
-F "sub_issue_id=${child_id}"# 親 Issue の内容と sub-issues の紐付けを確認
gh issue view <親Issue番号>
# sub-issues が正しく紐付いているか確認
gh api "repos/{owner}/{repo}/issues/<親Issue番号>/sub_issues" --jq '.[].number'