self-heallisted
Install: claude install-skill abs1294/fulin-claude-plugins
# Self-Heal:tool call 失敗的降低與自動接力
## 問題
模型偶爾輸出未收尾的 `<invoke>`/`<parameter>` 標籤 → 解析層退回 malformed。
**關鍵限制**:malformed 在解析層就掛、形不成有效 tool call → PostToolUse/Stop hook 都觸發不到。
所以沒有「自動偵測 malformed 並修復」的 hook 機制。能做的只有兩層:①事前降低機率 ②卡住後自動接力。
## 終止機制(kill-switch,使用者喊停即全面靜默)
**旗標檔**:`~/.claude/self-heal.off`(內容不拘,**存在即關**)。這是唯一的終止實體——self-heal 沒有常駐程序,「終止」不是殺 process,而是讓兩層機制都看旗標讓路。
**使用者說「終止 / 停掉 / 關掉 self-heal」時,立刻依序做**:
1. 建旗標檔(`node -e "require('fs').writeFileSync(require('path').join(require('os').homedir(),'.claude','self-heal.off'),'')"` 或等效指令)。
2. 本 session 已排的 self-heal 接力喚醒:能取消就取消;取消不了的不用追——喚醒守衛見旗標即靜默結束(見核心循環第 0 步)。
3. 回報:已終止(含旗標檔路徑),恢復方式一句話帶到。
**使用者說「恢復 / 打開 self-heal」**:刪旗標檔即恢復,下一輪 UserPromptSubmit 起提醒層即回來。
**效果範圍與生效速度**:hook 提醒層(程式強制:`xml-reminder.js` 開頭讀旗標,存在即靜默退出)+ scheduler 接力層(行為規約:喚醒第 0 步先查旗標)。跨所有專案、立即生效、不動 settings.json、不用重開 session。旗標檢查失敗時 hook 照常提醒(fail-open)。
## 兩層機制
### 第 1 層:事前提醒(本 plugin 的 hook,自動生效)
`hooks/xml-reminder.js` 在每次 UserPromptSubmit 注入 XML 收尾提醒。裝了就生效,無需動作。**開頭先查 kill-switch 旗標,存在即靜默退出(見上節)。**
### 第 2 層:self-heal scheduler 接力(行為規約,需主動執行)
**何時起**:開始一段「需要多步工具操作、可能中途 malformed 中斷」的作業時。
**怎麼起**:用當前環境可用的排程/喚醒工具(如 `ScheduleWakeup`,部分環境為 `CronCreate`;先確認可用再用,不寫死)設一個短延遲喚醒(建議 ~240s,落在 prompt 快取窗內;若工具僅支援分鐘粒度 cron,取最接近的一次性排程)。
**喚醒 prompt 用「固定通用短語」,不要塞任務細節**——這是 malformed 高發點:把整段任務說明(含中文、箭頭、括號)塞進 prompt 參數,續設那一棒自己就會 malformed,鏈當場斷。喚醒時當前作業是什麼,從對話脈絡 / task list 自己讀得到,不必寫進 prompt。建議固定句:
> 「請確認工作是否完成,若未完成請繼續完成。」
就這一句,永遠不變、永遠不會 malformed。任務細節、重試上限、換通道規則,喚醒後依本