#!/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 <