為什麼:
`skills/hooks-install/SKILL.md` 原本直接內嵌各 CLI(codex/copilot/antigravity/kiro)的詳細佈線步驟,包含逐步設定檔修改、wrapper alias 安裝、以及 `<!-- jsc-hooks -->` 標記區塊的冪等替換邏輯,違反 jsc-meta:skill-check 稽核準則中「確定性程序邏輯應由腳本執行,不應留給子代理每次自行解讀 prose」的要求。
做了什麼:
新增腳本 `tools/wire-cli.sh {cli}`,將原本內嵌於 SKILL.md 的佈線邏輯全數抽出,並支援冪等執行(標記區塊替換、可安全重跑),輸出機器可讀的 `status=wired|degraded|skipped reason=...` 首行訊息與對應結束碼(0=wired、1=degraded、2=bad usage、3=skipped)。改寫 `skills/hooks-install/SKILL.md`,改為依偵測到的 CLI 呼叫此腳本,並讀取其 status/結束碼判斷結果,不再自行內含佈線步驟。同步更新 `README.md`:在工具表新增 `tools/wire-cli.sh` 說明列,並改寫 hooks-install skill 的描述段落,反映新的腳本驅動流程與 `status=` 回報慣例。三份外掛清單 `plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 版本號自 0.0.3 升級為 0.0.4,對應此行為變更。
怎麼做:
建立獨立腳本承載原本的 CLI 佈線程序邏輯,改造 SKILL.md 為呼叫腳本並解讀其標準化輸出,同步更新文件與版本號。
影響範圍:
`skills/hooks-install/SKILL.md`、`README.md`、`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json`、新增檔案 `tools/wire-cli.sh`;影響 hooks-install skill 的執行流程與所有安裝 jsc-hooks 外掛的 CLI 佈線行為。
5.1 KiB
jsc-hooks — 跨 CLI Hooks
jsc 技能組的 hooks domain:所有 hook 只放在這個 repo(技能準則)。腳本為 POSIX shell,同時支援 stdin JSON(Claude 格式)與環境變數輸入,適用 claude / codex / copilot / antigravity / kiro。
安裝、更新、移除
Marketplace 統一為 jsc(https://gitea.jsc.idv.tw/plugins/jsc.git),安裝 token 為 jsc-hooks@jsc。每個指令一行:
| CLI | 安裝 | 更新 | 移除 |
|---|---|---|---|
| claude | claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && claude plugin install jsc-hooks@jsc |
claude plugin marketplace update jsc && claude plugin update jsc-hooks@jsc |
claude plugin uninstall jsc-hooks@jsc |
| codex | codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && codex plugin add jsc-hooks@jsc |
codex plugin marketplace upgrade jsc |
codex plugin remove jsc-hooks@jsc |
| copilot | copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && copilot plugin install jsc-hooks@jsc |
copilot plugin marketplace update jsc && copilot plugin update jsc-hooks@jsc |
copilot plugin uninstall jsc-hooks@jsc |
| antigravity | git clone https://gitea.jsc.idv.tw/plugins/hooks.git ~/plugins/hooks && agy plugin install ~/plugins/hooks |
git -C ~/plugins/hooks pull && agy plugin uninstall jsc-hooks && agy plugin install ~/plugins/hooks |
agy plugin uninstall jsc-hooks |
| kiro | kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && kiro-cli plugin install jsc-hooks@jsc |
kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-hooks@jsc |
kiro-cli plugin uninstall jsc-hooks@jsc |
antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用
/jsc-cli:deploy。
Hooks
| 腳本 | 事件 | 作用 |
|---|---|---|
hooks/ste100-guard.sh |
UserPromptSubmit | 注入 STE100 繁體中文輸出規則(hook > prompt 強制層) |
hooks/session-timer.sh |
SessionStart / Stop / SessionEnd | 記錄工作階段起訖;report 子指令供 jsc-log:worklog 取花費時間 |
hooks/skill-usage.sh |
PostToolUse(Skill) | 記錄技能使用與呼叫鏈到 $JSC_HOME/usage/*.jsonl,供 jsc-log:stats 統計 |
hooks/sdlc-gate.sh |
UserPromptSubmit | SDLC 每 session 模型鎖:lock/unlock 由 jsc-sdlc 階段技能呼叫,check 在模型與鎖不符時注入拒絕提醒 |
Claude 由 hooks/hooks.json 自動接線;其他 CLI 用 hooks-install 技能接線、改裝包裝啟動器,或降級為規則檔。
工具
| 腳本 | 用途 |
|---|---|
tools/jsc-wrap.sh |
無 hook 系統 CLI 的包裝啟動器:匯出 JSC_CLI、JSC_SESSION_ID,前後接 session-timer.sh,結束時自動跑 scan-logs.sh 回填 |
tools/scan-logs.sh |
離線回填:解析 copilot、antigravity、codex 的原生日誌,把技能用量與階段界線補進 $JSC_HOME,重掃不重複 |
tools/wire-cli.sh |
單一 CLI 的接線流程:{cli} 對應的設定編輯、包裝別名安裝、hook 檔建立,皆以 <!-- jsc-hooks -->(或 # jsc-hooks)標記整段取代,重跑不重複;以 status=wired|degraded|skipped 回報結果 |
失敗回報範本
這兩個模板給外層的 hook 失敗回報流程使用,不改動現有 hook 行為。 失敗時若要寫入 wiki,套用這兩個檔案即可。
| 範本 | 用途 |
|---|---|
templates/error-page.md |
單筆 hook 異常頁 ERROR_{HASH},記錄當次失敗的觸發條件、錯誤摘要與處理結果。 |
templates/error-contents.md |
異常目錄 ERROR_CONTENTS,彙整所有異常頁,方便先看最新問題再往下追。 |
Skills 目錄
呼叫方式:Claude / Antigravity /jsc-hooks:{name};Codex ${name};Copilot / Kiro 描述需求自動觸發。
hooks-install
把四支 hook 接線到所有已安裝的 CLI:偵測 CLI 後,逐一呼叫 tools/wire-cli.sh {cli} 完成接線(claude 由 hooks.json 自動接線,無需寫入)。copilot、antigravity 由該腳本裝上 tools/jsc-wrap.sh 包裝別名補上計時與用量回填(結束時自動跑 tools/scan-logs.sh),語言規則仍追加到各自的規則檔(以 <!-- jsc-hooks --> 標記整段取代,不重複追加)。codex、kiro 的 SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 SDLC 技能直接呼叫 sdlc-gate.sh lock 寫入。腳本以 status=wired|degraded|skipped 回報結果,供技能對照 verify 表。
環境變數
| 變數 | 用途 | 未設定時 |
|---|---|---|
JSC_HOME |
Hook 資料目錄 | 預設 ~/.jsc |
JSC_CLI / JSC_SESSION_ID / JSC_SKILL |
非 Claude CLI 接線時由 tools/jsc-wrap.sh 或接線設定提供 |
安靜降級 |
JSC_MODEL |
非 Claude CLI 的目前模型,供 sdlc-gate.sh check 比對 |
改讀 ~/.claude/settings.json,再不行就安靜降級 |