Claude Code のセッション一覧を「閉じたら自動で消える」ようにする
C:/Program Files/Git/clear は削除コマンドではない。hook + 閉じた台帳 + 常駐ウォッチャーで、セッションを閉じたら一覧から自動退避(削除せず move)する実装手順と、並行タブ・凍結コピー配布の落とし穴
約8.3万トークンの節約 (API料金換算で約120円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「Claude Code のセッション一覧を「閉じたら自動で消える」ようにする」は、開発プロセスカテゴリのAI指示書(MDファイル)です。C:/Program Files/Git/clear は削除コマンドではない。hook + 閉じた台帳 + 常駐ウォッチャーで、セッションを閉じたら一覧から自動退避(削除せず move)する実装手順と、並行タブ・凍結コピー配布の落とし穴この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約8.3万トークン(API料金換算で約120円)・87%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約9.5万トークン
- この巻物使用時
- 約1.2万トークン
- 節約量
- 約8.3万トークン (約120円)
- 更新日
- 2026-08-26
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/claude-code-2/raw を読み込んで、この指示書どおりに実装して"
中身
Claude Code のセッション一覧を「閉じたら自動で消える」ようにする
この指示書が解く問題
Claude Code を使い込むと、サイドバーのセッション一覧が数十件に膨れて目的のものを探せなくなる。
利用者はたいてい /clear を押して片付けようとするが、/clear は削除コマンドではない。
「会話コンテキストをリセットして新しいセッションを開始する」機能なので、一覧からは何も消えず、
むしろ押すたびにメタ行だけを持つ空セッションが1件増える。
その結果「押しても消えない → 押したか分からない → また押す」が無限に続く。
このMDは、セッションを閉じたら一覧から自動的に消える状態を作る手順である。
前提知識(ここを外すと必ずハマる)
- 一覧は
~/.claude/projects/<projectId>/<sessionId>.jsonlの実体から作られる。 jsonl を別ディレクトリへmoveすれば一覧から消える。削除する必要はない(復元可能にしておくこと)。 - エディタ拡張の「ゴミ箱」はファイルを消さない。 拡張の状態DBに「非表示ID」を追加するだけで、 実体は残り続ける。しかもその追加は read-modify-write なので、複数ウィンドウを開いていると lost update が起きて削除済みが一覧に復活することがある。状態DBへの書き込みは避け、read-only で観測に留める。
- モデル(AI)は自分の
session_idを知らない。 hook だけがsession_idを受け取れる。 つまり「今のセッションを閉じる」を実装するには、hook が session_id をファイルへ書き出す経路が必須。 - タブを開いたままだと拡張が jsonl を触り続け、mtime が更新され続ける。 「最終更新から N 秒経過したら退避」という判定は、この事実を織り込まないと永久に発火しない。
構成
3つの部品で作る。
| 部品 | 役割 |
|---|---|
current-session.mjs(UserPromptSubmit hook) | 発言のたびに ~/.claude/current-sessions/<id>.json へ {sessionId, cwd, at} を記録 |
close-session.mjs(CLI) | 「閉じた」台帳 ~/.claude/closed-sessions.json に ID を積む |
purge-sessions.py(常駐ウォッチャー) | 30秒ごとに台帳を見て、条件を満たした jsonl を退避ディレクトリへ move |
セッション終了手順(スキルやスラッシュコマンド)の最後に close-session.mjs を呼ぶだけで、
数十秒後に一覧から消える。
実装のポイント
退避の判定は「経路ごとに待ち時間を変える」
明示的に閉じた(closed 台帳) → 45秒で退避。利用者が閉じると宣言済みなので短くてよい
利用者が削除操作をした かつ 空 → 90秒で退避。実発言も応答も0件で失う情報が無い
利用者が削除操作をした かつ 中身有 → 600秒。稼働中の可能性があるので慎重に
「削除操作済み」を一律に長い閾値へ入れてはいけない。 空セッションを長い閾値に入れると、タブが開いている限り mtime が更新され続けて永久に消えない (実測でこれが「ゴミ箱を押しても消えない」の真因だった)。
空セッションの判定
user / assistant の中身のあるメッセージが1件でもあれば空ではない。
ただし <command-name> <command-message> <local-command-caveat> のような
コマンド記録は発言に数えない(/clear のスタブがこれに該当するため)。
ファイルサイズに上限(例: 200KB)を設けて、大きいファイルは読まずに除外すると I/O と誤判定を防げる。
稼働中セッションを絶対に退避しない
current-sessions/ の各記録を読み、at が十分新しいものを集合として保護する。
単一のグローバルファイルに「現在のセッション」を1件だけ持つ設計にしてはいけない。
利用者が複数タブを開いていると、最後に発言したセッションで上書きされ、
①保護対象が1本しか残らない ②「今のセッションを閉じる」が別のセッションを閉じる、という二重の事故になる。
引数なしで閉じるときは、迷ったら止める
close-session を引数なしで呼んだとき、直近60秒に2件以上のセッションが動いていたら
台帳に積まずにエラー終了し、--session <id> の明示を促す。
間違ったセッションを閉じるより、止まる方が安全。
session_id をモデルに知らせるには、hook の標準出力を使う。ただし毎回出すと文脈を汚しトークンが増えるので、
プロンプトが終了コマンドを含むときだけ1行出す。
if (prompt.includes("session-close")) {
console.log(`[session] このセッションのIDは ${sessionId}。--session ${sessionId} を付けて呼べ。`);
}
常駐ウォッチャーの作法
- heartbeat ファイルに PID を書き、二重起動を防ぐ(stale 判定は 90 秒程度)
- スクリプトを更新したらウォッチャーの再起動が必須。実行中プロセスは起動時のコードを保持するので、 ファイルを書き換えただけでは反映されない(PID kill → heartbeat 削除 → 再起動)
- OS ごとに差がある箇所は分岐する。プロセスの detach は Windows が
creationflags、 POSIX がstart_new_session=Trueで、取り違えると例外になる
チーム全体へ配る場合
- 各PCの設定ディレクトリへコピーした「凍結コピー」を hook に登録してはいけない。 凍結コピーは自分自身を更新しないので、以後の改修がそのPCへ永久に届かない。 正本は配布用リポジトリに置き、hook はリポジトリ内のパスを指すよう登録する。 既に凍結コピーが登録されている環境のために、登録スクリプトに「旧パス→リポジトリのパス」への 張り替え処理を必ず入れる。
- 張り替え処理は冪等にすること。「既に目的のコマンドなら書き換えず、変更カウントも増やさない」。 増やすと差分ゼロでも設定ファイルが毎回書き直され、バックアップが全PCで日々積み上がる。
- ランタイム(例: python)を hook から直接叩かない。薄いランチャーを1枚挟むと、
python3/python/pyの差と、登録スクリプト側の拡張子前提の両方を吸収できる。
検証のしかた(本番のセッションで試さない)
一時ディレクトリを偽のホームとして作り、環境変数のホームを差し替えて実行する。 次の4種を仕込んで、退避される/されないを assert する。
- 閉じた台帳に載せた空セッション(古い mtime)→ 退避される
- 削除操作済みの空セッション(古い mtime)→ 退避される
- 削除操作済みだが中身のあるセッション(新しい mtime)→ 残る
- 稼働中として記録されているセッション → 空でも 残る
加えて「元ファイルは1本も消えておらず、必ず退避先に実在する」を assert する。 これが削除していないことの証明になる。CI に載せるなら Linux でも動くことを確認しておく。
安全側の原則
- jsonl は削除しない。必ず
move。退避先から戻せる状態を保つ - 拡張の状態DBは read-only。書き込むと他ウィンドウとの lost update を持ち込む
- 無人で回る処理なので、失敗が無限リトライにならないようにする (台帳から取り除く処理は、必ず読み直してから差し引く。読み込み時のスナップショットで 丸ごと書き戻すと、並行して追記された ID を失う)
よくある質問
+「Claude Code のセッション一覧を「閉じたら自動で消える」ようにする」とは何ですか?
C:/Program Files/Git/clear は削除コマンドではない。hook + 閉じた台帳 + 常駐ウォッチャーで、セッションを閉じたら一覧から自動退避(削除せず move)する実装手順と、並行タブ・凍結コピー配布の落とし穴
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約9.5万トークンかかりますが、この巻物を使えば約1.2万トークンで済みます。差し引き約8.3万トークン(API料金換算で約120円)・87%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
「そのPCにしか直せない障害」をAIに自分で気付かせて着手させる
特定の1台にしかリポジトリが無い機能は、修正手順を書いても誰にも実行されず放置される。SessionStart hook で当該PCのAIだけに指示を出し、完了後は指示書へ状態を書き戻して再実装事故を防ぐ型。走査の時間予算とセッション跨ぎの再開、メール一致だけの自動承認がなりすまされる理由と署名キー方式、状態問い合わせAPI、鍵の自動配布、no-op通知の抑止まで、実際に94件の滞留を解消した実例に基づく手順。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア