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>
This commit is contained in:
2026-08-20 11:41:46 +08:00
commit c2638668e3
85 changed files with 11879 additions and 0 deletions
@@ -0,0 +1,71 @@
開場注入補一段:藏書地圖顯示 0 不等於庫是空的(2026-08-13
由 subagent 產生、**待總管代套**`.claude/` 是受保護目錄,子 session 動不了)。
套用:
git apply scripts/patches/session-start-recall--map-zero-is-a-lie.patch
驗證(要看到那段文字):
bash .claude/hooks/session-start-recall.sh | sed -n '/查不到就換一種查法/,/追蹤:/p'
已驗:`git apply --check` 通過、`bash -n` 通過、實跑印得出來(輸出見 Leo/mira#6)。
--- 為什麼要這段(2026-08-13 對 leo21c 唯讀實測)-----------------------------
leo 原話:「現在你的 MCP 搜不到東西,這就是我急着要完成它的原因。沒有它你是瞎的。」
實測結果不是「搜尋壞了」,是**地圖說謊,而 AI 信了它就不再往下查**:
kbdb_get_map() → 8 個庫,7 個 triplet_count = 0
kbdb_search(q="cypher-executor", mode="keyword") → 42 筆,來源正是那 7 個庫
gitea:Leo/Arcrun@…、gitea:Leo/mira@… 等,library 全都標對了)
地圖數的是**三元組**;那 7 個庫有 entries 但沒有三元組
`kbdb_query(template='triplet')` 抽樣 100 筆,source_uri 全部是 kb://,沒有一筆來自 gitea)。
⇒ 開場注入把「七個庫是空的」推到每個 session 眼前,AI 於是不查了——
而答案 keyword 一查就有。**這一段就是為了擋掉那個誤判。**
一併寫進注入文字的另外兩件實測(省得每個 session 自己撞):
· 語意搜尋對超過一半的 repo wiki 內容是瞎的(那 42 筆裡 23 筆 is_embedded=0)。
問「Arcrun 是什麼 工作流引擎 Cloudflare」回 0 筆;同題 keyword 回 29 筆真答案。
· kbdb_graph_neighbors(subject="Arcrun") 回 0 個鄰居,
但 kbdb_get_map(library="kb") 列著 Arcrun degree 40 ⇒ 圖查詢是斷的。
🔴 這段是**暫時的路標,不是修法**。真修法在 Leo/Arcrun#87(三元組沒從 repo wiki 產生)、
Leo/Arcrun#85embed 補算)、Leo/mira#6Mira 主線)。
**那三張修好之後這段要拿掉**,否則它會變成下一個「看起來像現況的舊東西」。
--- a/.claude/hooks/session-start-recall.sh
+++ b/.claude/hooks/session-start-recall.sh
@@ -83,6 +83,31 @@
echo "════════════════════════════════════════════════"
echo ""
+# ── push 1.5/5:藏書地圖顯示 0 ≠ 庫是空的(2026-08-13 實測,暫時路標)────────
+# 修好 Leo/Arcrun#87(三元組沒從 repo wiki 產生)與 #85(一半沒 embed)之後,
+# 這整段要拿掉。留著會變成下一個「看起來像現況的舊東西」。
+echo "────────────────────────────────────────────────"
+echo "🔴 查不到就換一種查法——**藏書地圖顯示 0,不代表那個庫是空的**(2026-08-13 實測)"
+echo ""
+echo " 地圖數的是「三元組」。各 repo 的 wiki 有 entries、但**沒有三元組**"
+echo " 所以 arcrunmiraarcrun-ragarcrun-harnessinkstoneco 等庫會顯示 0——**那是假的**。"
+echo " 實測:kbdb_search(q=\"cypher-executor\", mode=\"keyword\") 回 42 筆,正是那些庫的卡片。"
+echo ""
+echo " ⇒ 三種查法現在的實際狀態:"
+echo " · kbdb_search(mode=\"keyword\") ✅ 可用——**目前唯一可靠的一種,優先用它**"
+echo " · kbdb_search(mode=\"semantic\") ◐ 對超過一半的 repo wiki 是瞎的(沒 embed"
+echo " 回 0 筆**不代表庫裡沒有**,改用 keyword 再問一次"
+echo " · kbdb_graph_neighbors() ❌ 目前回 0 個鄰居,先別依賴它"
+echo ""
+echo " 🔴 **不要因為地圖是 0、或語意回 0,就下結論說「庫裡沒有這個」。**"
+echo " 2026-08-13 就是這樣把 Arcrun 的定位講錯的——查得到,只是被告知不用查。"
+echo ""
+echo " 在修好之前,問「X 是什麼」的正確姿勢:"
+echo " kbdb_search(q=\"X\", mode=\"keyword\") → 沒有再試 semantic → 都沒有才說沒有"
+echo " 追蹤:Leo/Arcrun#87(地圖)|Leo/Arcrun#85embed)|Leo/mira#6Mira 主線)"
+echo "────────────────────────────────────────────────"
+echo ""
+
# ── push 2/5:各 repo 的 wiki 全景(leo 2026-08-12「一次看到全景」的另一半)──
# 上面那段是**票**(雲端現算)+ KBDB 藏書地圖;這段是**各 repo 真正的 wiki**。
# 為什麼不塞進雲端那支工作流:工作流跑在 Cloudflare 上,要拿 repo 樹只有