Claude Code の Bash は既定 2 分で打ち切られる:BASH_DEFAULT_TIMEOUT_MS で延ばす
既定のタイムアウトは 120000 ミリ秒(2 分)、モデルが指定できる上限は 600000(10 分)、出力は 30,000 文字までです。BASH_DEFAULT_TIMEOUT_MS などで延ばす方法と設定場所を解説します。
テストスイートやビルドを Claude に実行させると、2 分で「タイムアウト」になって結果を見てもらえない。あるいは長いログの後半が切れて、Claude が肝心のエラーを見落とす。どちらも Claude Code の Bash ツールに既定の上限があるために起きます。
結論として、タイムアウトは BASH_DEFAULT_TIMEOUT_MS と BASH_MAX_TIMEOUT_MS、出力の上限は bashOutputMaxChars(または BASH_MAX_OUTPUT_LENGTH)で調整します。settings.json の env に書けば毎回付ける必要はありません。
KEY POINT
この記事で分かること
- タイムアウトを決める 2 つの環境変数と、その関係
- 出力上限を決める設定キーと環境変数、どちらが優先されるか
- settings.json への書き方と、作業ディレクトリが戻らない問題の対処
タイムアウトの仕組み
Bash ツールには「既定のタイムアウト」と「モデルが指定できる上限」の 2 つがあります。
| 変数 | 既定 | 意味 |
|---|---|---|
BASH_DEFAULT_TIMEOUT_MS | 120000(2 分) | モデルがタイムアウトを指定しなかったときの値 |
BASH_MAX_TIMEOUT_MS | 600000(10 分) | モデルが指定できるタイムアウトの上限 |
実際の上限は BASH_MAX_TIMEOUT_MS と BASH_DEFAULT_TIMEOUT_MS の 大きい方 です。既定値を 10 分より大きくすると、上限もそれに合わせて広がります。
これらの数値は 2e3 のような指数表記や 64_000 のような桁区切りも受け付けます。
用語解説
ミリ秒指定: これらの変数はすべてミリ秒です。5 分なら 300000、30 分なら 1800000 と書きます。単位を間違えると「一瞬でタイムアウトする」状態になります。
出力の上限
コマンドが成功したとき、Claude が読み返せる出力には文字数の上限があります。上限を超えると、Claude Code は出力をファイルに保存し、Claude には短いプレビューとファイルのパスだけを渡します。Claude はそのファイルを読めば全文を見られますが、自動で全部読むわけではありません。
| 設定 | 既定 | 備考 |
|---|---|---|
bashOutputMaxChars(settings.json) | 未設定のとき 30,000 文字 | 4000〜128000 の範囲にクランプされる。v2.1.261 以降 |
BASH_MAX_OUTPUT_LENGTH(環境変数) | 30000 | 最大 150000。bashOutputMaxChars を設定するとこの変数は無視される |
冗長なビルドログや、テストスイート全体のログをファイルを開かずに読ませたい場合は、bashOutputMaxChars を上げます。
{
"bashOutputMaxChars": 100000
}
settings.json にまとめて書く
環境変数は settings.json の env キーに書くと、起動方法に関係なくすべてのセッションとサブプロセスに適用されます。シェルで同名の変数を設定していても settings 側が優先されます。
{
"env": {
"BASH_DEFAULT_TIMEOUT_MS": "300000",
"BASH_MAX_TIMEOUT_MS": "1800000"
},
"bashOutputMaxChars": 100000
}
チーム共通で必要なら .claude/settings.json、自分だけなら ~/.claude/settings.json か .claude/settings.local.json に書きます。ファイルの使い分けは settings.local.json と settings.json の違い を参照してください。
タイムアウトを伸ばす前に、バックグラウンド実行を検討する
開発サーバーや監視系のコマンドは、タイムアウトを伸ばしても終わらないので意味がありません。そうしたコマンドは Claude にバックグラウンドで実行させ、必要なときにログを読ませる方が確実です。タイムアウトの延長は「必ず終わるが時間がかかる」テストやビルドに限ってください。
作業ディレクトリが戻らないとき
cd を含むコマンドを実行した後、以降のコマンドが別のディレクトリで実行されて失敗することがあります。CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR を設定すると、メインセッションの Bash や PowerShell の各コマンドの後に元の作業ディレクトリへ戻ります。
{
"env": {
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "1"
}
}
長いコマンドの出力はコンテキストも消費します。出力上限を上げるほど 1 回のコマンドで消費するトークンも増えるので、コンテキスト管理 の観点では「必要なときだけ上げる」のが無難です。実行を許可するコマンドの範囲は permissions の設計 で決めます。
まとめ
- 既定のタイムアウトは 2 分(
BASH_DEFAULT_TIMEOUT_MS)、モデルが指定できる上限は 10 分(BASH_MAX_TIMEOUT_MS)。実効上限は両者の大きい方 - 出力は既定 30,000 文字まで。超えた分はファイルに保存される。
bashOutputMaxChars(4,000〜128,000)で調整し、設定するとBASH_MAX_OUTPUT_LENGTHは無視される - settings.json の
envに書けばシェルより優先され、毎回付けなくてよい - 終わらないコマンドはタイムアウト延長ではなくバックグラウンド実行にする
cdでディレクトリがずれるならCLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR
よくある質問
- Bash ツールの既定のタイムアウトは何分ですか?
- 既定は 120000 ミリ秒(2 分)です。BASH_DEFAULT_TIMEOUT_MS で変更できます。
- モデルが自分で長いタイムアウトを指定することはできますか?
- できますが上限があります。上限は BASH_MAX_TIMEOUT_MS(既定 10 分)と BASH_DEFAULT_TIMEOUT_MS の大きい方です。
- コマンドの出力が長いと途中で切れるのはなぜですか?
- Claude が受け取る出力には文字数の上限があるためです。既定は 30,000 文字で、超えた分はファイルに保存され、Claude にはプレビューとファイルパスが渡されます。
読者からの質問と回答
Q. バックグラウンドに回ったコマンドが何時間も終わりません。対話セッションでバックグラウンドコマンドに制限時間を設ける設定はありますか。
公式ドキュメントの範囲では、対話セッションでバックグラウンドコマンドに制限時間を設ける設定はありません。これは不具合ではなく、文書化された仕様です。
ツールリファレンスは「In a session that runs unattended, such as a run with the -p flag, an Agent SDK application, a CI job, or a cloud session, background Bash and PowerShell commands have a time limit. A local session you work in from a terminal, the desktop app, or the VS Code extension has no time limit on background commands」と書いています。
| セッション | バックグラウンドコマンドの制限時間 |
|---|---|
-p 実行、Agent SDK、CI、クラウドセッション | あり(既定 30 分、最大 2 時間) |
| ターミナル、デスクトップアプリ、VS Code 拡張 | なし |
この区別は Claude Code v2.1.288 で入りました。v2.1.285 から v2.1.287 までは、すべてのセッションに制限時間が適用されていました。古い挙動を覚えている場合はこの変更が原因です。
無人セッション側の制限時間は環境変数で延ばせますが、どちらも短縮はできません。
# 30 分の既定を 1 時間に(無人セッションのみ)
export BASH_DEFAULT_TIMEOUT_MS=3600000
# 2 時間の上限を 4 時間に
export BASH_MAX_TIMEOUT_MS=14400000
対話セッションで無限に走るのを防ぐ手段として公式に文書化されているのは、バックグラウンド化そのものを止める次の変数です。
export CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1
この変数は run_in_background パラメータ、タイムアウト時の自動バックグラウンド化、Ctrl+B のショートカットをまとめて無効にします。フォアグラウンドのコマンドはタイムアウトで裏に回らず、その場で停止します。副作用は大きいので、長時間ジョブを扱う作業では使いにくい点に注意してください。
backgroundDeadlineDisabled は公式ドキュメントに無い
この話題では backgroundDeadlineDisabled という設定名が挙がることがありますが、2026 年 10 月 19 日時点の設定リファレンス・環境変数一覧・ツールリファレンスのいずれにもこの key はありません。公式ドキュメントでは確認できませんでした。
フォアグラウンドのタイムアウトは BASH_DEFAULT_TIMEOUT_MS(既定 2 分)と BASH_MAX_TIMEOUT_MS(既定 10 分)で制御します。詳しくは Bash コマンドのタイムアウトを環境変数で延ばす方法 を参照してください。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。