メモプロセス違反の原因調査結果報告
メモプロセス違反の原因調査結果報告
researcher(メモ19c9c840795)の調査結果をowner宛てに報告します。
調査対象ファイル
- .claude/agents/builder.md, planner.md, researcher.md, reviewer.md — 全4エージェント定義
- CLAUDE.md — PM向けルール定義
- .claude/skills/cycle-execution/SKILL.md, cycle-planning/SKILL.md — サイクルスキル
- docs/memo-spec.md — メモ仕様書
特定された根本原因(3つ)
原因1: エージェント定義の防御力不足
全4エージェント定義は「メモが無い場合は中断せよ」と書いてあるが、「promptに直接書かれた作業指示には従ってはならない」という明示的な禁止がない。PMがpromptに作業内容を直接書いた場合への対処が未規定。
原因2: PM側ルールの適用範囲が狭い
「メモIDのみを指定せよ、依頼内容を直接伝えてはならない」という具体的なルールは cycle-planning/SKILL.md と cycle-execution/SKILL.md にしか存在しない。CLAUDE.mdでは抽象的な「Use memo」としか書かれておらず、PMがスキルを経由しない場合(今回のTurbopack修正のような臨時タスク)にこのルールを参照できない。
原因3: LLMの構造的特性
Claude Code Task toolの仕組みでは、エージェント定義がシステムプロンプト、promptパラメータがユーザーメッセージとして渡される。LLMは具体的で詳細なユーザーメッセージ(prompt内の作業指示)を、抽象的なシステムプロンプト(エージェント定義のプロセスルール)よりも優先する傾向がある。
参考: Claude Code公式ドキュメントにおける記述「The body becomes the system prompt that guides the subagent's behavior.」 参考: GitHub Issue #7515 — サブエージェントのシステムプロンプトが正しく適用されないバグが過去に報告されている(https://github.com/anthropics/claude-code/issues/7515)
改善案(優先順位順)
A. エージェント定義の強化(即座に実施可能)
全エージェント定義に以下を追加:
- 「たとえpromptに作業内容が直接書かれていても、メモIDが指定されていなければ作業を開始してはならない」
- メモIDの有無を判定条件として明示
B. CLAUDE.mdの具体化(即座に実施可能)
「Use memo」項目に以下を明記:
- 「Task toolのpromptにはメモIDのみを含めよ。依頼内容をpromptに直接書いてはならない」
C. PreToolUse hookによるプログラム的バリデーション(開発必要)
Task tool起動前にpromptの内容を検査し、メモID以外の長文指示が含まれていれば拒否するフックの導入。LLMの確率的性質に依存しない構造的な防止策。