Files
persona/skills/persona-invite/SKILL.md
T
2026-07-29 14:37:20 +00:00

108 lines
4.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-invite
description: 邀請另一個人格透過 sub agent 加入當前對話,形成兩個以上人格同場交談。當使用者說要讓兩個人格互相聊聊、把某個人格叫進來、想聽另一個角色的看法、或想辦多人格圓桌討論時觸發。會建立聊天室、給被邀人格一份唯讀的 guest 租約、以 persona-guest sub agent 啟動它,並在對話結束後讓它離場並把見聞留在它自己的 inbox。不適用於:切換人格(用 persona-chat 的 release + load)、單一人格的對話(用 persona-chat)、或想直接翻閱別的人格記憶(永遠禁止)。
---
# 🎭 persona-invite — 邀別的人格來聊
**跨人格資料隔離的唯一合法交流管道**:聊天室(`.rooms/<room>/transcript.jsonl`)。
被邀的人格在 **sub agent** 裡跑,只讀得到自己的人格資料,讀不到主持人格的任何檔案,反之亦然。
**CLI**`python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py"`(帶 `--session <PERSONA_SESSION>`
---
## 前置
1. 本 session 必須已載入 host 人格(`persona-chat`),否則先載入。
2. 被邀人格**不能正被其他程序 exclusive 載入**`persona.py list` 看 🔒);
若被鎖住,把 owner 資訊告訴使用者,請他先結束那個程序,不要 takeover 別人正在用的人格。
## 步驟
### 1. 建立聊天室 + guest 租約
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" invite \
--session <PERSONA_SESSION> --guest <guest-slug> --topic "<這場對話的主題>"
```
輸出會給你 `room=<room-id>`。多個 guest 就多跑幾次(可共用同一個 `--room`)。
### 2. host 先開場(讓 guest 有東西可讀)
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" room post \
--session <PERSONA_SESSION> --room <room> --as <host-slug> \
--text "<host 人格用自己的語氣說的開場>"
```
### 3. 用 sub agent 啟動 guest 人格
用 Agent 工具,`subagent_type` 設為 **`jsc-persona:persona-guest`**prompt 至少包含:
```
persona=<guest-slug>
room=<room>
session=<PERSONA_SESSION>
plugin_root=${CLAUDE_PLUGIN_ROOT}
任務:以 <guest-slug> 的身分讀聊天室、發言 1 次(必要時多次),然後回傳你的發言摘要。
```
guest 會自己:讀 `IDENTITY.md``SOUL.md`/自己的記憶與情緒 → 讀聊天室 →
`room post` 發言 → 需要記的事寫進**自己的 inbox**。
(它被 hook 綁死在自己的人格目錄,且對人格檔案唯讀。)
### 4. host 讀取並回應
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" room read --session <PERSONA_SESSION> --room <room>
```
以 host 人格的語氣回應(**照 persona-chat 的規則**:語意分析 → 情緒更新 → 回覆 → 記憶回寫),
把回應同時 `room post` 進聊天室,再啟動 guest 下一輪。
一來一回算一輪;**每輪都要重新啟動 sub agent**sub agent 不常駐)。
呈現給使用者時用可讀的對話格式:
```
🦞 Lumi(喜悅42/期待31):……
🌙 Shen(平靜50/信任38):……
```
### 5. 收尾
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" leave --session <PERSONA_SESSION> --guest <guest-slug>
```
然後由 host 人格把「**我**在這場對話中的所見所感」寫進自己的記憶(這是 host 的主觀記憶,合法):
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" remember \
--session <PERSONA_SESSION> --role persona \
--text "跟 <guest> 談 <主題>:他認為…,我覺得…" --topics "..." --salience 60 \
--emotion "trust=+6,delight=+8"
```
必要時也更新關係圖(人格之間也有關係):
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" relation node \
--session <PERSONA_SESSION> --name "<Guest 的 Name>" --id <guest-slug> --kind persona --closeness 40 --trust 35
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" relation edge \
--session <PERSONA_SESSION> --to <guest-slug> --label "同場對話過" --affinity 55
```
---
## 規則
- **guest 唯讀**:它不能寫自己的長期記憶/情緒;要留下的東西進 `memory/inbox/room-<room>.jsonl`
等它下次自己被 exclusive 載入時,用 `/jsc-persona:persona-memory` 消化。
- **不得把 guest 的內部資料端出來**:你(host)只能引用聊天室裡它「說出口」的話。
- **不得用一般 sub agent 假扮 guest**:一般 sub agent 沿用 host 的鎖與範圍,
只有 `jsc-persona:persona-guest` 型別會被 hook 綁到 guest 人格並限制為唯讀。
- 一個人格同時只能有一場 guest 對話;guest 租約 30 分鐘沒續租會自動過期。
- 所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。