# Claude Agent SDKの便利だけど知られていない機能
🌍 システムプロンプトをゼロから書く必要はありません。claude_code プリセットに append で追記する方式を使えば、安全性やツールガイダンスを維持したまま独自の指示を追加できます。
さらに excludeDynamicSections で複数マシン間のプロンプトキャッシュ共有も可能です。
📌 タイトル:システムプロンプトのプリセット+追記方式
🔗 URL:
🧩 概要
Claude Agent SDK のシステムプロンプトには3つの出発点があります。(1) ミニマルデフォルト(`systemPrompt` 未設定時、ツール呼び出しのみカバー)、(2) `claude_code` プリセット(Claude Code CLI と同じフルプロンプト)、(3) カスタム文字列(完全に独自のプロンプト)。特に便利なのが `claude_code` プリセット + `append` の組み合わせで、プリセットが提供するツール使用ガイダンス、安全性ルール、コーディング規約をすべて維持しつつ、末尾に独自の指示を追加できます。CLAUDE.md はシステムプロンプトではなく会話に注入される点も重要です。
🛠 使い方
`system_prompt` に dict 形式でプリセットと append を指定します。
```python
from claude_agent_sdk import query, ClaudeAgentOptions
async for message in query(
prompt="Help me write a Python function to calculate fibonacci numbers",
options=ClaudeAgentOptions(
system_prompt={
"type": "preset",
"preset": "claude_code",
"append": "Always include detailed docstrings and type hints in Python code.",
}
),
):
pass # メッセージを処理
# excludeDynamicSections でキャッシュ共有を有効化
async for message in query(
prompt="Triage the open issues in this repo",
options=ClaudeAgentOptions(
system_prompt={
"type": "preset",
"preset": "claude_code",
"append": "You operate Acme's internal triage workflow.",
"exclude_dynamic_sections": True, # 環境依存部分を除外
},
),
):
pass
```
🏗 本番システムへの組み込み方
・コーディングエージェントを構築する場合は `claude_code` プリセット + `append` を基本形とし、セキュリティルールやツールガイダンスの再実装コストを削減できます
・`exclude_dynamic_sections: True` を指定すると、作業ディレクトリやOS情報などの動的コンテキストがシステムプロンプトからユーザーメッセージに移動し、異なるマシン間でプロンプトキャッシュを共有できます
・CLAUDE.md は `setting_sources` に `"project"` を含めることで自動読み込みされ、システムプロンプトとは独立して機能します
💡 ユースケース
🏢 社内コーディング標準の適用:プリセットの安全性を維持しつつ、社内規約を append で追加する
🌐 多拠点展開のコスト削減:excludeDynamicSections でプロンプトキャッシュを全マシンで共有する
🤖 特化型エージェント:データ分析やサポートボットなど、コーディング以外の用途にはカスタム文字列を使用する
⚠️ 注意点
・カスタム文字列を使う場合、ツールガイダンスや安全性ルールは自分で記述する必要があります
・`excludeDynamicSections` を有効にすると、環境情報がユーザーメッセージに移動するため、指示としての重みがわずかに低下する可能性があります
・SDK デフォルト(`systemPrompt` 未設定)は Claude Code CLI のデフォルトとは異なります。CLI からの移行時は明示的にプリセットを設定してください
✨ プリセット+追記方式は「安全な既定値を壊さずにカスタマイズする」最もリスクの低い方法です。
#
ClaudeAgentSDK# #
AIAgent#