Claude Codeのプロンプトやツール定義を探ってみた
きっかけ
Claude Codeを初めて触ったとき、ClaudeやClineを使うのとは大きく異なる印象を受けました。
これはコンテキストの使い方が上手いのか?と思いましたが、実際どのようなコンテキストが渡されているかは分かりません。
しかし実際にどのような振る舞いをしているかを知っていたほうが、よりうまく使いこなせるのではないかと考えました。
そこで活用のヒントが得られないかと思い、プロンプトやコンテキストの扱いを探ってみました。
Amazon Bedrockではモデルの呼び出しログを記録・参照することができるので、こちらの機能を利用しています。
起動時のモデル呼び出し
以下は起動時にモデルが呼び出されたログについて、CloudWatch Logs上で表示・日本語訳したものです。
どうやらGitのコミットログのファイル名や変更頻度に基づき、重要そうなファイルを探しているように見えます。
新しいプロダクト開発に関わることになったときにコミットログを眺める人がいますが、まさにその振る舞いと同じですね。
ここであまり重要でないファイルが検知されてしまうと、精度の低下に繋がる可能性があるかもしれません。
コアロジックを表すファイルが明確であれば、CLAUDE.mdに記載しておくといった方法も考えられます。
/init
実行時のモデル呼び出し
以下は/init
でCLAUDE.mdを作成する際に呼び出されたログについて、CloudWatch Logs上で表示・日本語訳したものです。
一般的な情報や具体的な情報を避け、できるだけリポジトリ固有で抽象度の高い情報を抽出するようになっています。
またREADME.mdの他、CursorのルールやGitHub Copilotのカスタム命令が存在すれば参考にするようです。
逆にこれら以外のファイルに記載の情報は欠落する可能性があるため、明示したほうがよさそうです。
システムプロンプト
以下はCloudWatch Logs上で表示・日本語訳したものですが、とても長いので全部は掲載しません。
ここはClaude Codeの基本動作を定義するためのプロンプトのようです。
おそらく試行錯誤により得られたノウハウの結集で、かなり細かな禁止事項や要求が具体例とともに定められています。
架空のURLやコメントまみれのソースコードは過去に遭遇した人も少なくないと思いますが、ここで抑制しているようです。
Claude 4 プロンプトエンジニアリングのベストプラクティスには「Claudeに何をしないかではなく、何をすべきかを伝える」とありましたが、実際には否定形もかなり使われているのは興味深いですね。
また<env>
タグには作業ディレクトリ、プラットフォームやOS、今日の日付なども渡されていました。
ツール
ツールも複数定義されており、以下はそのごく一部をCloudWatch Logs上で表示・日本語訳したものです。
これはTodoRead, TodoWrite関係のプロンプトですが、特にTodoWriteは詳細なプロンプトと具体例が並んでいます。
Claude Codeでとても評判のよいタスク分解ですが、この緻密なプロンプトに支えられているようです。
所感
Claude Codeで使われているプロンプトの一部を探り、理解が深まるとともに活用に向けたヒントが得られた気がします。
所感としては特殊なテクニックと感じる部分はあまりなく、一般的なプロンプトエンジニアリングの範疇でした。
また要求事項・禁止事項・具体例などが大量に記載されていましたが、これらも試行錯誤を重ねた上での産物だと感じました。
汎用的な部分はClaude Codeとして整備されていきますが、組織やプロダクト固有の内容は自分で整備するしかありません。
CLAUDE.mdやカスタムスラッシュコマンドを作る際も「要求や禁止事項を具体例と共に明示する」を愚直に積み重ねていくのが大事だろうと感じました。
/compact
の処理を実行したときの処理も気になるので、こちらも機会があれば探ってみようと思います。