---
name: cc-fork-delete
description: |
  Claude Code のフォーク（/branch で作った派生セッション）を、セッション ID(sid) を指定して安全に削除する。
  元セッションは残し、指定したフォーク 1 つだけを対象にする。~/.claude/ 配下の transcript JSONL・
  subagents・sessions メタに加え、（ロギングフック使用時は）Vault の索引行・全文ログも自動で掃除する。
  既定はゴミ箱退避（復元可）。トリガー: 「フォークを削除」「このフォークだけ消して」「sid を指定してセッション削除」
  「branch したセッションを消したい」「フォーク削除スキル」など。破壊的操作のため必ず dry-run → 確認 → 実行の順で進める。
---

# cc-fork-delete — Claude Code フォークセッションの安全削除

## 役割

ユーザーが指定した**フォークのセッション ID（sid）1 つだけ**を、元セッションを残したまま安全に削除する。
削除はすべて同梱の `delete-fork.sh` が決定的に行う。Claude はその進行役（ID 確認・プレビュー提示・最終確認）に徹し、自前で `rm` を打たない。

## 重要な前提（必ず守る）

- **対象が現在実行中のセッションだと削除できない**。スクリプトが自動でブロックするが、その場合はユーザーに「元へ戻る（`claude -r <forkedFrom>`）か別ターミナルから実行」する必要があると伝える。
- このスキルは**フォーク（`forkedFrom` を持つセッション）専用**。大元セッションを指定すると安全のため中止される。
- **必ず dry-run を先に実行してプレビューを見せ、ユーザーの明示的な承認を得てから `--apply` する。** 無確認で `--apply` しない。

## 手順

1. **sid を特定する**
   - ユーザーが sid を渡していればそれを使う。
   - 渡していなければ尋ねる。`/branch` 実行時の出力、statusline の `sid:`、または索引（`Log/Session/_Index/`）から拾えることを案内する。

2. **dry-run でプレビュー**
   ```bash
   ~/.claude/skills/cc-fork-delete/delete-fork.sh <sid>
   ```
   - 出力（対象セッション / 残すフォーク元 / 削除対象の一覧）をそのままユーザーに見せる。
   - エラー終了した場合（UUID 不正・transcript 無し・現在セッション・フォークでない）は、その理由と対処をユーザーに伝えて**止まる**。

3. **最終確認**
   - 「この内容で削除してよいか」を明示的に確認する。方式（既定=ゴミ箱退避／`--purge`=完全削除）も伝える。

4. **実行**
   - 退避（復元可・既定）:
     ```bash
     ~/.claude/skills/cc-fork-delete/delete-fork.sh <sid> --apply
     ```
   - 完全削除（復元不可・ユーザーが明示的に希望したときのみ）:
     ```bash
     ~/.claude/skills/cc-fork-delete/delete-fork.sh <sid> --apply --purge
     ```

5. **結果報告**
   - 退避モードなら退避先パス（`~/.claude/.trash/forks/<sid>_<日時>/`）を伝え、復元可能であることと、完全に消すには退避先を後で削除すればよい旨を添える。

## スクリプトが面倒を見る安全ガード（説明用）

- UUID 形式チェック / フル ID 完全一致でのみファイル特定
- `forkedFrom` の有無でフォーク判定（大元は中止）
- `$CLAUDE_CODE_SESSION_ID` と一致したら中止（自分自身は消せない）
- `sessions/*.json` は中身の `sessionId` を厳密一致で判定
- 全文ログはヘッダ行 `**セッションID**: <sid>` で判定（本文に sid を含むだけの別ログは対象外）
- 既定はゴミ箱退避。索引は「該当行のみ」削除し、ファイル自体はバックアップを取ってから編集

## 出力先 Vault

索引・全文ログの場所は環境変数 `CLAUDE_SESSION_INDEX_VAULT`（既定 `$HOME/Documents/vault`）を見る。
ロギングフックを使っていない環境では、この部分は「なし」として淡々とスキップされる。

## 関連

- 仕組みの背景は Vault ノート「セッション（フォーク）の削除手順」「セッションログの保管場所と読み出し方法」を参照。
