save-all · diff
git:20260730.864bb3f to git:20260730.443389f
1 added, 1 removed. Audit A to A.
---
name: save-all
- description: 重開機/關機/收工前的「落地同步」收尾檢查。在每個還開著的對話 session 裡各跑一次,把只活在這個對話裡、還沒寫進磁碟的東西全部外部化並驗證真的落地,然後回報「安全可重開 / 還有 X 沒同步」。當使用者說「要重開機了」「save-all」「/save-all」「準備重開」「關機前收尾」「reboot 前」「今天收工」時觸發。⚠️ 本 skill 只做落地+回報,不重開機器。 English triggers: "save-all", "about to reboot", "shutting down", "wrapping up for today", "before restart".
+ description: '重開機/關機/收工前的「落地同步」收尾檢查。在每個還開著的對話 session 裡各跑一次,把只活在這個對話裡、還沒寫進磁碟的東西全部外部化並驗證真的落地,然後回報「安全可重開 / 還有 X 沒同步」。當使用者說「要重開機了」「save-all」「/save-all」「準備重開」「關機前收尾」「reboot 前」「今天收工」時觸發。⚠️ 本 skill 只做落地+回報,不重開機器。 English triggers: "save-all", "about to reboot", "shutting down", "wrapping up for today", "before restart".'
---
# /save-all — 收工前的落地收尾
重開機(或單純收工)前,在**每個還開著的對話 session** 裡各跑一次。
## 為什麼需要
- Session 一關,**對話 context 就沒了**。「只活在這個對話裡、還沒寫進檔案的東西」—— 學到的教訓、剛冒出來的待辦、做到一半的工作狀態 —— 全部蒸發。
- 落地 = 把它們外部化成磁碟上的檔案。
- 而且**寫入可能靜默失敗**(工具回「成功」但檔案沒變的情況真實存在)→ **落地後一定要驗證真的寫進磁碟**。這是本 skill 的鐵則,不是可選步驟。
> 🤖 R2-D2 時刻:Death Star 圖紙如果只存在 Leia 的腦子裡,Tantive IV 被攔截時就全劇終了。
> 存進 R2、彈射逃生艙 —— 資料落地,故事才能繼續。
## 動作(依序做完、逐項回報)
### 0. 校時
先跑 `date` 拿正確時間戳 —— 落地紀錄的時間別憑印象寫。
### 1. 盤點本 session 的 in-flight
逐項自問「session 關掉後這個還在嗎?不在就落地」:
- **① 學到的教訓/決策/意外發現** → 該進長期記憶的(memory 目錄、專案筆記)
- **② 本 session 新長出的待辦** → 該進你的任務清單的
- **③ 要交給別專案/未來 session 的事** → 該寫交接卡的(→ `/dropoff`)
- **④ 改過的系統性設置**(裝/改/停排程、改自動化腳本、改設定檔)→ 該記進專案文件的
- **⑤ 進行到一半的工作敘事** → 該寫 HANDOFF/進度筆記的
若本 session 閒置、什麼 in-flight 都沒有 → 直接跳到第 5 步回報「無 in-flight、安全可重開」,**別硬湊**。
### 2. 逐項落地
- ①④⑤ → 寫進對應的筆記/memory/文件檔。
- ② → 進你的任務系統(沒有就寫進專案 TODO 檔)。
- ③ → 跑 `/dropoff` 寫交接卡(有這個 skill 就用它,別在這裡重寫邏輯)。
**每寫一項立刻驗證**:`wc -l` 看行數、`stat` 看 mtime 是剛剛、`grep` 新內容有命中 → 確認真落地。沒落地就重寫,**別信工具回的「成功」字面**。
### 3. flush git(若本 session 動過 git 管理的目錄)
有 auto-sync 的目錄也一樣 —— 重開可能發生在下次自動同步之前,手動推一次別等:
```bash
git add -A && git commit -m "pre-reboot flush $(date +%m%d-%H%M)" && git push
```
(commit 前瞄一眼 `git status`,確認沒把不該進 repo 的東西帶進去。)
### 4. 統計本次 save-all 消費的 token(Claude Code CLI 限定,選跑)
> Cowork/claude.ai 環境沒有本機 transcript,這一步直接跳過,不影響其他步驟。
讀本 session transcript 的真實 `usage`(不要自估 —— 模型無法可靠內省自身用量):
```bash
tx=$(find ~/.claude/projects -name "${CLAUDE_CODE_SESSION_ID}.jsonl" 2>/dev/null | head -1)
[ -n "$tx" ] && python3 - "$tx" <<'PY'
import json,sys
i=o=cc=cr=n=0
for line in open(sys.argv[1]):
try: u=json.loads(line).get('message',{}).get('usage')
except: continue
if not isinstance(u,dict): continue
i+=u.get('input_tokens',0); o+=u.get('output_tokens',0)
cc+=u.get('cache_creation_input_tokens',0); cr+=u.get('cache_read_input_tokens',0); n+=1
print(f"session 累計 {n} turns: input={i:,} output={o:,} cache_creation={cc:,} cache_read={cr:,}")
PY
```
### 5. 回報 go/no-go
逐項複驗後給明確信號:
- ✅ **全部落地、無 in-flight 殘留** → 「安全可重開」+列出這次落地了什麼、寫進哪個檔。
- ⚠️ **還有 X 沒同步** → 列出未落地項目與原因,「建議先處理 X 再重開,或你接受風險重開(會掉 X)」,讓使用者決定。
## 鐵律
- 🚫 **本 skill 不重開機器**,只做落地+回報;重開由使用者自己按。
- ✅ **落地一定驗證真的寫進去**。
- 🔁 **每個開著的 session 各跑一次** —— 各 session 只知道自己的 in-flight,別想在一個 session 裡代跑別的。
- 📝 **隨做隨記、逐項回報**,別等最後批次補。