← ClaudeAtlas

self-heallisted

降低並自動接力 tool call 失敗。觸發詞:「tool call 一直失敗」「工具呼叫失敗」「malformed」「自救機制」「self-heal」「卡住自己續」「起 scheduler 接力」「別讓我一直催繼續」;或一段需多步工具操作的作業開始時。建立 self-heal scheduler 接力循環。終止/恢復:「終止 self-heal」「停掉 self-heal」「關掉 self-heal」→ 建 kill-switch 旗標檔全面靜默;「恢復 self-heal」「打開 self-heal」→ 刪旗標檔。註:scheduler 與操作守則皆為行為規約、非程式強制,效果 best-effort(程式強制的是 hook 事前提醒與其 kill-switch)。
abs1294/fulin-claude-plugins · ★ 2 · Testing & QA · score 65
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。任務細節、重試上限、換通道規則,喚醒後依本