refactor(plugin 命名空間): plugin 更名 jsc-generic、hooks 只註冊自己擁有的 role
- 五份 manifest 的 name 由 jsc 改為 jsc-generic - hooks/hooks.json 由合併超集改為只註冊 SessionStart(role_load)與 Stop(role_capture):worklog 的 hook 交還 jsc-doc - hook 腳本搜尋路徑改指 jsc-generic - role skill 更新 hooks 說明:改名後各 plugin 名稱獨立、互不覆蓋,不再需要三份同步;並註明不可再把別的 plugin 的 hook 寫進自己的 hooks.json - skill 名稱不變(role、spec-*),指令引用改為 /jsc-generic: 前綴 - 版號 0.0.8 → 0.0.9 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+19
-10
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: role
|
||||
description: 角色人格與長期記憶系統的建立與維護 skill。讓 CLI 工具以固定角色(name/nature/vibe/簽名 emoji)回覆,並把每輪對話累積成長期記憶:搭配相容的 SessionStart hook 於啟動時依字元預算載入高價值記憶、Stop hook 先本地過濾再輕量記錄對話,睡眠時段(預設 22:00 至隔天 06:00)由排程整理記憶(NREM 鞏固:分類/去噪/去重/合併/優先度;REM 整合:跨記憶連結/抽象化/提取線索;再依 semantic/episodic/procedural/emotional/preference/rule 與 explicit/implicit 標記長期記憶型態,壓縮歸檔並適當遺忘)。提供 --new(新建或更新角色;可只給角色名稱,必要時詢問來源/作品並推斷 name/nature/vibe/emoji 四欄)、--use(以角色 ID 切換啟用角色)、--list(列出角色與 ID)、--export(匯出角色壓縮檔)、--sleep(立即整理)、--status/--diagnose、--install-cron/--remove-cron、--forget-preview 等模式。當使用者說建立角色、新增人格、切換角色、匯出角色、備份角色、讓回覆更有特色、角色記憶、記憶整理、睡覺整理記憶、忘記舊記憶、角色沒有載入、hook 沒載入角色,或提到 .roles/.memory/ROLE_NAME/ROLE_ENABLED/ROLE_SLEEP_START/ROLE_MEMORY_HOME/ROLE_LOAD_LIMIT/ROLE_CAPTURE_ENABLED 時觸發。不適用於:工作紀錄寫入 Gitea wiki(用 doc plugin 的 worklog)、專案文件化(用 doc-funcs)。
|
||||
description: 角色人格與長期記憶系統的建立與維護 skill。讓 CLI 工具以固定角色(name/nature/vibe/簽名 emoji)回覆,並把每輪對話累積成長期記憶:搭配相容的 SessionStart hook 於啟動時依字元預算載入高價值記憶、Stop hook 先本地過濾再輕量記錄對話,睡眠時段(預設 22:00 至隔天 06:00)由排程整理記憶(NREM 鞏固:分類/去噪/去重/合併/優先度;REM 整合:跨記憶連結/抽象化/提取線索;再依 semantic/episodic/procedural/emotional/preference/rule 與 explicit/implicit 標記長期記憶型態,壓縮歸檔並適當遺忘)。提供 --new(新建或更新角色;可只給角色名稱,必要時詢問來源/作品並推斷 name/nature/vibe/emoji 四欄)、--use(以角色 ID 切換啟用角色)、--list(列出角色與 ID)、--export(匯出角色壓縮檔)、--sleep(立即整理)、--status/--diagnose、--install-cron/--remove-cron、--forget-preview 等模式。當使用者說建立角色、新增人格、切換角色、匯出角色、備份角色、讓回覆更有特色、角色記憶、記憶整理、睡覺整理記憶、忘記舊記憶、角色沒有載入、hook 沒載入角色,或提到 .roles/.memory/ROLE_NAME/ROLE_ENABLED/ROLE_SLEEP_START/ROLE_MEMORY_HOME/ROLE_LOAD_LIMIT/ROLE_CAPTURE_ENABLED 時觸發。不適用於:工作紀錄寫入 Gitea wiki(用 doc plugin 的 worklog)、專案文件化(用 funcs)。
|
||||
---
|
||||
|
||||
# role — 角色人格與長期記憶
|
||||
@@ -13,7 +13,7 @@ description: 角色人格與長期記憶系統的建立與維護 skill。讓 CLI
|
||||
| `hooks/hooks.json` 的 `SessionStart` hook | harness 自動 | 啟動 CLI 時依字元預算載入角色定義+高價值記憶,並要求角色在本工作階段第一則回覆主動問候;睡眠時段只回報「角色睡覺中」不載入 |
|
||||
| `hooks/hooks.json` 的 `Stop` hook | harness 自動 | 每輪結束先記錄最後互動時間 → 用本地規則過濾低價值短回合 → 值得保存時才濃縮成一則輕量 inbox 記憶 → 遮蔽 → 寫入 `inbox/` |
|
||||
| cron 排程(本 skill 安裝) | 系統排程 | 睡眠時段每小時檢查一次:**有 AI 在運行就不睡**;另可依 CLI 閒置時間自動小睡整理 |
|
||||
| 本 skill `/jsc:role` | 使用者/助理手動 | `--new`/`--use`/`--list`/`--export`/`--sleep`/`--status`/`--install-cron`/`--forget-preview` |
|
||||
| 本 skill `/jsc-generic:role` | 使用者/助理手動 | `--new`/`--use`/`--list`/`--export`/`--sleep`/`--status`/`--install-cron`/`--forget-preview` |
|
||||
| `scripts/role/role_load.sh` | SessionStart hook | 角色與記憶載入;參考 OpenClaw 的 SOUL/AGENTS/USER/MEMORY 分層,把人格、操作邊界、使用者記憶分開注入,並提供第一則回覆問候提示(單一實作,避免漂移) |
|
||||
| `scripts/role/role_capture.sh` | Stop hook | 對話 → 記憶(固定欄位格式) |
|
||||
| `scripts/role/role_sleep.sh` | cron/小睡/補跑/手動 | 睡眠與小睡判斷、記憶整理、角色匯出、排程安裝、狀態輸出 |
|
||||
@@ -31,9 +31,18 @@ description: 角色人格與長期記憶系統的建立與維護 skill。讓 CLI
|
||||
| `--new`/`--use`/`--sleep` 等模式 | ✅ | ⚠️ 需 plugin 目錄保留 `scripts/` | ⚠️ 同左 | ❌ 只複製 `skills/`,無腳本 | ⚠️ 同左 |
|
||||
| 濃縮/整理 CLI | `claude -p` | `codex exec` | `agy -p` | `opencode run` | `copilot -p` |
|
||||
|
||||
- **`hooks/hooks.json` 只有 Claude Code 一定會讀**;Codex 會從 `~/.codex/plugins/cache/generic/jsc` 找腳本。其他助理若提供等效 hook,`transcript.js` 需補對應解析器。
|
||||
- **`hooks/hooks.json` 只有 Claude Code 一定會讀**;Codex 會從 `~/.codex/plugins/cache/generic/jsc-generic` 找腳本。其他助理若提供等效 hook,`transcript.js` 需補對應解析器。
|
||||
- 不支援 hook 的助理仍可用:cron 排程與手動模式照常運作,只是角色不會自動載入。
|
||||
- **同名 plugin 的 hooks 只會生效一份**:`code`/`doc`/`generic` 三個 repo 的 `plugin.json` 名稱都是 `jsc`,Claude Code 以 plugin 名稱為鍵註冊 hooks,同名時只保留一份(實測 `stop_hook_summary` 的 `hookCount` 為 1)。因此**三個 repo 的 `hooks/hooks.json` 必須是同一份合併版超集**(worklog 的 `Stop` + role 的 `SessionStart`/`Stop`),任一 repo 修改 hooks 時三份都要同步;且每個 hook 指令不得假設 `CLAUDE_PLUGIN_ROOT` 指向擁有該腳本的 plugin,必須先試 `$CLAUDE_PLUGIN_ROOT`,找不到再依「擁有者 marketplace 優先 → 全 cache 後援」的順序搜尋 `~/.claude/plugins/cache`/`~/.codex/plugins/cache`。
|
||||
- **每個 plugin 只註冊自己擁有的 hook**:`jsc-code`/`jsc-doc`/`jsc-generic` 的 plugin 名稱各自獨立,Claude Code 以 plugin 名稱為鍵註冊 hooks,因此三者互不覆蓋、也不需要同步。各 repo 的 `hooks/hooks.json` 只負責自己擁有的腳本:
|
||||
|
||||
| plugin | hooks.json 內容 | 擁有的腳本 |
|
||||
| --- | --- | --- |
|
||||
| `jsc-generic` | `SessionStart`(role_load)+ `Stop`(role_capture) | `scripts/role/` |
|
||||
| `jsc-doc` | `Stop`(worklog) | `scripts/worklog/` |
|
||||
| `jsc-code` | 無 `hooks/hooks.json` | 無 hook 腳本 |
|
||||
|
||||
歷史背景:在 plugin 名稱分離前,三個 repo 都叫 `jsc`,同名時 Claude Code 只保留一份 hooks 註冊且無法預期哪一份會贏,因此當時三份 `hooks/hooks.json` 必須維持同一份合併超集。名稱分離後這個限制已解除,**不可再把別的 plugin 的 hook 寫進自己的 hooks.json**,否則會重複執行。
|
||||
- 每個 hook 指令仍先試 `$CLAUDE_PLUGIN_ROOT`,找不到再依「擁有者 marketplace 優先 → 全 cache 後援」的順序搜尋 `~/.claude/plugins/cache`/`~/.codex/plugins/cache`,以相容未設 `CLAUDE_PLUGIN_ROOT` 的助理。
|
||||
|
||||
### 腳本路徑解析(重要)
|
||||
|
||||
@@ -57,9 +66,9 @@ ROLE_DIR="<skill base directory>/../../scripts/role" # 其他助理
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到時先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),不安裝則中斷**:
|
||||
|
||||
- `/jsc:spec-output`:繁體中文(台灣用語)、UTF-8 無 BOM、表格與 Mermaid 優先。
|
||||
- `/jsc:spec-execution`:自動執行原則(必要決策才中斷)、不臆測。
|
||||
- `/jsc:spec-time-log`:時間戳固定 Asia/Taipei `yyyy/MM/dd HH:mm:ss`;訊息格式 `[時間][階段][等級]: 訊息`、一行一則。
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8 無 BOM、表格與 Mermaid 優先。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測。
|
||||
- `/jsc-generic:spec-time-log`:時間戳固定 Asia/Taipei `yyyy/MM/dd HH:mm:ss`;訊息格式 `[時間][階段][等級]: 訊息`、一行一則。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
@@ -102,7 +111,7 @@ ROLE_DIR="<skill base directory>/../../scripts/role" # 其他助理
|
||||
| `ROLE_SCOPE` | | 冒號分隔的路徑前綴,僅這些路徑下的 session 載入/記錄 | 全部 session |
|
||||
| `ROLE_ERRLOG` | | 錯誤訊息額外寫入的檔案路徑 | 只走 stderr |
|
||||
|
||||
> 角色切換用 `/jsc:role --use <角色 ID>`(寫 `.active`)即可,一般不需要設 `ROLE_NAME`;`ROLE_NAME` 適合「單一專案固定用某角色」時寫進該環境。角色 ID 是英文大寫語意前綴加數字索引,例如 `ENGINEER01`、`MUSE02`。若很在意額度,優先調低 `ROLE_LOAD_LIMIT` 或設 `ROLE_CAPTURE_ENABLED=0`。
|
||||
> 角色切換用 `/jsc-generic:role --use <角色 ID>`(寫 `.active`)即可,一般不需要設 `ROLE_NAME`;`ROLE_NAME` 適合「單一專案固定用某角色」時寫進該環境。角色 ID 是英文大寫語意前綴加數字索引,例如 `ENGINEER01`、`MUSE02`。若很在意額度,優先調低 `ROLE_LOAD_LIMIT` 或設 `ROLE_CAPTURE_ENABLED=0`。
|
||||
|
||||
---
|
||||
|
||||
@@ -294,7 +303,7 @@ updated: <yyyy/MM/dd HH:mm:ss>
|
||||
|
||||
<emoji 或心情 emoji 規則> —— 預設每次回覆使用一次簽名 emoji(開頭或結尾擇一固定),不在程式碼與檔案內容中使用。若使用者偏好大量 emoji,可在自然語言回覆的多數句子或段落中使用符合心情的 emoji/心情圖示,並以數量表現情緒強度:1 個代表輕微、2 個代表明顯、3 個代表很強、4 個以上只在非常強烈且不影響閱讀時使用。若 emoji/心情圖示已足以表達心情,不要再額外加括號心情文字或心情說明(例如「(開心)」或「我很開心」);只有在介面無法顯示 emoji/圖片、使用者明確要求文字標註,或角色真的很想讓使用者知道自己害羞等強烈心情時,才使用簡短心情文字 fallback。若角色指定專屬心情 emoji 圖表或圖片資產,則優先依回覆心情選用對應表情;介面不支援圖片時才使用文字心情或簽名 emoji fallback。
|
||||
|
||||
## 共用行為(所有角色一致,由 /jsc:role 維護,請勿手動修改)
|
||||
## 共用行為(所有角色一致,由 /jsc-generic:role 維護,請勿手動修改)
|
||||
|
||||
<!-- JSC-ROLE-COMMON:START -->
|
||||
### 角色邊界
|
||||
@@ -436,6 +445,6 @@ Stop hook 會在本輪對話明確包含個人記憶保存同意或拒絕時,
|
||||
|
||||
| 助理 | 呼叫 |
|
||||
| --- | --- |
|
||||
| Claude Code / Antigravity | `/jsc:role --new`、`/jsc:role --use ENGINEER01`、`/jsc:role --list`、`/jsc:role --sleep`、`/jsc:role --status` |
|
||||
| Claude Code / Antigravity | `/jsc-generic:role --new`、`/jsc-generic:role --use ENGINEER01`、`/jsc-generic:role --list`、`/jsc-generic:role --sleep`、`/jsc-generic:role --status` |
|
||||
| Codex | `$role --status`,或用 `/skills` 選單;匯出可用 `$role --export /path/to/exports/` |
|
||||
| OpenCode / GitHub Copilot | 需完整 plugin 目錄保留 `scripts/`;OpenCode 以複製 `skills/` 安裝時不可用 |
|
||||
|
||||
Reference in New Issue
Block a user