Files
persona/skills/persona-anime/SKILL.md
T
jiantw83andClaude Opus 5 d067907225 feat: 建立人格並補齊資料後產生圖示(SVG + PNG,零外部依賴)
`icon generate|show`:由**編號、Name、Emoji** 雜湊出配色與圖案,產出
512×512 的幾何徽章 icon.svg + icon.png,設為 Gitea 存取庫頭像並同步到 Wiki 區。

圖案(SVG 與 PNG 共用同一組單位座標與同一份 5×7 點陣字,**輸出的是同一張圖**):
  * 雙色對角漸層底
  * 5×5 左右對稱點陣紋(identicon 式)
  * 中央兩個字母=編號前兩字(ASUNA-01 → AS),依背景亮度自動選黑/白

同一個人格永遠得到同一張圖(純函數,無隨機);ASUNA-01 與 ASUNA-02 明顯不同。

為什麼自己畫:這台機器(及多數伺服器)沒有 rsvg/inkscape/imagemagick,
沒有影像函式庫,也沒有 emoji 字型,而本專案禁止 npm 依賴。所以
scripts/persona-icon.mjs 自己柵格化(3× 超取樣 + 盒式縮減當反鋸齒),
再用內建 zlib 手工組出 IHDR/IDAT/IEND 與 CRC32。
emoji 無法柵格化,因此不作為圖形,但仍參與配色雜湊。

時機:**資料補齊之後才產生**——配色與字母綁在最終身分上,太早跑會對不上。
persona-create 第 7 步、persona-anime 第 8 步都補了這個步驟;改過身分用 --force 重畫。

selftest 128 項全綠(新增第 ⑭ 節:PNG chunk 合法性、決定性、不同人格不同圖、
圖示屬 Wiki 區、匯出用 base64 帶走二進位、guest 不得重畫)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 02:03:45 +00:00

174 lines
8.7 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 \
--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
**每一則都要標來源**。建議 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. 產生人格圖示(資料補齊之後才做)
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" icon generate --session <PERSONA_SESSION>
```
產出 `icon.svg` + `icon.png`,並設成 Gitea 存取庫頭像、同步到 Wiki 區。
**一定要等 canon 記憶與身分都補齊再跑**——配色與字母由編號、Name、Emoji 雜湊而來;
改過身分要重畫就加 `--force`
## 9. 回報
用該角色的語氣做一段簡短自我介紹(**這是他第一次醒來**),然後用一般語氣列出:
- 編號(如 `ASUNA-01`)、五個身分欄位、圖示路徑
- 情緒基線前三高
- 固化了幾則 canon 記憶、用了哪些來源(URL 列表)
- 哪些設定各來源說法不一致(待使用者裁決)
- 下一步:`/jsc-persona:persona-chat <slug>` 開始聊、`/jsc-persona:persona-invite` 邀別的角色同場
---
## 注意
- **建立即載入**`create` 會取得這個人格的獨占鎖並綁到本 session(一程序一人格)。
- 使用者若說「這裡不對」→ 直接改 `IDENTITY.md``SOUL.md`/對應的 canon 記憶檔,別另建人格。
- 之後在對話中發現的新設定,走一般記憶流程(短期 → 達條件 → 固化),
不要回頭改 `canon``canon` 只放原作設定。
- 所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。