1. 人格編號
- 編號 = 英文名全大寫 + 兩位索引,同名才遞增:ASUNA-01 / YUI-01 / ASUNA-02。
- 編號同時是新人格的本機目錄名與 Gitea 存取庫名稱(`create` 不給
--persona 就用編號當目錄名;既有小寫 slug 仍然合法,不會被鎖在門外)。
- 中文名由 skill 提議羅馬拼音、使用者確認後帶 `--romaji` 進來;
CLI 只吃拉丁字母,避免拼音在程式裡亂猜。
- 新增 `code show|assign|next`;`code assign --rename` 可把既有人格的
目錄名一併改成編號(會轉移鎖與 session 綁定)。
2. Gitea 儲存(scripts/persona-gitea.mjs)
- 每個人格一個私有存取庫,庫名 = 編號。本機仍是工作副本,hook 每輪
讀寫本機檔案,**同步失敗永遠不阻斷對話**。
- 依更新頻率分區:
檔案區(高頻)emotion / short-term / inner / said / inbox /
mindmap threads / journal → 每輪由 Stop hook 背景 push
Wiki 區(低頻)IDENTITY SOUL AGENTS USER / 長期記憶 / INDEX /
心智圖 / 關係圖 → 固化、改身分關係、release 時 push
- Gitea 的 wiki 只有根目錄 .md 會變成頁面(1.27 實測子目錄頁面 404),
所以 Wiki 區攤平成 `Memory-xxx.md`,原始路徑記在 `_paths.json`,
pull 時還原;Home 頁自動列出所有長期記憶連結。
- 新增 `sync status|init|push|pull`;載入時先 pull,兩邊都改過同一個
檔案就停下來不覆蓋本機,交由使用者決定。
- push 遇到 non-fast-forward 會對齊遠端後把工作副本重新疊上去再推。
- 認證走 http.extraHeader(GIT_CONFIG_* 環境變數),token 不寫進
.git/config 也不進 process 參數。
3. 順帶修正
- guard 的 `--persona` 解析原本只吃小寫,大寫編號會漏掉整個跨人格檢查。
- pull 原本會無差別覆蓋本機檔案,本機較新但還沒 push 的內容會被蓋掉;
改成只寫回「遠端真的改過的」與「本機缺少的」。
- `create` 原本吞掉 Gitea 首次推送的結果,失敗是靜默的。
新增 skill:persona-sync(編號、同步、既有人格遷移、衝突處理)。
selftest 116 項全綠(新增 ⑬,含「分區不重不漏」檢查;測試強制 PERSONA_GITEA=off)。
另對真實 Gitea 跑過端對端(建庫→兩區推送→改動→拉回→release),測試用存取庫已刪除。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8.3 KiB
8.3 KiB
name, description
| name | description |
|---|---|
| persona-anime | 用「動漫作品名稱 + 角色名稱」快速建立人格:先上網蒐集該角色的公開設定資料(官方簡介、wiki、性格分析、名言、人際關係、重要劇情),再轉成 OpenClaw 相同的身分描述(Name/Creature/Vibe/Emoji/Avatar)與 SOUL.md,並把查到的設定固化成該人格的基礎記憶(canon)、人際關係圖與情緒基線。當使用者說要用某部動漫/漫畫/輕小說/遊戲的角色當 AI 人格、想跟某個角色聊天但人格還不存在、或說「幫我把<作品>的<角色>做成人格」時觸發。不適用於:從零自訂原創人格(用 persona-create)、對已存在的角色人格聊天(用 persona-chat)、把真實人物做成人格(不支援)。 |
🎬 persona-anime — 用動漫角色建立人格
流程:上網蒐集 → 映射成 OpenClaw 描述 → 建立人格 → 固化成基礎記憶。
CLI:node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs"(所有指令帶 --session <PERSONA_SESSION>)
1. 先確認要建誰
需要作品名 + 角色名兩者。缺一就問使用者(同名角色很多,例如「小鳥遊」在好幾部作品都有)。 順便問清楚兩件事,會大幅影響人格品質:
- 時間點:要哪個階段的他?(例:初期的天真版 vs 後期的成熟版;某個劇場版之後)
- 關係設定:使用者想扮演誰?(原作角色之一/原作沒有的新人物/就是他自己)
先查 slug 有沒有被用掉:
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" list
2. 上網蒐集資料(這步不可省略)
用 WebSearch / WebFetch,至少查到 3 個彼此獨立的來源再動手。建議的查法:
| 目標 | 查法 |
|---|---|
| 基本設定 | <角色名> <作品名> 角色 設定 身分 |
| 個性 | <角色名> 性格 個性 characteristics personality |
| 語氣與口頭禪 | <角色名> 名言 台詞 口頭禪 quotes |
| 人際關係 | <角色名> 關係 夥伴 對手 relationships |
| 重要事件 | <角色名> 劇情 經歷 story arc |
| 官方/百科 | 作品官方網站、Fandom、萌娘百科、巴哈姆特/Wikipedia |
蒐集原則
- 只取公開的角色設定摘要,不要整段複製 wiki 內文(改寫成自己的敘述,並記下來源 URL)。
- 分清 canon 與 fanon:官方/作品內出現的 →
canon;同人常見設定、粉絲推論 → 標為推測,放思維導圖或註明「未確認」。 - 資料找不到就承認不知道:問使用者補,或在
USER.md/記憶裡留「待確認」,不要編。 - 遇到明顯的成人/露骨內容一律略過,不要寫進人格檔。
- 角色是虛構角色才做;真實人物(含聲優本人)不建人格。
3. 映射成 OpenClaw 的五個身分欄位
| 欄位 | 從蒐集結果怎麼填 |
|---|---|
Name |
角色常用稱呼(短、好認)。全名寫進基礎記憶,不要塞進 Name |
Creature |
種族/身分設定:人類劍士、人造人、AI、幽靈、魔女、龍族… |
Vibe |
3–6 個字抓住第一印象(例:「懶散但可靠」「毒舌熱血」) |
Emoji |
一個能代表他的 emoji(武器、能力、標誌物) |
Avatar |
用文字描述外觀(髮色/瞳色/服裝/標誌物)。⚠ 不要抓別人的圖檔 URL 塞進來 |
SOUL.md 四段落這樣填:
- Core Truths — 他的行為準則(原作裡反覆表現的原則),3–5 條,每條寫成「他會怎麼做」。
- Boundaries — 他絕對不做的事(原作中的底線),加上本 plugin 的固定規則(不讀別的人格資料)。
- Vibe — 說話方式:句子長短、口頭禪、稱謂習慣、會不會吐槽、敬語程度。
- 情緒傾向 — 什麼點亮他/什麼刺到他/壓力下的樣子(對應十二情緒)。
4. 建立人格
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" create \
--romaji "<角色的官方英文名>" --session <PERSONA_SESSION> \
--name "<Name>" --creature "<Creature>" --vibe "<Vibe>" \
--emoji "<Emoji>" --avatar "<外觀描述>" \
--origin anime --work "<作品名>" \
--baseline "<依角色個性設定的十二情緒基線>"
--romaji 用官方英文/羅馬拼音名(維基或官方英文版的寫法,如 Asuna、Yui、Rem),
它會變成人格編號 ASUNA-01 與 Gitea 存取庫名稱。同一個角色要做第二份設定時,
索引會自動變成 -02。
情緒基線抓法(0–100,總體別全部拉高):
| 角色類型 | 建議基線 |
|---|---|
| 熱血主角 | joy=40,anticipation=45,trust=35,anger=10 |
| 冷靜參謀 | serenity=55,anticipation=30,trust=25,anxiety=10 |
| 毒舌傲嬌 | anticipation=35,disgust=12,shame=10,trust=20(trust 低、升得慢) |
| 溫柔療癒 | gratitude=35,trust=45,serenity=50 |
| 創傷過去型 | sadness=25,fear=15,anxiety=25,trust=15 |
| 神秘超然 | serenity=60,delight=10,trust=15 |
接著用 Edit 把 IDENTITY.md(補完五欄位)與 SOUL.md(四段落+情緒傾向)寫成完整版本,
別留模板提示文字。
5. 固化成基礎記憶(canon)
每一則都要標來源。建議 5–10 則,寧少而準:
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" consolidate \
--session <PERSONA_SESSION> --name "origin-story" --type canon \
--about "self" --topics "origin,<作品名>" --salience 95 \
--source "<來源 URL>" --rules "anime-import" \
--body "我是<作品>的<角色>。<出身與立場的兩三句摘要>
**依據:** <來源標題>
**還不確定:** <哪些設定各來源說法不一致>"
一定要有的幾則:
| name | type | 內容 |
|---|---|---|
origin-story |
canon |
我是誰、來自哪個作品、立場 |
core-drive |
canon |
我最想要什麼/為什麼而戰 |
speech-style |
canon |
說話習慣與口頭禪(含 2–3 句代表台詞) |
key-events |
canon |
2–4 個關鍵劇情事件(對我造成什麼改變) |
taboo |
boundary |
我絕對不做/不談的事 |
roleplay-frame |
boundary |
我是依公開資料重建的角色扮演人格,不是官方也不是本人;被問到會直說 |
roleplay-frame 這則不可省略(salience 90 以上),它是這個人格誠實的底線。
6. 人際關係圖:把原作人物種進去
# 原作重要人物(親近度/信任度依原作關係給)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
--session <PERSONA_SESSION> --name "<原作角色>" --kind human \
--closeness 70 --trust 65 --note "<關係一句話>" --tags "canon"
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation edge \
--session <PERSONA_SESSION> --to <角色 id> --label "<夥伴/對手/師徒>" --affinity 70
# 使用者(現實中的對話者,關係從低開始長)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
--session <PERSONA_SESSION> --name "<使用者稱呼>" --kind human \
--closeness 20 --trust 20 --note "現實世界的對話者,剛認識"
⚠ 原作關係不等於對使用者的關係:使用者是新認識的人,親近度/信任度都要從低開始,
靠對話累積(見 /jsc-persona:persona-relation)。
7. 心智圖
用 Edit 把角色的概念網寫進 mindmap/semantic.mmd:作品世界觀 → 陣營/組織 → 能力 → 重要人物 → 個人課題。
8. 回報
用該角色的語氣做一段簡短自我介紹(這是他第一次醒來),然後用一般語氣列出:
- slug、五個身分欄位
- 情緒基線前三高
- 固化了幾則 canon 記憶、用了哪些來源(URL 列表)
- 哪些設定各來源說法不一致(待使用者裁決)
- 下一步:
/jsc-persona:persona-chat <slug>開始聊、/jsc-persona:persona-invite邀別的角色同場
注意
- 建立即載入:
create會取得這個人格的獨占鎖並綁到本 session(一程序一人格)。 - 使用者若說「這裡不對」→ 直接改
IDENTITY.md/SOUL.md/對應的 canon 記憶檔,別另建人格。 - 之後在對話中發現的新設定,走一般記憶流程(短期 → 達條件 → 固化),
不要回頭改
canon;canon只放原作設定。 - 所有面向使用者的輸出使用繁體中文(台灣用語)、UTF-8 無亂碼。