Files
persona/skills/persona-anime/SKILL.md
T
jiantw83andClaude Opus 5 2005f26c94 feat: 改寫為 Node.js,新增動漫角色建人格、劇場模式與記憶固化條件
腳本全面從 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>
2026-07-29 16:03:27 +00:00

160 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: persona-anime
description: 用「動漫作品名稱 + 角色名稱」快速建立人格:先上網蒐集該角色的公開設定資料(官方簡介、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. 先確認要建誰
需要**作品名 + 角色名**兩者。缺一就問使用者(同名角色很多,例如「小鳥遊」在好幾部作品都有)。
順便問清楚兩件事,會大幅影響人格品質:
1. **時間點**:要哪個階段的他?(例:初期的天真版 vs 後期的成熟版;某個劇場版之後)
2. **關係設定**:使用者想扮演誰?(原作角色之一/原作沒有的新人物/就是他自己)
先查 slug 有沒有被用掉:
```bash
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. 建立人格
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" create \
--persona <slug> --session <PERSONA_SESSION> \
--name "<Name>" --creature "<Creature>" --vibe "<Vibe>" \
--emoji "<Emoji>" --avatar "<外觀描述>" \
--origin anime --work "<作品名>" \
--baseline "<依角色個性設定的十二情緒基線>"
```
情緒基線抓法(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
**每一則都要標來源**。建議 510 則,寧少而準:
```bash
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. 人際關係圖:把原作人物種進去
```bash
# 原作重要人物(親近度/信任度依原作關係給)
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 無亂碼。