Claude Codeの.cc-writesが増える原因と、空ディレクトリの掃除手順
sandbox有効時に作業ディレクトリを移すたび、空の.claude/.cc-writesが各所に残ります。Issueで分かっている発生条件と、Cargoやworktreeへの影響、安全な掃除の手順をまとめます。
プロジェクトのあちこちに、空の.claude/.cc-writes/というディレクトリが増えていることがあります。macOSでsandboxを有効にしたClaude Codeが、Bashコマンドでcdした先々に作るものです。中身は空で、git statusにも出ません。
この.cc-writesは、sandboxのドキュメントに載っていません。設定で止める方法も、公開されていません。消しても害は報告されておらず、掃除はfind1本で済みます。ただし放置すると、Cargoのビルドを壊した報告があります。
どんなときに空の.cc-writesができるのか
Issue #99728の報告では、macOS(Seatbelt)でsandboxを有効にすると、プロジェクトのサブフォルダ内に空の.claude/.cc-writes/ができます。1つのリポジトリで6個以上に増えた例では、次のようなパスです。
frontend/src/.claude/.cc-writesfrontend/src/<pkg>/pages/settings/<feature>/.claude/.cc-writes- 深い階層の
details/…/.claude/.cc-writes
再現手順は短く、次の3つです。
報告された再現手順
- 1
macOSでsandboxを有効にする
Seatbeltによるsandboxを使います。
- 2
プロジェクトルートでClaude Codeを起動する
起動時点では、サブフォルダに何もありません。
- 3
Bashコマンドでサブフォルダへ`cd`させる
作業ディレクトリが動くと、移動先に
.claude/.cc-writes/ができます。
報告者は、sandboxの書き込み拒否リストにも<dir>/.claude/.cc-writesの項目が並ぶと書いています。つまりこのディレクトリは、作られた直後からsandboxの中では書けない場所です。
作られるのは「次のコマンド」のとき
別のIssue(#76995、v2.1.220・macOS)には、もう少し細かい観察があります。Bashツールの作業ディレクトリは呼び出しをまたいで保たれるため、cdした先が1つずつ増えていく、という説明です。
報告者の最小の再現は、次の2回の呼び出しでした。
# 1回目
mkdir -p /tmp/probe && cd /tmp/probe && ls -a
# → . .. (まだ空)
# 2回目(cdせず、1回目のcwdが保たれている)
ls -a
# → . .. .claude (.claude/.cc-writes/ ができている)出るのは1回目ではなく2回目です。報告者はここから、コマンドの準備段階で「実行前に保たれていたcwd」を基準にディレクトリを作るのだろうと推測しています。報告者自身が「タイミングからの推測で、準備の処理は見えない」と断っているので、仕組みの確定情報ではありません。
訪れたディレクトリごとに1つ残るため、2つのリポジトリを行き来した1回の作業だけで、9個が残った記録があります。
何のためのディレクトリか
用途は、ドキュメントにありません。分かっていることと推測を分けると、次のとおりです。
| 項目 | 内容 | 根拠 |
|---|---|---|
| 作られる条件 | 内容macOSのSeatbelt sandboxが有効で、作業ディレクトリが動く | 根拠#99728 |
| 作られる時点 | 内容cdした次の呼び出し(報告者の推測) | 根拠#76995 |
| 書き込み | 内容sandbox内からは拒否される | 根拠#99728、#79945 |
| 用途 | 内容Edit/Writeのステージング領域という推測。メンテナーも別Issueで「ステージング用ディレクトリ」と呼ぶ | 根拠#79945 |
| 設定での停止・移設 | 内容設定キーなし(#99728で報告者が要望) | 根拠#99728 |
sandboxingのページの「Protected paths」には、作業ディレクトリとその上位の.claude設定ファイル、.claude/skillsや.claude/hooksなどが並びます。.cc-writesの名前は、この節にありません。どの項目で守られているかは、ページからは分かりません。
放置すると何が起きるか
空のディレクトリは、見た目の問題で終わらないことがあります。報告されている影響は4つです。
git statusには出ない
gitは空のディレクトリを追跡しません。そのためgit statusも.gitignoreも反応せず、増えても気づけません。sandboxでgit addが止まる件は、スタブファイルがgitに見える別の症状です。詳しくはClaude Codeのsandboxでgit addが失敗する原因と回避策にあります。
IDEのファイルツリーが散らかる
#99728の報告者が最初に挙げた被害です。ソースツリー全体に空の.claudeフォルダが散らばります。
Cargoのワークスペースが壊れる
落とし穴
globのルート直下にできると、cargoが全コマンドで失敗する
#76995では、members = ["apps/*", "tools/*", "test/integrations/*"]のようなglob指定のCargoワークスペースで被害が出ました。test/integrations/.claudeがメンバーの隣にできると、Cargoはそれをクレートとして読みにいき、failed to load manifest for workspace memberで止まります。cargo buildもcheckもtestも同じです。
メンバーのクレートの中にできた.claudeは無害で、メンバーと同じ階層にできたものだけが致命的です。エラーに出るのは.claudeのパスなので、プロジェクト設定の不具合に見えて、原因の切り分けに時間がかかります。
glob展開でディレクトリを列挙する他のツールが同じ目に遭うかは、Issueに報告がなく、分かりません。
worktreeの削除が止まる
#79945では、sandbox有効のままworktreeに入ると、<worktree>/.claude/.cc-writes/への書き込みが拒否されたまま残ると報告されました。抜けた後に、sandbox内でgit worktree remove --forceを打つとOperation not permittedで止まり、空の.cc-writesだけが残ります。
メンテナーは2.1.233のmacOSで再現し、「worktreeを抜けたときに書き込み保護を解き、空のディレクトリを残さないべきバグ」と認め、修正を追跡していると返信しています。同じ返信は、フックで--forceなしのgit worktree removeを使っていると、未追跡の.claude/.cc-writes/のせいでgitが削除を断ると指摘しています。worktreeの片付け全般はagent viewで.claude/worktreesが溜まる原因と掃除の手順にまとめています。
数えて、消す
まず、いくつあるかを数えます。node_modulesの中は除いて探します。
find . -not -path './node_modules/*' \
-type d -path '*/.claude/.cc-writes' -empty出力が消したいものと一致していることを確かめてから、消します。-deleteは深い階層から順に空のディレクトリだけを消します。
# 1. 空の .cc-writes を消す
find . -not -path './node_modules/*' \
-type d -path '*/.claude/.cc-writes' -empty -delete
# 2. 空になった .claude を消す(設定ファイルのある .claude は残る)
find . -not -path './node_modules/*' \
-type d -name .claude -empty -delete2本目は、1本目で空になった.claudeだけを消します。settings.jsonやskills/が入っている.claudeは空ではないので残ります。テスト用のディレクトリツリーで、設定ファイル入りの.claudeが残ることと、空のものが消えることを確かめました。
Cargoのglobメンバーを使っている場合は、先にmembersの親ディレクトリだけを調べると早く済みます。致命的なのは、メンバーと同じ階層にできた.claudeだからです。上のワークスペース例なら、親はapps、tools、test/integrationsの3つです。
# members の親ディレクトリ直下にある .claude だけを探す
find apps tools test/integrations -maxdepth 1 -name .claude -type d何も出なければ、Cargoがこれを理由に止まることはありません。出力があれば、中身が空の.cc-writesだけかを確かめてから、上の2本で消します。membersの書き方はプロジェクトごとに違うので、パスは自分のワークスペースに合わせて読み替えてください。
実行する場所には注意点があります。
- Claude Codeのセッションの外で打つ: #79945の報告では、セッションが登録した作業ディレクトリ配下の
.cc-writesは、sandbox内から書けません。別のターミナルなら、この制限に当たりません - セッションを閉じてから消す: 動作中に消したとき何が起きるかは、報告がありません。終了後なら考えなくて済みます
- 中身のある
.cc-writesは消さない:-emptyが付いているので、何か入っていれば対象外です
worktreeの削除が止まったとき
sandbox内のgit worktree remove --forceがOperation not permittedで失敗したら、#79945の報告にある回避策は「sandboxの外で同じコマンドを打つ」ことです。報告者は、dangerouslyDisableSandboxで実行した同じ削除が通ったと書いています。Claude Codeの外のターミナルでも、sandboxの制限は受けません。
# メインのチェックアウトで、worktreeを強制削除する
git worktree remove --force <worktreeのパス>
# worktree本体が消えても、親に空の .cc-writes が残ったときだけ
find <worktreeのパス> -type d -path '*/.claude/.cc-writes' -empty -delete削除に失敗するとgitは消せる分だけ消して止まるため、残るのは<name>/.claude/.cc-writes/の空ディレクトリだけです。2本目はそれを片付けるためのものです。ExitWorktreeでremoveを選んだ場合は、メンテナーがgit管理の標準的なworktreeでは削除できたと書いています。フックで自作したworktreeでは、報告者の環境で失敗しています。
Claudeに「無視していい」と教えておく
#99728のコメントには、Claude自身がこのディレクトリの存在を「予期しないもの」のように話題にするという報告があります。報告者は、無視して言及しないよう、ルールとメモリを書いても、たまに再発するそうです。
それでも、CLAUDE.mdに一文あれば、頻度は下げられる見込みがあります。例えば次のような形です。
## Sandbox
- `.claude/.cc-writes/` の空ディレクトリはClaude Codeが作るもの。削除や.gitignoreへの追記を提案しないなお、.gitignoreに足す必要はありません。空のディレクトリはgitに見えないので、追記は効果がなく、リポジトリにノイズが残るだけです。
増やさないための工夫(未検証)
ここまでのIssueが示す仕組み(cwdが動くとできる)が正しければ、作業ディレクトリを動かさないコマンドの書き方が、一番の予防になります。
cd sub && cmdを単独で実行せず、git -C sub …やnpm --prefix sub …のように、パス指定でコマンドを打つ- どうしても
cdが要るときは、(cd sub && cmd)のサブシェルにする。保たれるcwdが動かない見込みがある
この2点は、Issueの観察からの推論です。実際に作られなくなるかは、検証されていません。有効なら、CLAUDE.mdに書いて、Claudeにも守らせられます。
公式の対応状況
3つのIssueの状況は、次のとおりです。
| Issue | 内容 | 状態 |
|---|---|---|
| #76995 | 内容空の.cc-writesを自動で掃除してほしい(Cargoの被害報告つき) | 状態2026年9月18日にbotが「長く動きがない」ためクローズ(not_planned)。10月7日に「まだ起きる」とのコメントあり |
| #79945 | 内容worktree削除がsandboxの書き込み拒否で失敗する | 状態メンテナーがバグと認め、修正を追跡中と返信。9月15日にbotがクローズ |
| #99728 | 内容ネストしたサブフォルダに増える | 状態open。ラベルはbug、platform:macos、area:sandbox。報告者は、作らない、設定で止める、用途を文書化する、の3点を要望 |
#76995のコメントには、クローズがbotの誤動作ではないかという指摘もあります。sandboxingのページの設定一覧には、.cc-writesを止めたり移したりするキーがありません。修正を待つあいだは、定期的な掃除と、Cargoのようなglobで列挙する仕組みの確認が現実的です。
sandboxの書き込み範囲を設定で広げたい場合は、allowWrite/denyWriteでkubectl・terraformの書き込み範囲を調整するが参考になります。ただし、.cc-writesの拒否を外す設定は、ドキュメントにありません。
まとめ
空の.claude/.cc-writes/は、macOSのsandbox有効時にcwdが動くたびに増える、用途が未文書化のディレクトリです。git statusには出ないので、気づくのはIDEのツリーかCargoのエラーになってからです。
見つけたら、別のターミナルで2本のfindを打てば消せます。Cargoのglobメンバーの隣にできたものは、ビルド失敗に直結するので、先に探してください。