Claude CodeのSIMPLE_SYSTEM_PROMPTで短縮版と完全版を切り替える
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPTの値ごとの動作、未設定時にモデルで既定が分かれる仕組み、CLAUDE_CODE_SIMPLEとの違い、設定場所の選び方をまとめます。
SIMPLE_SYSTEM_PROMPTが切り替えるもの
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT は、Claude Codeが送るシステムプロンプトを完全版と短縮版のどちらにするかを決める環境変数です。短縮版では、ツールの説明文も省略された形になります。
切り替わるのはプロンプトの長さだけです。どちらの版でも、ツール一式・hooks・MCPサーバー・CLAUDE.mdの自動読み込みは残ります。Claude Codeの機能を削る変数ではありません。
名前のよく似た CLAUDE_CODE_SIMPLE は別物で、こちらは機能そのものを削ります。違いは後半の表で並べます。
値ごとの動作
指定できる値は大きく3通りです。
| 設定 | 使われる版 |
|---|---|
| 未設定 | 使われる版モデルによって決まる(次の節) |
1 | 使われる版どのモデルでも短縮版 |
0 / false / no / off | 使われる版どのモデルでも完全版 |
0 系の値には、もう一つ効き目があります。実験やサーバー側の設定が短縮版を選ぼうとしている場合でも、完全版を強制できます。未設定のままだと、手元で何も変えていないのにプロンプトの版が変わる余地が残ります。版を固定したいなら、未設定ではなく明示的に値を入れる方が確実です。
未設定時の既定はモデルで分かれる
未設定のとき、次のモデルは完全版が既定です。
- Haiku 4.5
- Sonnet 5
- Opus 4.7、およびそれ以前の同ファミリーのモデル
これらより新しいモデルは、短縮版が既定になります。
「新しいモデル」の側に具体的なモデル名はなく、完全版が既定の上限はHaiku 4.5・Sonnet 5・Opus 4.7までです。モデルをこれらより新しいものに切り替えると、プロンプトの版も一緒に変わります。
未設定のままで版が動く経路は、このモデル世代のほかに、実験やサーバー側の設定による選択があります。どちらも手元の設定を触らずに起きるので、版を比べる実験では値を明示するところから始めます。
設定場所は3つ
シェルで指定する
1回だけ試すなら、コマンドの前に付けます。
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1 claudeシェルの環境変数は起動時に読まれるので、変更後は claude を起動し直します。
settings.jsonのenvに書く
常に同じ版で動かすなら、設定ファイルの env キーに書きます。
{
"env": {
"CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT": "0"
}
}書き先で効く範囲が変わります。
| ファイル | 効く範囲 |
|---|---|
~/.claude/settings.json | 効く範囲自分の全プロジェクト |
.claude/settings.json | 効く範囲プロジェクトの全員(リポジトリに含まれる) |
.claude/settings.local.json | 効く範囲自分のこのプロジェクトだけ |
| 管理設定 | 効く範囲組織の全員 |
シェルと設定ファイルが食い違うとき
同じ変数がシェルと設定ファイルの env の両方にあると、設定ファイルの値がシェルの値を上書きします。シェルで 1 を渡したのに効かないときは、env に別の値が入っていないか見てください。
例外もあります。Claude Desktopアプリやセルフホスト環境のランナーがセッションを起動した場合は、起動側が組んだ環境が優先されます。その環境にすでにある変数は、設定ファイルの env の値が無視されます。
設定ファイル同士で食い違うときは、優先度の高い順に次のとおりです。
- 管理設定(組織が配布)
--settingsで渡したJSON(そのセッションのみ).claude/settings.local.json.claude/settings.json~/.claude/settings.json
管理設定に "1"、自分のユーザー設定に "0" が入っていれば、使われるのは "1" です。組織全体で版を固定したい場合は、管理設定に入れるとユーザー設定やプロジェクト設定では上書きできません。逆に、個人の設定で版を変えたつもりでも、管理設定に値があれば効かないことになります。
プロジェクト設定に書けるか
チームで版を揃えたいときは、プロジェクトの .claude/settings.json に "0" を入れる形が一つの案です。モデルを入れ替えてもプロンプトの版が変わらないので、挙動の比較がしやすくなります。
プロジェクトとローカルの設定には、書いても捨てられる変数があります。リポジトリを取得しただけで効いてしまうと困るもので、CLAUDE_CONFIG_DIR などの保存先を決める変数、OpenTelemetryの送信先を決める変数、CLAUDE_CODE_PROCESS_WRAPPER など起動方法を変える変数が対象です。CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT はこの一覧に入っていないので、プロジェクト設定に書けます。
書いた値が効くタイミングも違います。ユーザー設定は起動時、プロジェクトとローカルの設定はワークスペースを信頼した後に適用されます。-p の非対話モードは信頼ダイアログを出さないため、起動時に適用されます。
設定を変えたあとの反映
シェルの環境変数は起動時に読まれるため、変更は次に claude を起動したときから効きます。設定ファイルの env は事情が違います。実行中のセッションでも、ファイルを保存すると追加・変更された値が環境に反映されます。
削除は反映されません。env から行を消しても、実行中のセッションでは変数が外れず、消えるのは次の起動からです。「0 を消して未設定に戻したのに版が変わらない」ときは、いったん claude を起動し直します。
1回のセッションだけ別の値を試したいときは、--settings にJSONを渡す方法があります。
claude --settings '{"env":{"CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT":"1"}}'--settings の値は、プロジェクトとユーザーの設定ファイルより優先されます。設定ファイルを書き換えずに済み、.claude/settings.json に入れた "0" を、手元の1回だけ上書きして試せます。
CLAUDE_CODE_SIMPLEとの違い
どちらも「簡素」を意味する名前ですが、削るものがまるで違います。
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT | CLAUDE_CODE_SIMPLE | |
|---|---|---|
| 変わるもの | CLAUDE_CODE_SIMPLE_SYSTEM_PROMPTプロンプトとツール説明の長さ | CLAUDE_CODE_SIMPLE使える機能そのもの |
| ツール | CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT全ツールが残る | CLAUDE_CODE_SIMPLEBash・ファイル読み取り・ファイル編集のみ |
| hooks・MCP・CLAUDE.md | CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT残る | CLAUDE_CODE_SIMPLE自動読み込みを無効化 |
| 認証 | CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT変わらない | CLAUDE_CODE_SIMPLEOAuthやキーチェーンを読まず、APIキーが必要 |
CLAUDE_CODE_SIMPLE は --bare と同等で、CIや自動実行向けのモードです。ログイン済みのサブスクリプション認証をそのまま使えなくなる点が、日常利用で最もつまずきやすい違いです。
bareモードでは、ほかにも次の制限がかかります。
- MCPサーバーはコマンドラインで渡したものだけが接続し、対話セッションでもIDEへの自動接続を行いません
- システムリマインダー(読み込み済みファイルがディスク上で変わったときの通知や、使えるスキルの一覧など)が付きません
- バックグラウンドタスクは動かず、タイムアウトに達したコマンドは停止します
- 追加したい文脈は
--append-system-prompt、--settings、--mcp-config、--agents、--plugin-dirで渡します
bareモードの狙いは、どのマシンでも同じ結果を得ることです。チームメイトの ~/.claude にあるhooksや、プロジェクトの .mcp.json にあるMCPサーバーを読まないので、環境差が結果に混ざりません。--add-dir で指定したディレクトリは一部だけ例外で、.claude/skills/ のスキルは読み込まれ、.claude/commands/ と .claude/agents/ は読み込まれません。
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT を 1 にしても、これらの制限は付きません。「プロンプトを軽くしたい」だけなら、bareモードまで進む必要はありません。
併用すると何が起きるか
output styleのkeep-coding-instructions
カスタムのoutput styleは、既定ではClaude Code組み込みのソフトウェアエンジニアリング指示(変更の範囲の決め方、コメントの書き方、作業の検証など)を外します。フロントマターの keep-coding-instructions: true はこの節を残す指定ですが、その節は完全版にしか含まれません。短縮版のセッションではフィールドに効き目がないので、この指定を当てにするなら CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT を 0 にして、どのモデルでも完全版を選びます。
---
name: Diagrams first
description: Lead every explanation with a diagram
keep-coding-instructions: true
---output styleの指示は、メインの会話とフォーク(親の会話を引き継ぐもの)に効きます。独自のシステムプロンプトで動く通常のサブエージェントには効きません。スタイルの作り方はAgent SDKのシステムプロンプトをカスタマイズする4つのアプローチとoutput styleを自作する実践パターン集にあります。
システムプロンプトのフラグ
--system-prompt と --system-prompt-file はデフォルトのプロンプトを丸ごと置き換え、--append-system-prompt と --append-system-prompt-file は末尾に足します。追記は組み込みのツール指針や安全上の指示を残したまま差分だけを渡せるので、コーディングアシスタントのまま独自ルールを足したい用途に向きます。置き換えはそれらをすべて捨てます。
追記の足し先は、その時点で選ばれているデフォルトのプロンプトです。追記したルールの効き方は、版を固定して確かめられます。
再開した会話
Claude Codeは、会話の最初のリクエストでシステムプロンプトを組み立て、そのセッションに記録します。圧縮されるまでは、--resume や --continue で戻っても記録済みのプロンプトが使われる仕様です。
この記録の仕様は、システムプロンプトのフラグを対象に書かれています。毎回の依頼でプロンプトを作り直したいときは、--system-prompt-snapshot off を付けます。既定の on では記録済みのプロンプトを再利用します。ただしbareモード(--bare か CLAUDE_CODE_SIMPLE=1)では、--system-prompt-snapshot on を渡さない限り記録されません。
環境変数を途中で変えて版を比べるなら、会話を再開せず新しい会話で試すと、記録済みのプロンプトの影響を受けません。
短縮版と完全版の違いを自分の環境で確かめる
短縮版と完全版で挙動が変わるかは、同じ依頼を両方に投げると分かります。非対話モードなら1行ずつ流せます。
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 claude -p "src配下の未使用エクスポートを列挙して"
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1 claude -p "src配下の未使用エクスポートを列挙して"見る点は、ツールの使い方の丁寧さ、手順の抜け、出力の形式です。ツール説明が短くなるぶん、使用上の注意書きに頼る操作(たとえば編集前の確認手順)で差が出る可能性があります。トークンの削減量や品質への影響は、自分の作業で測った結果を基準にしてください。ツールの説明文が短くなることだけが、確かな違いです。
どちらを選ぶか
判断の軸は2つです。
- 挙動を固定したい:
0を明示します。モデル更新や実験の割り当てで版が動くのを防げます - プロンプトを軽くしたい:
1を明示し、重要な作業で出力を比べてから常用します
output styleでコーディング指示を残したい場合や、CIでモデルを切り替えながら比較したい場合は、前者が向きます。
この変数が決めるのはシステムプロンプトの版だけです。Chrome連携の節だけを外したい場合はCFC_PROMPTでChromeのシステムプロンプトだけ外す方法のように、別の変数で一部分だけ取り除けます。