Files
ISEP/hooks/micromanage-guard.sh
Leo c2638668e3 ISEP 0.1.0:環境設定收成一個 plugin,本機與雲端共用一份
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>
2026-08-20 11:41:46 +08:00

90 lines
4.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# micromanage-guard.sh — PreToolUseAgent):**擋微管理的派工單**。
#
# 🔴 為什麼要有這道(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 區塊
alivecrash_loopingheadline/秒數),**比我心裡想的「加一個時間戳」好**。
⇒ **微管理會把對方的判斷力關掉**,而你不是那個 repo 的專家,它才是。
偵測到的訊號:
指令要它照跑=$n1 指名檔案/函式=$n2 編號步驟=$n3 過程控制=$n4 行數=$lines
改法(不是刪短,是**換層次**):
· 把「怎麼做」整段刪掉——它會自己查 wiki、查 skill、讀 code
· 保留並寫清楚:**這件事成功長什麼樣**、**怎麼驗**、**不准碰什麼**
· 已知的坑可以留,但寫成「這裡有前科」而不是「你要下這個指令」
· 不要規定它的回報節奏——要成果,不要進度條
改完重送即放行(同一張單只擋一次)。
EOF
exit 2