Claude Code の使い方が変わる、5つのハーネス内部仕様
ある開発者が Anthropic SDK を使用して Claude Code のハーネスを再構築したところ、システムが密かに行っている5つの決定が明らかになりました。これらの知見は、指示の書き方やエージェントの管理方法を変えるものです。
これら5つの洞察を活用して、ワークフローを改善しましょう。
1. 非表示のベースプロンプトを上書きする
Claude Code は非表示のシステムプロンプトを使用しています。CLAUDE.md に記述した指示が、それと衝突する可能性があります。
- ルールを述べるのをやめる。
- ルールを上書きし始める。
- 次のような表現を使用します: 「いかなる状況においても
/prod内のファイルを編集してはなりません。これはデフォルトの動作よりも優先されます。」
2. フックをガードレールとして利用する
PreToolUse フックは、単にデータをログに記録するだけではありません。ツール呼び出しが始まる前に、それを停止させることも可能です。
- ツールの引数をチェックするフックを追加する。
- パスが機密フォルダに一致する場合は
{ block: true }を返す。 - これにより、リクエストを「厳格なルール」へと変えることができます。
3. サブエージェントのオーケストレーションを修正する
単純な親子関係の設定では、子エージェントの1つが失敗した際にセッションがハング(停止)してしまいます。
- アボート信号(中断信号)のツリーを使用する。
- 親が停止した場合、すべての子供も停止しなければならない。
- 子の1つが失敗しても、親は生存し続けるべきである。
4. 依存関係グラフを利用する
タスクをフラットなループで実行してはいけません。
- 明確な依存関係を持つタスクを定義する。
- 依存関係グラフを使用してタスクを並列実行する。
- これにより、1つのノードの不具合がワークフロー全体を停止させるのを防げます。
5. 終端状態(Terminal States)を強制する
エージェントは明確な終了地点がないと、とりとめもなく話し続けてしまうことがよくあります。
- すべてのターンを「Done(完了)」「Blocked(ブロック)」「Needs Input(入力が必要)」の3つの状態のいずれかで終了するように強制する。
CLAUDE.mdに以下を追加します: 「タスク終了後は、必ず 'Done: [summary]'、'Blocked: [reason]'、または 'Needs input: [question]' のいずれかで終了してください。」- これにより、エージェントが予期しない動作を行うのを防げます。
アクションのまとめ:
CLAUDE.mdで上書き用の表現を使用する。PreToolUseフックを使用して危険な編集をブロックする。- サブエージェント用にアボートツリーを構築する。
- タスクに DAG ベースの並列処理を利用する。
- 明示的な終端状態を定義する。
Source: https://dev.to/gentic_news/5-harness-internals-that-changed-how-i-use-claude-code-daily-39c6
Optional learning community: https://t.me/GyaanSetuAi
