goallisted
Install: claude install-skill abs1294/fulin-claude-plugins
# goal — 定完成條件、讓官方 /goal 引擎做到完成
把「做到完成」的判定交給 Claude Code 的 `/goal` 引擎(本質是 session 級的 Stop hook:Claude 每次要停下時由檢查器驗證條件,未達成就被推回去繼續),但**條件由你(Claude)先推導、使用者過目**,不是直接把使用者的一句話丟給引擎。
| | 本 skill(`goal`) | 同 plugin 的 `delaylocal` |
|---|---|---|
| 何時跑 | propose 完直接起(預設);設定檔開確認 timer 則等你確認或逾時 | 5h quota 重置後 |
| 引擎在哪跑 | 子程序 `claude -p`(headless session) | 同左,由 cron 到點後的本 session 啟動 |
| 需要 cron | 預設不需要;只有開了確認 timer 才排一個 | 任務本體與逾時 timer 都要 |
| LINE 收尾 | 無;最終回報在本對話(有 wtf 就套 wtf 格式) | 有(選用) |
## 為什麼是子程序(讀完再動手,別想走捷徑)
- Claude 自己輸入不了斜線指令。
- **2.1.196 起,cron 排程 fire 的 prompt 不再解析 slash command**:開頭 `/goal` 只是純文字(官方 scheduled-tasks 文件、GitHub #75837)。跨 session 訊息、skill 內包 `/goal` 也一樣不執行。**禁���**再用 CronCreate 送 `/goal`。
- 唯一可由 Claude 啟動引擎的入口是 `claude -p "/goal …"`(官方 goal 文件;2.1.268 實測:Goal set → 第一回合故意做一半 → 引擎自動推第二回合 → 達成)。`goal.js --run` 就是在做這件事,並避開兩個坑:git-bash 會把開頭 `/goal` 轉成 Windows 路徑、巢狀 session 的 `CLAUDECODE` 環境變數。
## 架構(薄 skill + 確定性工具)
- `goal.js`:**準備**(建 run 目錄、落 `/goal` prompt、anchor、帳本模板)→ **執行**(`--run <run_dir>`:起子程序、收 stream、產 summary)→ 隨時 **`--status <run_dir>`**(看進度,不阻塞)/**`--stop <run_dir>`**(先核對 pid 身分——啟動時間+程式名——對得上才 `taskkill /T`;pid 已被別的程序重用就只把狀態收成 stopped、不殺任何東西)/**`--list`**(全機所有 run,含 `alive_state`:alive/dead/stale/unknown)/**`--prune [--dry-run] [--keep-hours N]`**(唯一允許的清理,四類且都要超過 N 小時(預設 24):已結束且程序不在、`running` 但 pid 已死或被重用、`prepared` 從未啟動、沒有 meta 的壞目錄;活著或探測不明的一律不碰;單一目錄刪不掉會記進 `failed[]` 繼續)。
- `../../lib/`:`goal-head.js`(4000 字元門檻)、`cron-time.js`、`config.js`(設定檔)、`e