【重複購入のご注意】この記事は「ミオ|AI大好きな後輩」がnoteで販売している記事(Claude Code 2.1.280 から symlink 越しの書き込みは綴りだけの allow では通らない:allow と acceptEdits の直し方を6通りの実測で決める)と同じ内容です。すでにnoteで購入・閲覧できる方は重複購入にご注意ください。
Claude Code の書き込みを allow ルールや acceptEdits で自動承認していて、書き込み先の一部を symlink で別の場所に置いている方に向けて書きます。dotfiles リポジトリで ~/.claude の中身を管理している、モノレポや共有フォルダを作業ディレクトリへ symlink している、claude -p で無人実行している、といった使い方が当たります。
Claude Code の changelog は、2.1.280(2026年9月22日)の修正として次の1行を載せています。
「Fixed writes through a symlinked path being judged by their in-tree spelling: the prompt names where the write lands, and acceptEdits, allow rules and auto mode no longer approve one landing outside」
出典:Claude Code の changelog 2.1.280 の節(2026-09-24取得)
symlink 越しの書き込みを、作業ディレクトリの中での綴りだけで判定していたのを直した、という内容です。直ったあとは、確認の画面に実際の書き込み先が出ます。綴りが allow ルールや作業ディレクトリの範囲に入っていても、着地先がその外なら acceptEdits・allow ルール・auto mode では自動承認されません。これまで symlink 越しに黙って書かせていた場所で、確認が出るようになります。
本稿は、公式の permissions ページと changelog を照合し、手元の macOS で claude -p(2.1.281)を6通りの設定で走らせた結果をまとめたものです。auto mode と 2.1.280 より前の版は扱いません。
判定の規則:allow は両方、deny はどちらか
本稿では、Claude に渡した書き込み先のパスを「書き込み先の綴り」、symlink をたどった実体の場所を「着地先」と呼びます。作業ディレクトリの notes が ~/shared/notes を指す symlink なら、綴りは notes/a.md、着地先は ~/shared/notes/a.md です。
公式の permissions ページは、symlink について allow と deny を分けて書いています。
- allow ルール:「apply only when both the symlink path and its target match. A symlink inside an allowed directory that points outside it still prompts you.」。綴りと着地先の両方が allow に一致したときだけ自動承認されます
- deny ルール:「apply when either the symlink path or its target matches」。どちらかが一致すれば拒否されます
- acceptEdits:自動で受け入れるのは「paths in the working directory or additionalDirectories」、つまり作業ディレクトリと追加ディレクトリの中だけです
出典:公式の permissions ページ(2026-09-24取得)

公式の permissions ページの規則を筆者が図にしたものです。allow ルールで許可している場合、symlink 越しの書き込みは、書き込み先の綴りと着地先の両方が allow に一致したときだけ自動承認されます。acceptEdits で許可している場合は、着地先が作業ディレクトリか追加ディレクトリの中にあれば受け入れられます(図には描いていません)。「-p では拒否」は筆者が claude -p(2.1.281)で確かめた範囲です。
自分が当たるかの見分け方
当たるのは、symlink 越しに自動承認で書かせていて、その着地先が次の範囲の外にある場合です。allow ルールで許可しているなら「allow の範囲」、acceptEdits で許可しているなら「作業ディレクトリと追加ディレクトリ」が範囲です。
- ~/.claude/skills などを dotfiles リポジトリへの symlink にしていて、user settings の Edit(~/.claude/**) のような allow で書かせるつもりでいる(.claude は公式が protected paths の例に挙げるパスで、allow とは別の確認がかかる可能性があります。本稿はその下への書き込みを扱いません)
- 作業ディレクトリの中の notes などが別のリポジトリや共有フォルダを指していて、Edit(notes/**) の allow で書かせていた。または acceptEdits で書かせていて、その共有フォルダを追加ディレクトリにしていない
symlink 越しに書かせていない、書き込みのたびに確認へ答えている、allow で許可していて着地先も allow の範囲に入っている、acceptEdits で許可していて着地先が追加ディレクトリの中にある、のどれかなら、この変更で挙動は変わらないはずです(公式の規則から筆者が読んだものです)。
claude -p では「成功」と返ったまま書かれない
対話では確認が出るので気づけます。気づきにくいのは無人の claude -p です。筆者の実測では、symlink 越しの書き込みが拒否されたケースでも、--output-format json の結果の subtype は success のままでした。拒否は permission_denials の欄に記録されていました。結果の成否だけを見ている定期ジョブでは、成功と記録されたのにファイルは変わっていない、ということが起きます。
関連する記事
設定を書いたとおりに効くと思っていたら、別の経路で黙って効いていなかった件を点検手順にまとめた記事です。書いた allow が symlink の先では効かない本稿と同じく、設定と実際の効き方の食い違いを自分の側で探します。

auto mode の分類器が課金される条件を、自分が対象かどうかで判定する手順を扱った記事です。auto mode を使っている方は、あわせて確認してください。

参考になったら、記事下部のライクとXの共有ボタンから応援してもらえるとうれしいです。
続きで読めるのは、6通りの実測の出力全文(1 木の中の対照、2 綴りだけ allow、3 綴りと着地先の両方に allow、4 着地先だけ allow、5 acceptEdits だけ、6 acceptEdits と --add-dir)、直し方を2つの問いで決める判断図、allow ルールの書き方の注意(~/ と // の使い分け、user settings での /path の基準、Write ではなく Edit)、claude -p で規則をどこに置くか、外へ着地する symlink と allow の食い違いを洗い出す点検スクリプトの全文とデモ出力、そして対象外の範囲です。直し方は、書き込みを allow ルールで許可しているか、acceptEdits で許可しているかで分かれます。
