Files
assist/README.md
T
jiantw83 fbf3e5a605 feat(assistant): 助理主體收攏 start、status、stop 三個操作
What:
- 新增 assistant 技能,提供啟動、查現況、停止三個操作。
- 刪掉原本獨立的 status 技能,行為清單與 README 的技能目錄一起改。
- 三份 manifest 的版本一起提升,對 jsc-hooks 的下限提到含心跳腳本的那一版。

Why:
- 助理的生命週期是一件事,拆在兩支技能裡,靠描述自動觸發的 CLI 等於擲骰子挑一支。準則也明寫技能目標不得重複。
- 刪除的代價這時候最低:這個 domain 才剛落地,status 是它唯一一支技能,除了自己的文件沒有別的東西指向它。晚一步等各處都引用了再收攏,成本差很多。

How:
- 心跳的判定一律交給 jsc-hooks 的心跳腳本,三個操作都讀它的回報,不自己解析心跳檔。判定有兩份就會漂移,狀態與訊息就會對不上。
- 那支腳本的每一個結束碼都在技能裡有明確處置,包含「腳本自己沒跑起來」那一種——那時候既不能說助理在跑,也不能說助理停了。
- 時間戳壞掉一律當成不新鮮,絕不退回判成新鮮。
- 異常結束不需要額外的清理機制:心跳是時間戳,過了門檻自動失效。反過來說,stop 以外的任何路徑都不該寫心跳,否則就是留一個假心跳。
- stop 清心跳是它的職責,不算助理界線裡「不刪狀態檔」那一條。技能內文把這個例外寫明白,免得日後照界線把 stop 砍掉。
- stop 的收尾同時講兩件事:心跳清掉之後閘門會擋下技能呼叫,以及閘門目前還沒接線所以這一刻擋不到誰。前者是設計後果,停助理的人一定要知道;後者不講就是說一件還沒成真的事。
- 排程這一輪不做,start 只寫第一次心跳,並講明心跳不會自動更新。

Who:
助理落地的第二塊:心跳有了,接著要有人寫它、讀它、清它。
2026-09-01 14:19:24 +08:00

4.8 KiB
Raw Blame History

jsc-assist — 技能助理

jsc 技能組的 assist domain:技能與 hook 每跑一次就留下事件,助理負責把事件收攏、判斷健康狀態、寫進 wiki 的監控頁(MONITOR_{HASH})。

助理只做三件事:觸發既有技能、巡檢既有的唯讀腳本與狀態檔、把結果提醒給前景會話。它不做決策、不改程式碼、不覆寫 wiki。完整界線見 AGENTS.md 的「助理的界線」。

安裝、更新、移除

Marketplace 統一為 jsc(https://gitea.jsc.idv.tw/plugins/meta.git),安裝 token 為 jsc-assist@jsc。每個指令一行:

CLI 安裝 更新 移除
claude claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && claude plugin install jsc-assist@jsc claude plugin marketplace update jsc && claude plugin update jsc-assist@jsc claude plugin uninstall jsc-assist@jsc
codex codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && codex plugin add jsc-assist@jsc codex plugin marketplace upgrade jsc codex plugin remove jsc-assist@jsc
copilot copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && copilot plugin install jsc-assist@jsc copilot plugin marketplace update jsc && copilot plugin update jsc-assist@jsc copilot plugin uninstall jsc-assist@jsc
antigravity git clone https://gitea.jsc.idv.tw/plugins/assist.git ~/plugins/assist && agy plugin install ~/plugins/assist git -C ~/plugins/assist pull && agy plugin uninstall jsc-assist && agy plugin install ~/plugins/assist agy plugin uninstall jsc-assist
kiro kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && kiro-cli plugin install jsc-assist@jsc kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-assist@jsc kiro-cli plugin uninstall jsc-assist@jsc

antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用 /jsc-cli:deploy。

Skills 目錄

呼叫方式:Claude / Antigravity /jsc-assist:{name};Codex ${name};Copilot / Kiro 描述需求自動觸發。

assistant

助理主體,三個操作:start 啟動、status 查現況、stop 停止。心跳的寫入、判定與清除一律交給 jsc-hooks 的 hooks/heartbeat.sh,判定只有那一份。start 寫下第一次心跳,並講明排程還沒接線、心跳不會自動更新。status 全程唯讀,讀心跳現況與待辦簿,印成一張表;助理沒在跑就印「助理未運行」,不當成錯誤。stop 清掉心跳,並講明心跳清掉之後閘門會擋下技能呼叫、但閘門目前還沒接線。這支不碰 wiki、不參與閘門判定。

相依

Plugin 最低版本 用途
jsc-cli >=0.2.7 CLI 偵測與委派
jsc-gitea >=0.2.0 監控頁的所有 wiki 讀寫,一律經 tools/gitea.sh
jsc-hooks >=0.3.7 心跳、閘門與事件來源($JSC_HOME 底下的狀態檔)。心跳的寫入、判定與清除一律走 hooks/heartbeat.sh,那支腳本是 0.3.7 才有的
jsc-log >=0.1.4 使用統計與工作日誌的資料來源

參考與工具

檔案 用途
references/behaviors.md 本 domain 的技能行為清單:一支技能一節,五列記下觸發時機、關鍵步驟、外部呼叫、完成條件、可驗證跡象,供稽核與驗證比對。格式合約見 plugins/meta 的 references/guidelines.md「技能行為清單」
templates/monitor-contents.md 目錄頁 MONITOR_CONTENTS 的範本。一列代表一台機器,雜湊來源是 {主機名}/{登入帳號}。寫入語意是只更新自己那一列:比對主機與帳號兩欄,別台機器的列原樣保留,禁止整頁覆蓋
templates/monitor-page.md 內容頁 MONITOR_{HASH} 的範本。記的是這台機器的巡檢軌跡。寫入語意與目錄頁相反,是一律附加一節、不覆寫:一次巡檢一節,節標題帶時間戳,既有的節一個字都不動

助理的狀態檔

全部放在 $JSC_HOME/assistant/ 底下,一律純文字 key=value:

路徑 內容
heartbeat 心跳檔,欄位 ts、pid、cli、session。判準只看 ts,不看 pid 存活——五支 CLI 與容器裡的行程互相看不到彼此的 pid
tasks/{id} 待辦簿,一筆一檔。一筆一檔是為了讓並行寫入不互相覆寫

相關 domain

  • jsc-hooks:閘門與心跳,跟 hook 一起裝
  • jsc-gitea:wiki 讀寫的唯一入口
  • jsc-log:使用統計與工作日誌
  • jsc-cli:環境健檢與跨 CLI 委派