◉CLAUDE LABEN
●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●AGENTS — Managed Agents の動的ワークフローがベータに。大量の文書を扱う実行を agent が自分で組めます(10/09)●SONNET 4.5 — Claude API での提供終了は 11/30、残り48日。移行先は Sonnet 5.5●Q&A — ストリーミングを途中で止めても、閉じたタブへの課金が続かない実装が共有されています●WORKTREE — claude --worktree で同じリポジトリを並行して動かすとき、先に知っておきたい点が整理されています●NEW — つまづき集を毎回全文読ませるのをやめ、番号で一節だけ読む●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●AGENTS — Managed Agents の動的ワークフローがベータに。大量の文書を扱う実行を agent が自分で組めます(10/09)●SONNET 4.5 — Claude API での提供終了は 11/30、残り48日。移行先は Sonnet 5.5●Q&A — ストリーミングを途中で止めても、閉じたタブへの課金が続かない実装が共有されています●WORKTREE — claude --worktree で同じリポジトリを並行して動かすとき、先に知っておきたい点が整理されています●NEW — つまづき集を毎回全文読ませるのをやめ、番号で一節だけ読む
記事一覧/Claude Code
⟐ Claude Code/2026-10-13中級

「cd して git add して commit」の承認が毎回出る — 設定の抜けではなく、仕様だと分かるまでにたどった道

cd /path && git add && git commit のような複合コマンドで、許可ルールを入れても承認が繰り返し出る。公式の権限ドキュメントと GitHub の報告を突き合わせると、cd と git の組み合わせは設計上プロンプトが出ると分かりました。原因の切り分け順と、手数を減らす4つの直し方を並べます。

Claude Code262権限permissions5Bash5トラブルシューティング51

コミットを頼むたびに、同じ承認の画面が出ておりました。許可ルールには Bash(git add *) も Bash(git commit *) も入れてあるのに、です。個人開発のアプリを直していた夜、十回ほど「Yes」を押したところで、手が止まりました。

画面をよく見ると、聞かれているのは git add でも git commit でもありませんでした。cd です。

最初にお伝えしたいのは、この挙動は許可ルールの書き間違いではないことが多いという点です。公式の権限ドキュメントを読み直して、ようやく線が引けました。その道筋を書き残します。振り返ると、設定を疑う前に画面の文言を読めていなかったのだと気づきました。

症状の見分け方

次の3つがそろっているなら、同じ原因の可能性が高いと思います。

  • Claude が cd /path/to/repo && git add ... && git commit ... のように、1行に繋げたコマンドを出しています。
  • 承認画面が cd に関する内容、またはコマンド全体を求めてきます。
  • 「Yes, and don't ask again」を選んでも、次の実行でまた同じ画面が出ます。

GitHub にも同じ報告があります(anthropics/claude-code の Issue 28240)。バージョン 2.1.52 で、Windows、cd /some/path && git add file && git commit で cd:* の承認が出続け、セッション内で許可にできない——という内容です。以前は git add と git commit が聞かれていた、と書かれています。

公式ドキュメントが言っていること(2026 年 10 月 13 日に確認)

権限のページには、複合コマンドの扱いがまとまっています。要点は4つでした。

項目書かれていること
区切りの認識&&、||、;、|、|&、&、改行で分割され、各サブコマンドが個別にルールと照合される
「今後は確認しない」複合コマンド全体ではなく、承認が必要だったサブコマンドごとにルールが保存される(1つの複合コマンドから最大5件)
cd 単体作業ディレクトリか追加ディレクトリの内側への cd は読み取り専用扱い。cd packages/api && ls は、各部分が単独で通るなら承認なしで動く
cd と git別のディレクトリへ cd する場合は、各部分が読み取り専用でも承認が出る。理由は「新しいディレクトリの hooks を git が実行しうるため」。cd の行き先が現在の作業ディレクトリ自身なら何もしない扱いで、プロンプトは出ない

つまり、cd /別の場所 && git add ... は、git 側の許可ルールがどれだけ揃っていても、組み合わせそのものが承認の対象になるのです。Issue では不具合として報告された挙動が、いまのドキュメントでは仕様として説明されています。ただ、報告の時点と現在で挙動が同じかどうかまでは、私の手元では確かめておりません。

もう一点、cd にリダイレクトが付く場合(cd app; grep -r pattern . 2>/dev/null のようなもの)も、行き先が決まらないと承認が出ます。/dev/null だけは作業ディレクトリに依存しないため、例外です。

切り分けの順番

承認が出たら、次の順で見ていきます。

  1. どのコマンドを聞かれているかを読みます。git ではなく cd なら、上の「cd と git」に当たる可能性が高いです。
  2. cd の行き先が作業ディレクトリ自身かを確かめます。違うなら、そこが原因です。
  3. 違わないのに出るなら、&& の後ろが空でないか、コマンドが 10,000 文字を超えていないか、未クォートの glob を含んでいないかを見ます。いずれも「解析できないので承認を求める」側に倒れます。
  4. それでも説明がつかないときは、/permissions で、保存されているルールの綴りを疑います。

手数を減らす4つの直し方

1. Claude Code を、作業したいリポジトリの中で起動する

いちばん確実だと感じたのは、これです。起動したディレクトリが作業ディレクトリですので、cd の行き先がそのディレクトリなら承認の対象になりません。複数のリポジトリを跨いで作業しているなら、リポジトリごとにセッションを分けます。

2. 別ディレクトリを使うなら、追加ディレクトリに入れる

作業ディレクトリの外のリポジトリを触る必要があるときは、--add-dir か設定の additionalDirectories で、先に追加しておきます。公式は、追加ディレクトリへの cd も読み取り専用として扱うと書いています。ただし、上の表のとおり、cd と git の組み合わせで別ディレクトリへ移る場合は、追加ディレクトリでもプロンプトが出る可能性があります。ここは、手元で一度確かめてから使うのが安全です。

3. 繋げずに、コマンドを分けてもらう

cd を使わず、リポジトリ内で git add と git commit を別々に実行してもらいます。ただし、git -C <path> add ... のような別形式は、公式の表では「Bash(git push *) の deny が git -C . push には効かない」と説明されており、ルールが同じ形に一致するとは限りません。形式を替えるなら、許可ルールも同じ形で入れる必要があります。

4. CLAUDE.md に書くが、期待しすぎない

「複合コマンドで cd を使わない」と CLAUDE.md に書く方法は、Issue のコメントでも試されています。ある方は、大文字で強調して記憶ファイルにも書いて、減ったのは半分程度だったと報告しています。毎回守られるわけではない、と考えておくほうが、あとで困りません。

PreToolUse の hook でコマンド全体を見て許可を返す案もコメントにありました。ただし、同じコメントには注意書きがあります。cd x && <読み取りだけ> を自動で許可する hook を書くなら、cd x && rm -rf ... のような破壊的な連結を対になる形で拒否しておかないと、速い通り道が危険な通り道になる、というものです。私はこの指摘に、いちばん頷きました。

避けたい直し方

Bash(cd *) を allow に入れれば静かになるのでは、と最初は考えました。ですが、承認が cd と git の組み合わせに対して出ているなら、cd を許可しても組み合わせの扱いは変わらない、と読めます。しかも、広い allow は、あとで自分が何を許したのか分からなくなる原因になります。

承認の回数を減らすために、許可の範囲を広げません。 手数は作業の置き場所で減らし、許可は狭いまま残すようにしています。

まずは、次に承認画面が出たとき、聞かれているコマンドが git なのか cd なのかを一文字ずつ読んでみてください。それだけで、設定を触るべきか、起動する場所を変えるべきかが見えてきます。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⟐ Claude Code2026-05-20
Claude Code が『テスト全通過』と報告したのに CI で落ちる — 終了コードを正しく拾うための検証設計
ローカルでは『テスト全通過』と報告された変更が、push 後の GitHub Actions で真っ赤になる。原因の多くは Claude Code 側ではなく、シェルとテストランナーの終了コード解釈にあります。実例ベースで切り分け方を整理しました。
⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。
⟐ Claude Code2026-10-05
「コミットは私がします」と書いたのに git log に一行増えていた朝、指示を強めるのをやめました
Claude Code に「コミットしないで」と頼んだのにコミットされたとき、まず git reset --soft で戻し、permissions.deny と PreToolUse hook の二層で物理的に止める手順です。deny ルールが素通しする git -c の形と、hook の試し方を書き残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます