c2638668e3
leo 2026-08-20:「同一個 plugin 你用,薄殼也用,保證兩邊同步」
「我要你幫雲端做薄殼,永遠都有問題,你要做的就是這組設定
你自己可以 dogfooding」
搬進來:41 支 hook(51 條註冊)/7 支 command/2 支 skill/23 支腳本。
不搬 .env、wiki、docs——那些是知識不是環境。
51 條 hook 路徑全部從 $CLAUDE_PROJECT_DIR/.claude/hooks/ 改成 ${CLAUDE_PLUGIN_ROOT}/hooks/,
零漏網。那正是薄殼一直壞掉的根:雲端 cwd 不是真身,寫死路徑就斷。
尚未驗證:Claude Code 能不能從私有 Gitea repo 裝 marketplace(要憑證)。
下一步就是在本機實際裝一次,通了才動雲端 bootstrap.sh。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
57 lines
2.7 KiB
Bash
Executable File
57 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
||
# worklist-guard.sh — Stop hook:**還有未完成的步驟就不准收工寫報告**。
|
||
#
|
||
# 🔴 leo 2026-08-08 連續兩次點破:
|
||
# 「所以你**沒有維持 loop**,而是停下來浪費了時間」
|
||
# 「**這樣不行,要解決停止 loop 的問題**」
|
||
#
|
||
# 病根(誠實的):既有的 self-drive-police 是**事後**勸告——它在我已經停下來之後才響,
|
||
# 而我對它的回應是**再寫一段散文**,等於又停一次。**勸告治不了「停」這個動作**,
|
||
# 因為停下來寫字正是我回應它的方式。
|
||
#
|
||
# 治法:把「還沒做完」變成**環境事實**,讓收工這件事在事實上不成立。
|
||
# · 開一條鏈之前,先把剩下的步驟寫進 /tmp/.worklist-<session_id>(一行一步)
|
||
# · 做完一步就把那行刪掉
|
||
# · 只要檔案還有內容 ⇒ 本 hook exit 2 ⇒ **我停不下來,只能繼續做下一步**
|
||
#
|
||
# 這跟今天立的其他幾道同形狀:**規則被讀到 ≠ 會被執行,要讓環境替我執行。**
|
||
# (leo 的母原則:環境邊界取代邏輯判斷。)
|
||
#
|
||
# 逃生口:鏈真的該中止(撞人閘、前提翻掉、leo 改方向)⇒ 直接刪掉那個檔,
|
||
# 並**在回覆裡說明為什麼中止**——留痕,不是默默放掉。
|
||
set -eu
|
||
|
||
SID=$(cat 2>/dev/null | python3 -c '
|
||
import sys, json
|
||
try: print(json.load(sys.stdin).get("session_id", "") or "nosid")
|
||
except Exception: print("nosid")
|
||
' 2>/dev/null || echo nosid)
|
||
|
||
WL="/tmp/.worklist-$SID"
|
||
[ -f "$WL" ] || exit 0
|
||
|
||
# 空白行不算。
|
||
# 🔴 2026-08-08 自己踩到:原本寫 `grep -c ... || echo 0`——grep 在 0 命中時**回傳碼非零**,
|
||
# 於是 `|| echo 0` 也跑,remaining 變成 "0\n0" ⇒ `-eq` 判斷炸掉 ⇒ **清單空了還是擋**。
|
||
# 這是「用 grep 回傳碼當有無」的老坑,改成只認它印出來的數字。
|
||
remaining=$(grep -cvE '^[[:space:]]*$' "$WL" 2>/dev/null | head -1)
|
||
[ -z "$remaining" ] && remaining=0
|
||
[ "$remaining" -eq 0 ] && { rm -f "$WL"; exit 0; }
|
||
|
||
cat >&2 <<EOF
|
||
🔁 Loop 警察:**這條鏈還有 $remaining 步沒做完,現在不是收工的時候。**
|
||
|
||
【leo 2026-08-08】「所以你**沒有維持 loop**,而是停下來浪費了時間。」
|
||
【leo 2026-08-08】「**這樣不行,要解決停止 loop 的問題。**」
|
||
|
||
還沒做完的:
|
||
$(grep -vE '^[[:space:]]*$' "$WL" | sed 's/^/ · /')
|
||
|
||
**不要寫報告,直接做下一步。** 報告等整條鏈跑完再寫一次就好——
|
||
中途每停一次寫一段,就是 leo 說的「停下來浪費時間」。
|
||
|
||
做完一步 ⇒ 從 $WL 刪掉那一行。
|
||
真的要中止(撞人閘/前提翻掉/leo 改方向)⇒ 刪掉整個檔,並在回覆說明為什麼中止。
|
||
EOF
|
||
exit 2
|