Sandbox

Claude Code の git push がまた壊れた:sandbox と credential helper のサブプロセス問題

TL;DR — Claude Code の sandbox が GNOME keyring への D-Bus アクセスをブロックするため git push が失敗する。gh auth login --insecure-storage でトークンをファイルに保存すれば回避したがこれでいいのか若干不安。

以前も同じ目に遭った。

そしてまた再現。今回はrtk 導入の記事をプッシュしようとしたら同じ目にあったよ。

またかよ、おい…

とりあえず Claude さんと一緒に解決したけど、これでいいのか正直わからん。

というか、公式で sandbox 関連の特集記事とか出してくれないかな。

以下、Claude さんの解説と俺の感想です。

TL;DR

内容
根本原因gh auth git-credentialgit push のサブプロセス)が GNOME keyring に D-Bus 経由でアクセスできない
なぜsandbox が Unix ソケットをブロックしている
excludedCommands: ["gh *"] が効かない理由Claude Code が直接呼ぶコマンドにしか効かず、サブプロセスには届かない
回避策gh auth login --insecure-storage でトークンをファイルに保存

何が起きたか

git push origin main を実行すると以下で失敗する。

fatal: could not read Username for 'https://github.com': No such device or address

まず excludedCommands"gh *" を追加してみたが効果なし。

Claude Code の git push が壊れた日:バイナリ解析よりリリースノートを先に読め

TL;DR — Claude Code で git push が v2.1.91 のアップデートで壊れた原因は excludedCommands のマッチング修正。"git""git *" に変えれば直る。

Claude Code で git push できなくなった。原因調査の過程を Claude とのやりとりで再現する。結論を先に言うと、リリースノートを最初に見ていれば 5 分で終わった話だった。

TL;DR

根本原因: v2.1.91 で excludedCommands のマッチング挙動が修正された

バージョンexcludedCommands: ["git"] の動作
v2.1.90 以前バグで git push origin main にもマッチ → sandbox 完全 bypass
v2.1.91 以降仕様通りに修正。"git" は bare git のみにマッチ → sandbox 適用 → 認証情報へのアクセスがブロックされ失敗

修正した設定:

{
  // Before
  "excludedCommands": ["git"]
}
{
  // After
  "excludedCommands": ["git *"]
}

今回は俺と Claude さんの会話を再現してます。一部省略。