Claude Media
Claude Codeの.cc-writesが増える原因と、空ディレクトリの掃除手順

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-writes
  • frontend/src/<pkg>/pages/settings/<feature>/.claude/.cc-writes
  • 深い階層のdetails/…/.claude/.cc-writes

再現手順は短く、次の3つです。

手順

報告された再現手順

  1. 1

    macOSでsandboxを有効にする

    Seatbeltによるsandboxを使います。

  2. 2

    プロジェクトルートでClaude Codeを起動する

    起動時点では、サブフォルダに何もありません。

  3. 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 -delete

2本目は、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メンバーの隣にできたものは、ビルド失敗に直結するので、先に探してください。

この記事を共有:XはてブLinkedIn