Skip to content

設計原則

1. ファイルがAPI

各フェーズはワークスペースディレクトリ内のMarkdownファイルに出力を書き込みます。後続のフェーズはそれらのファイルのみを読み取り、会話履歴は参照しません。

これにより:

  • 各サブエージェントがクリーンなコンテキストウィンドウで開始
  • オーケストレーターが大きなコードブロックを蓄積しない
  • すべての進捗がディスク上にあるため、中断と再開が可能
.specs/20260320-fix-auth/
├── request.md              ← ユーザー入力
├── analysis.md             ← Phase 1 出力
├── investigation.md        ← Phase 2 出力
├── design.md               ← Phase 3 出力
├── review-design.md        ← Phase 3b 出力
├── tasks.md                ← Phase 4 出力
├── review-tasks.md         ← Phase 4b 出力
├── impl-1.md               ← Phase 5 出力(タスク1)
├── review-1.md             ← Phase 6 出力(タスク1)
├── comprehensive-review.md ← Phase 7 出力
├── summary.md              ← final-summary フェーズ出力
└── state.json              ← パイプライン状態

final-verificationpr-creation フェーズではアーティファクトファイルは作成されません — コードベースとgitに直接作用します。

2. 関心の分離

オーケストレーターは {workspace}{N}{spec-name} などのみを渡します。エージェントは自身の定義から読むべきファイルと出力フォーマットを知っています。

この分離により:

  • エージェントの命令は自己完結 — SKILL.mdでの重複なし
  • オーケストレーターは軽量を維持 — ソースコードを読まない
  • エージェントはオーケストレーターに触れずに独立してアップグレード可能

3. ディスク上の状態、メモリではない

state.json がパイプライン進捗の唯一の情報源です。以下の問題を解決します:

  • コンテキスト圧縮 — Claudeが会話履歴を圧縮しても、状態は残る
  • セッション再起動 — ワークスペースパスでスキルを再呼び出しして再開
  • フック連携 — フックがstate.jsonを読んでアクティブなフェーズを把握

4. 二層コンプライアンス

重要な不変条件は、エージェント命令(確率的)とフックスクリプト(決定論的)の両方で強制されます:

不変条件プロンプト(確率的)フック(決定論的)
Phase 1-2 読み取り専用agent.mdの「ファイルを書くな」PreToolUseがEdit/Writeをブロック
並列git commitなしagent.mdの「コミットするな」PreToolUseがgit commitをブロック
完了前のチェックポイントSKILL.mdの「checkpointを呼べ」MCPハンドラーがphase_completeをブロック
進行前のアーティファクトSKILL.mdの「アーティファクトを書け」MCPハンドラーがphase_completeをブロック
パイプライン完了SKILL.mdの「summary.mdを書け」Stopフックが途中終了をブロック

プロンプト命令よりも決定論的な強制を優先する。 パイプラインの動作を追加する際は、まずフックスクリプトで強制できるか検討してください。

5. フェイルオープンフック

すべてのフックはフェイルオープン:jqが欠落しているかstate.jsonが読めない場合、アクションは許可されます。これにより、フックがパイプライン外の作業を妨げることを防ぎます。

6. ユーザー制御によるエージェントモデル選択

エージェントはデフォルトでユーザーが設定したモデルを継承します — エージェントフロントマターに model: キーは設定されていません。これにより、パイプラインがモデルを上書きするのではなく、ユーザーが Claude Code の設定を通じてモデルの選択を制御できます。必要に応じてフロントマターに model: <name> を追加することで、個別のエージェントを特定のモデルに固定できます。

Released under the MIT License.