コードレビューの投稿に `confirmed: true` を追加してサブエージェントの誤コメントを防止
コードレビュースキルがインラインコメント投稿時に confirmed: true を明示的に渡すよう変更され、サブエージェントによる不要なプローブコメントが顧客のPRに投稿される問題に対処しました。
背景
サブエージェントが mcp__github_inline_comment__create_inline_comment ツールを継承し、GraphQL権限エラー後に「Test comment to see if I can create inline comments」のようなテスト・プローブコメントを顧客のPRに投稿してしまうという問題が繰り返し発生していました。プロンプトレベルのガードを設けても根本解決には至りませんでした。
CLIレベルの根本原因は、filterToolsForAgent が mcp__* ツールをサブエージェントに無条件で継承させる実装にあります。サブエージェントはツールの動作確認のためにプローブ呼び出しを行う場合があり、それが意図せず顧客PRへの投稿につながっていました。
技術的な変更
今回の変更はコードレビュースキルの指示ファイル1行のみです。plugins/code-review/commands/code-review.md のステップ9において、インラインコメントツールの呼び出し方法を明示化しています。
変更前:
9. Post inline comments for each issue using `mcp__github_inline_comment__create_inline_comment`. For each comment:
変更後:
9. Post inline comments for each issue using `mcp__github_inline_comment__create_inline_comment` with `confirmed: true`. For each comment:
この変更は、コンパニオンPRである claude-code-action#1048 で実装された confirmed パラメータ の仕組みを活用します。confirmed パラメータの動作は以下の通りです:
-
confirmed: true→ 即座に投稿 - 省略した場合 → 本文が明白なプローブパターンにマッチしない限り投稿(マッチした場合はバッファリング)
-
confirmed: false→ 常にバッファリング
コードレビュースキルが confirmed: true を渡すことで、最終レビューコメントは即座に投稿されます。一方、confirmed を省略してプローブを行うサブエージェントは、プローブパターンにマッチすれば無害にバッファされます。マッチしない場合は投稿されるリスクが残りますが、主要なプローブフレーズはキャッチされます。
設計判断
スキル側での明示的なオプトインという方式 が採用されました。MCPツール側でデフォルト動作を変更し、意図的な投稿には confirmed: true を必須とすることで、ツール呼び出し側が意図を明確に表明する設計になっています。
後方互換性も考慮されています。confirmed パラメータを持たない旧バージョンの claude-code-action に対しては、ZodがUnknownフィールドを除去するため、従来と同じ動作でコメントが投稿されます。さらに、claude-code-action(@v1 タグ経由)とコードレビュースキル(プラグインマーケットプレイスからの実行時ロード)はいずれも自動更新されるため、既存の顧客はワークフローYAMLを再インストールすることなくこの修正を受け取れます。
まとめ
1行の変更で「スキルの意図した動作」と「サブエージェントのプローブ」を明確に区別できるようになりました。confirmed: true という明示的なフラグをプロトコルレベルで導入することで、プロンプトガードでは防ぎきれなかった誤投稿問題に対して、より堅牢な多層防御が実現されています。