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>
90 lines
4.7 KiB
Bash
Executable File
90 lines
4.7 KiB
Bash
Executable File
#!/bin/sh
|
||
# micromanage-guard.sh — PreToolUse(Agent):**擋微管理的派工單**。
|
||
#
|
||
# 🔴 為什麼要有這道(leo 2026-08-08 點破,且他指出「很早就有規矩」):
|
||
# 「不可以微管理,因為**你管的也是 CC**,要把它當作**有能力處理整件工作的 CC**。
|
||
# 而且有設計一個警察抓微管理,如果沒有,你要恢復它。」
|
||
#
|
||
# 查證:`kbdb-api-wall-guard.sh` 確實會在派工時**印出**「派工鐵律:寫目的,不寫做法」,
|
||
# 但它**只是印字,不檢查我的 prompt**——跟今天抓到的其他三個同款:
|
||
# 規則被讀到了,卻沒有機制驗證我照做。hook 目錄裡沒有任何一支真的在擋微管理。
|
||
#
|
||
# 而我 08-08 當天的派工單就是實例:五項編號驗收、四個具名的坑、指定 shell 命令、
|
||
# 還要求「每完成一項就回報一次」——那是把 CC 當一次性工具用,不是當同事。
|
||
#
|
||
# 判準(CLAUDE.md 派工鐵律):派工只准寫「**要達成什麼 + 怎麼驗 + 紅線**」。
|
||
# ✅ 目的:「讓拿到檔的人光看那份檔就能判斷這台機器還有沒有在動」
|
||
# ❌ 做法:「在 local 段補 last_sync 欄位,改 buildDiagnosticsPayload()」
|
||
# 實證(08-08):同一件事我**刻意只寫目的**,subagent 交出整個 engine 區塊,
|
||
# 比我心裡想的「加一個時間戳」好——**微管理會把對方的判斷力關掉。**
|
||
#
|
||
# 這道閘不是要我寫得少,是要我**寫在對的層次**。紅線與驗法本來就該具體;
|
||
# 「你先做 A 再做 B、用哪個指令、改哪個函式」才是要擋的。
|
||
set -eu
|
||
|
||
INPUT="$(cat)"
|
||
PROMPT=$(printf '%s' "$INPUT" | python3 -c '
|
||
import sys, json
|
||
try:
|
||
d = json.load(sys.stdin)
|
||
print(d.get("tool_input", {}).get("prompt", "") or "")
|
||
except Exception:
|
||
print("")
|
||
' 2>/dev/null || echo "")
|
||
[ -z "$PROMPT" ] && exit 0
|
||
|
||
TMP=$(mktemp); printf '%s' "$PROMPT" > "$TMP"
|
||
trap 'rm -f "$TMP"' EXIT
|
||
|
||
lines=$(wc -l < "$TMP" | tr -d ' ')
|
||
|
||
# 微管理訊號:每一條都是「替對方決定怎麼做」的形狀
|
||
sig=0
|
||
# ① 直接給 shell 指令要它照跑
|
||
n1=$(grep -cE '`(git|go|npm|npx|hdiutil|wrangler|curl|unzip|shasum|strings) ' "$TMP" || true)
|
||
[ "$n1" -ge 2 ] && sig=$((sig+1))
|
||
# ② 指名要改哪個檔/哪個函式(在派工單裡=替它決定實作位置)
|
||
n2=$(grep -cE '`[A-Za-z0-9_/.-]+\.(go|ts|tsx|js|mjs|sh|json|toml)`|\(\)`|函式|函數' "$TMP" || true)
|
||
[ "$n2" -ge 4 ] && sig=$((sig+1))
|
||
# ③ 編號的操作步驟(「1. 先… 2. 再…」=流程由我編好)
|
||
n3=$(grep -cE '^ *[0-9]+\. *(先|再|然後|接著|把|改|加|跑|執行|部署)' "$TMP" || true)
|
||
[ "$n3" -ge 2 ] && sig=$((sig+1))
|
||
# ④ 過程控制(要它按我的節奏回報,而不是交成果)
|
||
n4=$(grep -cE '每完成一項|每一步都回報|做完一步|逐步回報|先做.*再回報' "$TMP" || true)
|
||
[ "$n4" -ge 1 ] && sig=$((sig+1))
|
||
# ⑤ 派工單過長——超過 70 行多半是把我腦裡的做法整套倒出去
|
||
[ "$lines" -ge 70 ] && sig=$((sig+1))
|
||
|
||
[ "$sig" -lt 2 ] && exit 0 # 訊號少於 2 個=多半是正常的目的+驗法+紅線
|
||
|
||
STAMP="/tmp/.micromanage-warned-$(printf '%s' "$PROMPT" | shasum | cut -c1-12)"
|
||
[ -f "$STAMP" ] && exit 0 # 同一張單只擋一次,改完重送即放行
|
||
date +%s > "$STAMP"
|
||
|
||
cat >&2 <<EOF
|
||
🎛️ 微管理警察:這張派工單有 $sig 個「替對方決定做法」的訊號(共 $lines 行)。
|
||
|
||
【leo 2026-08-08】「**不可以微管理,因為你管的也是 CC**,
|
||
要把它當作**有能力處理整件工作的 CC**。」
|
||
|
||
【判準】派工只准寫三樣:**要達成什麼 / 怎麼驗 / 紅線**。
|
||
✅ 目的:「讓拿到檔的人光看那份檔,就能判斷這台機器還有沒有在動」
|
||
❌ 做法:「在 local 段補 last_sync 欄位,改 buildDiagnosticsPayload()」
|
||
|
||
【今天的實證,別忘了】同一件事我**刻意只寫目的**,它交回整個 engine 區塊
|
||
(alive/crash_looping/headline/秒數),**比我心裡想的「加一個時間戳」好**。
|
||
⇒ **微管理會把對方的判斷力關掉**,而你不是那個 repo 的專家,它才是。
|
||
|
||
偵測到的訊號:
|
||
指令要它照跑=$n1 指名檔案/函式=$n2 編號步驟=$n3 過程控制=$n4 行數=$lines
|
||
|
||
改法(不是刪短,是**換層次**):
|
||
· 把「怎麼做」整段刪掉——它會自己查 wiki、查 skill、讀 code
|
||
· 保留並寫清楚:**這件事成功長什麼樣**、**怎麼驗**、**不准碰什麼**
|
||
· 已知的坑可以留,但寫成「這裡有前科」而不是「你要下這個指令」
|
||
· 不要規定它的回報節奏——要成果,不要進度條
|
||
|
||
改完重送即放行(同一張單只擋一次)。
|
||
EOF
|
||
exit 2
|