seed について
面談または確定済みの要件から、検証済みの Seed 仕様を生成する Ouroboros のスキルです。助言的な QA は一度だけ実施し、その後の修正にはユーザーの明示的な承認を求めます。
主な機能
- 01面談状態からの Seed 生成
- 02確定済み要件からの生成
- 03一度限りの助言的 QA
- 04任意の修正プロセス
- 05修正判断の監査記録
活用シーン
- 01完了した面談から Seed 仕様を作成
- 02確定済み要件を Seed に変換
- 03Seed の整合性とテスト可能性の確認
- 04承認された Seed 修正の適用
MCP 対応
MCP モードでは Ouroboros ツールで Seed を生成し、QA を実行します。面談セッションまたは確定済み要件を入力として使います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ q00/ ouroboros --skill seedインストール後、Claude Code で/seedを入力して読み込まれたか確認します。
詳細
/ouroboros:seed
インタビュー、またはこの会話ですでに合意した要件から、検証済みの Seed 仕様を生成します。
必須スキルの機能
ask_user(アクティブなランタイムのユーザーへの質問機能)、inspect_code、call_mcp、orchestrate_subagents(横断的なペルソナのペイロード)、run_shell(監査証跡と設定の書き込み)、refine_answer(自由形式の決定の確認)、maintain_ledger(QA スコア、候補の決定、却下された提案)。
使用方法
ooo seed [session_id]
/ouroboros:seed [session_id]
手順
Python ランタイム(必須)
以下のシェルスニペットを実行する前に、同じシェルでこのリゾルバーを定義し、すべての引数を引用符で囲んで ouroboros_python を呼び出してください。Python 3.12 以降のみを受け付け、利用できない場合は uv にフォールバックします。
ouroboros_python() {
if command -v python3 >/dev/null 2>&1 &&
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 "$@")
return
fi
if command -v python >/dev/null 2>&1 &&
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python "$@")
return
fi
if command -v uv >/dev/null 2>&1; then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command uv run --no-project --quiet --python '>=3.12' python "$@")
return
fi
printf '%s\n' 'Ouroboros skills require Python >= 3.12 or uv on PATH.' >&2
return 127
}
MCP ツールの読み込み(遅延スキーマへの対処)
Ouroboros ツールは遅延読み込みされる場合があり、あるターンで読み込んだスキーマが次のターンまでに読み込まれていないことがあります。各 ouroboros_* 呼び出しの直前に、アクティブなランタイムのツール検出機能を使って読み込んでください。ouroboros_generate_seed には "+ouroboros seed"、ouroboros_qa には "+ouroboros qa"、ouroboros_lateral_think には "+ouroboros lateral" を指定します。スキーマが読み込まれていない状態で呼び出すと、「Invalid tool parameters」で失敗します。ツールをすでに呼び出せる場合、検出処理は何も行わず、空の結果が返されることが想定されます。ツールが本当に存在しない場合に限り、フォールバックを使用してください。
パスを選択する前に ouroboros_generate_seed を読み込んでください。呼び出し可能な場合はパス Aを使用し、本当に存在しない場合(Ouroboros MCP サーバーがない場合)に限りパス Bを使用してください。
委任された応答は成果物ではありません。 以下のツールが status: "delegated_to_subagent"(dispatch_mode: "plugin" および _subagents 配列を含む場合があります)を返した場合は、返されたセッション ID を保持し、プラグインが管理するサブエージェントの結果を待ってください。成果物(Seed YAML、QA 判定、ペルソナのテキスト)は、エンベロープやそのプロンプトではなく、必ずそれらの結果から解析してください。
パス A:MCP モード(推奨)
-
入口を選択します。
session_idが指定されている場合、または会話内に最近のouroboros_interviewセッション ID がある場合は、インタビューセッションを使用します(手順 2)。- インタビューがなく、この会話内ですでに目標、制約、検証可能な成功基準が合意されている場合(横断的な決定、既存コードのスキャン、または結論に達した通常の議論)は、インタビューを介さない方法を使用します。すでに伝えられた内容を繰り返させるために、ユーザーに
ooo interviewを実行させないでください。 - それ以外の場合は、どのインタビューまたは要件を Seed にするか、ユーザーに尋ねてください。
インタビューを介さない方法(
session_context):Tool: ouroboros_generate_seed Arguments: session_context: goal: <the user's own settled wording, verbatim, never your paraphrase> acceptance_criteria: [<verifiable checks: a command, a visible behaviour, a measurable state>] constraints: [<optional>] decisions: [<optional; each becomes a constraint>] project_type: greenfield | brownfield各値は Seed にバイト単位でそのまま反映されるため、AC 内ではシェルコマンドを連結できます(
ruff check && pytestなど)。応答がstatus: "gap_questions_required"の場合は、リストされた質問をそのままユーザーに尋ね、回答をsession_contextに統合してから、もう一度呼び出してください。インタビューはこれで完了です。 -
インタビューセッション:
Tool: ouroboros_generate_seed Arguments: session_id: <interview session ID>このツールは保存済みのインタビュー状態から要件を抽出し、曖昧さをスコア化します(0.2 以下である必要があります)。その後、Seed YAML を返します。
-
Seed YAML が生成されなかった場合は、処理を停止し、生成を再開するか成果物を提供するようユーザーに依頼してください。Seed を捏造してはいけません。
-
以下のアドバイザリー QA チェックを実行し、「Seed 生成後」に進んでください。
パス B:MCP サーバーなし
-
seed-architectプロンプトを読み、その役割を担います。オーバーライドが設定されている場合は$OUROBOROS_AGENTS_DIR/seed-architect.md、それ以外の場合はインストール済みパッケージのコピーをrun_shellで出力します。uvx --isolated --python '>=3.12' --from ouroboros-ai python -c "import importlib.resources as r, sys; print(r.files('ouroboros.agents').joinpath(sys.argv[1]).read_text(encoding='utf-8'))" seed-architect.mdそれ以外の場合は、ソースチェックアウト内の
src/ouroboros/agents/seed-architect.mdを使用します。このスキルで指定されているすべてのエージェントプロンプトについて、ファイル名を置き換えて同じ方法で解決します。 -
下書きを作成する前に要件を確認し、不足しているコンテキストを決して捏造しないでください。
session_idがある場合は、現在のスレッドでのQ&Aと修正のうち、そのセッションに属するものだけを使用します。不完全な場合は、inspect_code/run_shellを使って、そのIDの永続化済みまたはエクスポート済みの成果物を探します(例:~/.ouroboros/data/以下)。永続化されたトランスクリプトは証拠として保持しますが、同じスレッド内の明示的な修正を優先します。session_idがない場合は、現在のスレッドでのQ&Aが一貫した1つのインタビューを構成している場合に限り、それを使用します。- それ以外の場合は、トランスクリプトまたは要件の概要を求めるか、
ooo interviewを提案します。存在しない、または一致しないトランスクリプトをシードに使用してはいけません。
-
Seed YAMLを生成し、Advisory QA Checkを実行してから、「After Seed Generation」に進みます。
Advisory QA Check(1回のみ、非ブロッキング)
生成したSeedに対して、QAを必ず1回だけ実行します。判定は参考情報であり、処理をブロックすることはありません。スコアにかかわらず、Seedは最終版として提示され、QAがPASSになるまで繰り返すことはありません。
生成(パスAのツールまたはパスBの役割)は必ず1回だけ実行し、Seedのオントロジーを確定します。その後の修正は、あなたが直接YAMLを編集して行います。ouroboros_generate_seed は再度呼び出してはいけません(修正のヒントを受け取らず、オントロジーを破棄するためです)。
MCP QAモード:
Tool: ouroboros_qa
Arguments:
artifact: <the seed YAML>
quality_bar: "Seed must be internally consistent, acceptance_criteria must be measurable and testable, constraints must be concrete (no vague terms), ontology_schema must cover all entities referenced in goal/criteria, and there must be no contradictions between fields. acceptance_criteria must also be parsimonious in the ontological sense: a criterion names a state of the finished work a user can see is true, while an implementation step names a means of reaching it, and only the first belongs in the list. Read each criterion beside its siblings — one intelligible only as a move toward a sibling is that sibling's means and belongs merged into the outcome it serves, and flagging that is as important as flagging a missing piece, since it commits the seed to an unverified path. How many criteria a goal has follows from that judgment, so weigh each criterion against its siblings."
artifact_type: "document"
pass_threshold: 0.90
seed_content: <the seed YAML>
qa_session_id: <reuse across passes>
iteration_history: <accumulated across passes>
0.90の基準(デフォルトの0.80より厳格)は判定のラベル付けに使用され、何も制限しません。
フォールバックQAモード(QAツールがない場合):qa-judge プロンプトを読み(パスBの手順1と同じ方法で解決します)、その役割を担い、同じ品質基準としきい値でSeedを評価します。小文字の verdict(pass/revise/fail)、score、dimensions、differences、suggestions、reasoning を含むJSONが返されます。表示時のみ判定を大文字にし、スキーマにないフィールドは追加しません。qa_session_id はありません。合格履歴は監査ブロックに保持します。
必ず次の順序で提示します。
QA advisory: <PASS|REVISE|FAIL>, score X.XX (bar 0.90).- 基準未満の場合は、上位2~3件の提案を短い参考情報の箇条書きとして提示します(指摘事項であり、タスクではありません)。自動的に適用してはいけません。
- Seed YAML全体をフェンス付きの
yamlブロックに入れて提示します。 - REVISEまたはFAILの場合は、
Want a refinement pass on these findings? Otherwise the seed stands as-is.のような、任意で選べる旨の1行を添えます。FAIL(< 0.40)の場合は、ooo interview(要件の再確認)またはooo unstuck(前提への異議申し立て)にも言及します。その後「After Seed Generation」に進みます。ユーザーが希望を明示しない限りSeedは最終版です。
明示的な希望があった場合に限り、次の手順で1回の改良パスを実行し、更新後の判定をQAで1回再確認して、改訂版YAMLを提示します。以降の各パスには、その都度新たな明示的な希望が必要です。パスを連続して実行してはいけません。後続のQA呼び出しの前に、以前の判定と、適用または却下した内容を iteration_history に追記します。
精緻化パス:Wonder → Reflect → Refine → Restate(オプトイン)
独立した情報源から意見を出し合い、議論し、ユーザーに決定してもらってから適用します。候補がデフォルトで採用されることはなく、ユーザーの承認なしに修正を適用することもありません(ユーザー採用ゲート)。
Wonder:提案を集めます。
- QA:判定の
suggestions(YAML の構造的な不足点。QA はインタビューを参照できません)。 - ソクラテス的視点(Path B のステップ 1 と同様に解決する
socratic-interviewerプロンプト):Seed をインタビューの根拠(まず保存済みのセッション状態、次にこの会話)と照らし合わせ、次の項目を 2~4 件確認します。削除または弱められたユーザーの制約、再び入り込んだ却下済みの範囲、単純化されたニュアンス、合意されていない前提。根拠がなければ、no Socratic proposal: dialectic context unavailableと記録します。好みを決して捏造しないでください。QA とソクラテス的視点が対立する場合は Reflect に進み、どちらも自動的に優先されることはありません。 - 水平思考ペルソナ(
ouroboros_lateral_thinkを呼び出せる場合のみ):
各ペルソナの文章から、具体的で個別の修正案を最大 1~2 件抽出し、抽象的な助言は除外します。応答に `` センチネルが含まれ、ランタイムが分離されたサブエージェントをディスパッチできる場合は、これをデコードして、各Tool: ouroboros_lateral_think Arguments: problem_context: | User opted into a refinement pass (QA advisory score X.XX, bar 0.90). Current seed YAML: <YAML> QA suggestions: - <suggestion 1> Original user goal from interview: <recall> current_approach: "The seed as currently drafted (above)." persona: "all" failed_attempts: - <candidates rejected in earlier passes>payload.promptとpayload.contextをorchestrate_subagentsに渡します。それ以外の場合は、表示されているペルソナの各セクションを読み取ります(区切りの---ではなく、セクション見出しで分割します)。ツールがない場合は、no lateral proposals: MCP lateral tool unavailableと記録し、ペルソナを模倣しないでください。
Reflect:議論を整理します。 各候補に、根拠となる情報源と種別(expand、sharpen、remove、resolve_conflict)をタグ付けします。収束(2 つ以上の情報源が合意。強い候補)、不一致(情報源が対立。ユーザーが解決)、単独(弱い候補)に分類します。Balance: 4 expand / 2 sharpen / 1 remove のようなバランス行は、警告ではなく情報として表示します。
Refine:ユーザー承認ゲート。 ask_user の単一選択式の質問のみを行い、まず対立を確認します。対立グループごとに 1 つ(解決案ごとに 1 つの選択肢と「変更しない」)、次に強い修正案(「すべて適用する」「1 件ずつ確認する」「スキップする」)、最後に単独の修正案(「1 件ずつ確認する」「すべてスキップする」)の順に質問します。各質問のセットには「現在の Seed を維持する」を含めます。自由形式の回答は refine_answer で確認します。却下された候補は、以降の水平思考ツール呼び出し時に failed_attempts として渡します。
Restate:承認された項目のみ適用します。 既存の YAML をその場で編集し、すでに正しいフィールドは維持します。再生成はしません。すべてスキップされた場合、Seed は変更されません。
監査記録。 各パスの後、~/.ouroboros/seed-revisions/<revision_key>.md に追記します(必要に応じてディレクトリを作成します)。パス番号、QA スコア、すべての候補とその情報源タグおよび採用・却下の判定、前回の YAML との差分を記録します。revision_key は session_id とします。存在しない場合は、<slugified-goal>-YYYYMMDDTHHMMSSZ を一度だけ生成し、すべてのパスで再利用します。書き込みに失敗した場合は、監査ブロックを応答に含めます。
Seed の生成後
Your seed has been crystallized! と伝えます。
次に ~/.ouroboros/prefs.json を読み取ります。star_asked が true でない場合は、ask_user を使って次の単一選択式の質問をします。「Ouroboros が考えの整理に役立った場合、GitHub でスターを付けると開発の継続を支援できます。」選択肢は次のとおりです。
- ⭐ Star:
gh api -X PUT /user/starred/Q00/ouroborosを実行してから、star_askedを記録します。 - 今はしない:
star_askedを記録します。
セットアップの案内は、この Seed が Path B(Ouroboros MCP サーバーなし)で作成された場合にのみ行います。その場合は、ooo setup で ooo run と評価機能を使えるようになると伝え、フッターでも案内します。Path A の場合は MCP がすでに機能しているため、ooo setup を決して提案せず、フッターでは ooo run を案内します。
既存の welcomeShown、welcomeCompleted、welcomeVersion などのキーを維持する、次のスニペットを使って star_asked を記録します。
ouroboros_python - <<'PY'
import json, os
path = os.path.expanduser('~/.ouroboros/prefs.json')
os.makedirs(os.path.dirname(path), exist_ok=True)
try:
with open(path, encoding='utf-8') as f:
prefs = json.load(f)
if not isinstance(prefs, dict):
prefs = {}
except Exception:
prefs = {}
prefs['star_asked'] = True
with open(path, 'w', encoding='utf-8') as f:
json.dump(prefs, f, indent=2)
f.write('\n')
PY
star_asked がすでに true の場合は、質問を省略します。
RFC #1392 状態ブレッドクラムフッター
最終回答の末尾は、必ず ◆ <current state> → next: <recommended action> の1行で締めくくってください。利用可能な場合は ouroboros_session_status でライブセッションの状態を取得し、そうでない場合はこのスキルの実際の結果から状態を判断してください。直線的な Step N of M フッターは使わないでください。次のステップが実際の選択肢である場合は、2~3個の選択肢を示してください。