feat: jsc-persona — AI 人格化記憶聊天(OpenClaw 人格描述 + 十二情緒 + 記憶固化 + 劇場模式) #1

Merged
admin merged 2 commits from develop into master 2026-07-29 16:04:44 +00:00
Member

jsc-persona(AI 人格化記憶聊天 plugin)從 template 骨架完成到可用版本,並在此輪改寫為 Node.js。

這個 plugin 做什麼

OpenClaw 相同的人格描述IDENTITY.md 五欄位 + SOUL.md 四段落)建立人格,用 hook 強制的人格鎖與跨人格隔離,把 十二情緒(六正向+六負向)語意分析短期/長期記憶心智圖/思維導圖人際關係圖 綁在一起。

七條硬規則怎麼落實

規則 實作
1a. OpenClaw 相同的人格描述 persona-create 逐項索取 Name/Creature/Vibe/Emoji/Avatar(括號提示文字照原文),SOUL 沿用 Core Truths/Boundaries/Vibe/Continuity
1b. 動漫作品+角色名建人格 persona-anime:上網蒐集至少 3 個獨立來源 → 映射成上述欄位 → 固化成 canon 基礎記憶(附來源 URL)+原作關係圖+情緒基線
2. 一人格只能被一個程序載入(sub agent 不限) state/lock.json 以 session_id 為主鍵 + 15 分鐘心跳租約;同 session 的 sub agent 沿用同一把鎖,跨 session 搶佔被拒,租約過期才可接手且強制回報
3. 禁止跨人格讀取資料 PreToolUse hook 對 Read/Write/Edit/Glob/Grep/Bash 做路徑判定(../、symlink、$PERSONA_HOME 繞路都擋),CLI 另驗 --session 防冒用
4. 邀請人格用 sub agent 一起聊,只顯示對話 persona-invite + persona-guest sub agent + 聊天室;劇場模式下 hook 每輪強制「只輸出 名字:內容」、Stop hook 靜音,CLI 有 --quietroom script
5. 腳本用 Node.js scripts/*.mjshooks/*.mjs,ESM、只用內建模組,零 npm 依賴
6. 由使用者呼叫才載入並鎖定 SessionStart hook 只列出可用人格;載入即取獨占鎖並綁定該 session
7. 短期記憶轉長期有條件 R1R6 寫在 promotionCandidates()candidates 子指令列出達標候選與依據,hook 達標時提醒

內容

  • 6 個 skillspersona-createpersona-animepersona-chatpersona-invitepersona-memorypersona-relationpersona-status
  • 1 個 agentpersona-guest(受邀人格,唯讀、綁死在自己的人格目錄)
  • 6 個 hooksSessionStartUserPromptSubmitPreToolUseStopSubagentStopSessionEnd
  • CLIscripts/persona.mjs(人格、記憶、情緒、心智圖、關係圖、聊天室、鎖管理)
  • 人格資料存在 ~/.claude/personas/PERSONA_HOME 可覆寫),不在 repo 內

驗證

node scripts/selftest.mjs   → 通過 68 項,失敗 0 項 ✅
claude plugin validate .    → Validation passed ✅

涵蓋:鎖語意(重入/搶佔/死鎖接手)、隔離繞路(..//symlink/變數/倉庫根目錄/.runtime/假 session/主程序偷讀 guest 記憶)、情緒衰減數學、記憶固化條件 R1–R6、劇場模式輸出格式與靜音、六個 hook 的實際輸出。

注意事項

  • 需要 Node.js ≥ 18
  • 安裝後重啟工作階段六個 hook 才生效,可用 /hooks 確認。
  • 沒有 hook 的助理(Codex/Antigravity/OpenCode)只有 CLI 層的自律檢查,真正的 deny 只有 Claude Code 做得到。

🤖 Generated with Claude Code

把 `jsc-persona`(AI 人格化記憶聊天 plugin)從 template 骨架完成到可用版本,並在此輪改寫為 Node.js。 ## 這個 plugin 做什麼 以 **OpenClaw 相同的人格描述**(`IDENTITY.md` 五欄位 + `SOUL.md` 四段落)建立人格,用 **hook 強制**的人格鎖與跨人格隔離,把 **十二情緒(六正向+六負向)**、**語意分析**、**短期/長期記憶**、**心智圖/思維導圖**、**人際關係圖** 綁在一起。 ## 七條硬規則怎麼落實 | 規則 | 實作 | | --- | --- | | 1a. OpenClaw 相同的人格描述 | `persona-create` 逐項索取 `Name`/`Creature`/`Vibe`/`Emoji`/`Avatar`(括號提示文字照原文),SOUL 沿用 `Core Truths`/`Boundaries`/`Vibe`/`Continuity` | | 1b. 動漫作品+角色名建人格 | `persona-anime`:上網蒐集至少 3 個獨立來源 → 映射成上述欄位 → 固化成 `canon` 基礎記憶(附來源 URL)+原作關係圖+情緒基線 | | 2. 一人格只能被一個程序載入(sub agent 不限) | `state/lock.json` 以 session_id 為主鍵 + 15 分鐘心跳租約;同 session 的 sub agent 沿用同一把鎖,跨 session 搶佔被拒,租約過期才可接手且強制回報 | | 3. 禁止跨人格讀取資料 | `PreToolUse` hook 對 Read/Write/Edit/Glob/Grep/Bash 做路徑判定(`../`、symlink、`$PERSONA_HOME` 繞路都擋),CLI 另驗 `--session` 防冒用 | | 4. 邀請人格用 sub agent 一起聊,只顯示對話 | `persona-invite` + `persona-guest` sub agent + 聊天室;**劇場模式**下 hook 每輪強制「只輸出 `名字:內容`」、`Stop` hook 靜音,CLI 有 `--quiet` 與 `room script` | | 5. 腳本用 Node.js | `scripts/*.mjs`、`hooks/*.mjs`,ESM、只用內建模組,零 npm 依賴 | | 6. 由使用者呼叫才載入並鎖定 | `SessionStart` hook 只列出可用人格;載入即取獨占鎖並綁定該 session | | 7. 短期記憶轉長期有條件 | `R1`–`R6` 寫在 `promotionCandidates()`,`candidates` 子指令列出達標候選與依據,hook 達標時提醒 | ## 內容 - **6 個 skills**:`persona-create`/`persona-anime`/`persona-chat`/`persona-invite`/`persona-memory`/`persona-relation`/`persona-status` - **1 個 agent**:`persona-guest`(受邀人格,唯讀、綁死在自己的人格目錄) - **6 個 hooks**:`SessionStart`/`UserPromptSubmit`/`PreToolUse`/`Stop`/`SubagentStop`/`SessionEnd` - **CLI**:`scripts/persona.mjs`(人格、記憶、情緒、心智圖、關係圖、聊天室、鎖管理) - 人格資料存在 `~/.claude/personas/`(`PERSONA_HOME` 可覆寫),不在 repo 內 ## 驗證 ``` node scripts/selftest.mjs → 通過 68 項,失敗 0 項 ✅ claude plugin validate . → Validation passed ✅ ``` 涵蓋:鎖語意(重入/搶佔/死鎖接手)、隔離繞路(`../`/symlink/變數/倉庫根目錄/`.runtime`/假 session/主程序偷讀 guest 記憶)、情緒衰減數學、記憶固化條件 R1–R6、劇場模式輸出格式與靜音、六個 hook 的實際輸出。 ## 注意事項 - 需要 **Node.js ≥ 18**。 - 安裝後**重啟工作階段**六個 hook 才生效,可用 `/hooks` 確認。 - 沒有 hook 的助理(Codex/Antigravity/OpenCode)只有 CLI 層的自律檢查,真正的 deny 只有 Claude Code 做得到。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 2 commits 2026-07-29 16:04:02 +00:00
腳本全面從 Python 改寫為 Node.js(ESM,只用內建模組,無 npm 依賴):
scripts/persona-lib.mjs(核心)、scripts/persona.mjs(CLI)、hooks/*.mjs(六個
hook)、scripts/selftest.mjs(68 項自我測試,全綠)。

新增:
- persona-anime skill:用「動漫作品+角色名」建立人格,先上網蒐集至少三個獨立
  來源的公開設定,映射成 OpenClaw 的 IDENTITY 五欄位與 SOUL 四段落,再固化成
  canon 基礎記憶(每則帶來源 URL)+原作人際關係圖+依角色型別的情緒基線;
  必寫 roleplay-frame 界線記憶(非官方、非本人)。
- 劇場模式:invite 後只顯示人格對話(`名字:內容`)。UserPromptSubmit hook 每輪
  注入強制規則、Stop hook 完全靜音,CLI 新增 --quiet 與 room script(乾淨對話稿)。
  leave 後沒客人自動關閉,也可用 room theater --on/--off 手動切換。
- 短期→長期記憶的成文轉入條件 R1–R6(promotionCandidates)與 candidates 子指令,
  hook 在達標時提醒固化;長期記憶新增 canon 型別與 rules 欄位。
- 人格改為「由使用者呼叫才載入」:SessionStart hook 只列出可用人格,不自動附身。

其他:版本號改回 0.0.1;README/AGENTS.md 同步更新。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
admin approved these changes 2026-07-29 16:04:40 +00:00
admin merged commit 09c3b185bc into master 2026-07-29 16:04:44 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/persona#1