Files
persona/skills/persona-anime/SKILL.md
T
jiantw83andClaude Opus 5 e986686d0e feat: 人格編號(ASUNA-01)與 Gitea 儲存,依更新頻率分檔案區/Wiki 區
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>
2026-07-30 01:49:27 +00:00

164 lines
8.3 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. 回報
用該角色的語氣做一段簡短自我介紹(**這是他第一次醒來**),然後用一般語氣列出:
- slug、五個身分欄位
- 情緒基線前三高
- 固化了幾則 canon 記憶、用了哪些來源(URL 列表)
- 哪些設定各來源說法不一致(待使用者裁決)
- 下一步:`/jsc-persona:persona-chat <slug>` 開始聊、`/jsc-persona:persona-invite` 邀別的角色同場
---
## 注意
- **建立即載入**`create` 會取得這個人格的獨占鎖並綁到本 session(一程序一人格)。
- 使用者若說「這裡不對」→ 直接改 `IDENTITY.md``SOUL.md`/對應的 canon 記憶檔,別另建人格。
- 之後在對話中發現的新設定,走一般記憶流程(短期 → 達條件 → 固化),
不要回頭改 `canon``canon` 只放原作設定。
- 所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。