publish について
Seed を `gh` コマンドラインで GitHub の Epic と関連する Task issue に変換する Ouroboros スキルです。Seed から作業を計画するチーム向けで、新規 issue のみを作成し、既存の issue は変更しません。
主な機能
- 01YAML と JSON の Seed を公開
- 02受け入れ条件を Task issue に分割
- 03過去の公開を確認
- 04ラベル作成と Epic の関連付け
活用シーン
- 01プロジェクトの Seed を GitHub の作業項目に変換
- 02公開前にタスク分割案を確認
MCP 対応
このスキルは `gh` コマンドラインを使用し、MCP は使用しません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ q00/ ouroboros --skill publishインストール後、Claude Code で/publishを入力して読み込まれたか確認します。
詳細
/ouroboros:publish
Seed を GitHub の Epic issue と Task issue に変換します。gh CLI のみを使って処理し(MCP は使用しません)、新しい issue のみを作成し、既存の issue は変更しません。
ooo publish [seed_path]
/ouroboros:publish [seed_path]
手順
アクティブなランタイムの run_shell 機能でコマンドを実行し、質問はすべてアクティブなランタイムの ask_user 機能で行います。
Step 1: 前提条件
command -v gh を実行します。見つからない場合は、https://cli.github.com/ からインストールするようユーザーに伝えて終了します。gh auth status を実行します。認証されていない場合は、gh auth login を実行するようユーザーに伝えて終了します。
Step 2: Seed の場所を特定する
Seed は ~/.ouroboros/seeds/ に保存されています。インタビュー用 Seed は {seed_id}.yaml、PM Seed は pm_seed_{id}.json です。次の優先順位で確認します。
- 明示的に指定された
.yamlまたは.jsonのパス引数。 ls -t ~/.ouroboros/seeds/*.yaml ~/.ouroboros/seeds/*.json 2>/dev/null | head -5で取得した最新のファイル。複数ある場合は、ユーザーに選択してもらいます。- この会話の前半で
ooo seedまたはooo pmが報告した Seed のパス。
見つからない場合は、先に ooo seed または ooo pm を実行するようユーザーに伝えて終了します。
Step 3: Seed を解析する
拡張子で形式を判定します。フィールドがない、または空の場合、そのセクションは省略し、エラーにはしません。
YAML Seed(ooo interview + ooo seed):
| フィールド | 用途 |
|---|---|
goal | Epic のタイトルと Goal セクション |
constraints | Constraints セクション |
acceptance_criteria | Epic のチェックリスト。Task issue に割り当てます |
ontology_schema | Ontology テーブル(フィールド、型、説明) |
evaluation_principles | Evaluation Principles テーブル(名前、重み、説明) |
exit_conditions | Exit Conditions(Definition of Done) |
metadata.ambiguity_score | 信頼度の指標 |
metadata.seed_id | 重複検出 |
JSON PM Seed(ooo pm、PMSeed スキーマ):
| フィールド | 用途 |
|---|---|
pm_id | 重複検出 |
product_name | Epic タイトルの接頭辞 |
goal | Goal セクション |
constraints | Constraints セクション |
success_criteria | Acceptance Criteria のチェックリスト |
user_stories | 各項目を「As a {persona}, I want to {action}, so that {benefit}.」として記載する User Stories |
deferred_items | Deferred Items セクション |
decide_later_items | Open Questions セクション |
assumptions | Assumptions セクション |
Step 4: 対象リポジトリ
gh repo view --json nameWithOwner -q '.nameWithOwner' 2>/dev/null を実行します。リポジトリが返された場合は、そこに公開するか、別の owner/repo にするかをユーザーに尋ねます。返されない場合は、owner/repo を尋ねます。回答を TARGET_REPO として保存します。以降の gh コマンドにはすべて -R <TARGET_REPO> を含める必要があります。
Step 5: 重複チェック
gh issue list -R <TARGET_REPO> --label "ouroboros" --state all --search "<seed_id or pm_id>" --limit 5 --json number,title,state
Epic の本文に Seed ID が記録されるため(Step 7)、この処理で過去の公開を検出できます。一致するものがある場合は一覧を表示し、作成を続行するかキャンセルするかを尋ねます。キャンセルの場合は終了します。
Step 6: issue の計画
受け入れ条件を、実装単位(機能領域、レイヤー、依存関係の順序など)ごとに論理的にまとめます。各単位が 1 つの Task になります。計画(Epic の目標の概要、続いて各 Task のタイトルと簡単な範囲)を提示し、issue を作成するか、計画を変更するかを尋ねます。変更する場合は、何を変更するか尋ねて調整し、再度提示します。
ステップ 7:Issue を作成する
gh issue create は Issue の URL を出力します。末尾の数字から番号を取得します(grep -o '[0-9]*$')。本文は引用符で囲んだヒアドキュメント(--body "$(cat <<'BODY' ... BODY)")で渡します。
- ラベルを作成します。「already exists」は無視してください。
gh label create "ouroboros" -R <TARGET_REPO> --description "Created by Ouroboros publish" --color "6f42c1" 2>/dev/null || true gh label create "epic" -R <TARGET_REPO> --description "Epic / parent issue" --color "0075ca" 2>/dev/null || true gh label create "task" -R <TARGET_REPO> --description "Implementation task" --color "008672" 2>/dev/null || true - エピック:タイトルは
[Epic] <goal summary>、ラベルはouroboros,epicです。本文には、ステップ 3 の各セクション(Goal、Constraints、Acceptance Criteria を- [ ]項目として、Ontology、Evaluation Principles、Exit Conditions、および PM 専用セクション)を順番に記載し、続けて次のフッターを記載します。--- **Seed ID**: `<seed_id or pm_id>` | **Ambiguity Score**: <score> | **Seed**: `<seed_file_path>` *Generated by [Ouroboros](https://github.com/Q00/ouroboros) via `ooo publish`* - 各タスク:タイトルは
[Task] <task title>、ラベルはouroboros,taskです。本文にはParent: #<epic>に続けて、Scope、Acceptance Criteria(この単位の項目を- [ ]で記載)、Test Checklist、Pass Criteria(測定可能な完了条件)を記載し、続けて次のフッターを記載します。--- *Part of [Epic] #<epic> | Generated by [Ouroboros](https://github.com/Q00/ouroboros) via `ooo publish`* - エピックにコメント(
gh issue comment <epic> -R <TARGET_REPO>)し、- [ ] #<task>: <title>の行で構成する「Implementation Tasks」チェックリストを記載します。Issue がクローズされるとタスクにチェックを付けて進捗を追跡することも明記してください。
ステップ 8:概要
Published to <TARGET_REPO>: と表示し、エピックとそのタスクをツリー(#<n> [Epic|Task] <title>)で示して、リンク https://github.com/<TARGET_REPO>/issues/<epic> を記載します。次のステップとして、タスクの割り当て、GitHub Projects ボードでの追跡、個々のタスクの AI 支援による実装のための ooo run の実行を提案してください。
RFC #1392 状態のパンくずフッター
最終回答の末尾は、◆ <current state> → next: <recommended action> の形式の行を正確に 1 行だけ記載します。利用できる場合は ouroboros_session_status でライブセッションの状態を取得し、利用できない場合はこのスキルの実際の結果から状態を判断します。「Step N of M」のような直線的なフッターは使用しないでください。次のステップが実際の選択肢である場合は、2~3 個の選択肢を列挙してください。