Q. Linux でサンドボックスを有効にすると、Bash ツールの呼び出しが全部 Exit code 126 で何も出力せずに失敗します。原因は何ですか。
ログインシェルが zsh で sandbox.enabled が true の場合に報告されている現象です。回避策は 1 行で済みます。
SHELL=/bin/bash claude
報告されている症状は「every sandboxed Bash tool call fails with Exit code 126 and zero bytes of stdout/stderr, in ~1.3s — including shell builtins (true, type echo)」です。true のようなシェル組み込みコマンドまで失敗するのが特徴で、これが「自分の設定が悪いのではない」と判断する手がかりになります。
報告者によれば、サンドボックスの内側で動くスクリプトが exec 3<&- || exit 126 という bash 固有の記法を使っており、すでに閉じているファイルディスクリプタを閉じる操作を bash は許容する一方 zsh は失敗させるため、実際のコマンドを評価する前に 126 で終了する、という流れです。これは報告者の調査で、公式ドキュメントに記載のある挙動ではありません。
| 項目 | 内容 |
|---|---|
| 条件 | Linux、ログインシェルが zsh、sandbox.enabled: true |
| 症状 | すべての Bash ツール呼び出しが約 1.3 秒で Exit code 126、出力ゼロ |
| 動作するバージョン | 報告者は 2.1.270 / 2.1.286 / 2.1.289 / 2.1.291 で動作を確認 |
| 失敗するバージョン | 報告者は 2.1.302 と 2.1.309 で再現 |
| 回避策 | SHELL=/bin/bash claude で起動する |
設定を疑う前にシェルを確認する
報告者は、対話モードと -p の両方、新規セッション、permissions.deny を空にした状態でも再現すると書いています。つまり権限ルールを削っても直りません。Exit code 126 と出力ゼロの組み合わせが出たら、まず echo $SHELL を確認してください。
なお macOS の Seatbelt でも同種の報告(#77466)があります。サンドボックスを切って作業を続けるなら、何が自動承認されるかが変わる点に注意してください。モードごとの違いは Claude Code の bypassPermissions と危険な操作の扱い にまとめてあります。