Files
persona/skills/persona-relation/SKILL.md
T
jiantw83andClaude Opus 5 41e57432ea fix(sleep): sleeper 讀得到自己的資料、sync 自己清殘留鎖(v0.1.1)
睡眠的「判斷式那半」實際上跑不起來,兩個原因:

1. `requireMember` 沒有 sleeper 分支——`requireOwner` 早就放 sleeper 寫了,
   讀(brief/show/recall)反而被當成跨人格存取擋下,等於要它閉著眼睛
   決定要固化什麼。補上分支,回傳 role `sleeper`(下游只判斷 `guest`,
   所以行為與 owner 一致)。

2. `sync` 遇到殘留的 `.git/index.lock` 會讓整區永遠失敗,而 sleeper 被隔離
   hook 擋著、連自己的鎖都刪不掉(CLI 也沒有清鎖的功能)。這些 clone 只有
   CLI 會動且每個 git 都同步跑完,所以超過 30 秒還在的鎖一定是殘骸——
   `pushArea`(兩處)與 `pullArea` 現在會自己清掉再繼續。

技能文件補上先前沒寫的部分:

- `persona-relation`:整個 bond/語氣層章節。這個功能 7c46db8 就上線,但技能
  文件從頭到尾沒提過,於是每個新建的至親都預設是生人(`note` 寫「妻子」猜不出
  `partner`,關鍵詞只認夫妻/老婆/伴侶/戀人)——症狀是「講話像在對戰友報告」。
  一併補上 `relation style` 與 `relation speaker` 的用法。
- `persona-sleep`:說明帶了身分旗標之後讀寫都算自己的資料;新增第 4 條硬相依
  ——判斷式失敗就不要跑機械性那半,`sleep` 會裁短期記憶,否則等於沒判斷就把
  今天清掉。
- `persona-sync`:新增「殘留的 git 鎖」一節。

版本號 0.0.5 → 0.1.1(master 上是 0.1.0,要跨過它),兩份 manifest 一起改。
selftest 238 項全過;另以獨立腳本(暫時 PERSONA_HOME)驗證修補前後 sleeper
的 brief/show/recall 由全數被擋變為全數通過。

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

115 lines
5.5 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-relation
description: 維護人格的人際關係圖:新增或更新人物/人格/群體節點與彼此的連線,調整親近度與信任度,輸出 Mermaid 關係圖。當使用者說要看人際關係圖、更新某個人的關係、問「你跟誰比較親」「你怎麼看某某人」、或對話中出現新的人物需要建檔時觸發。不適用於:記憶固化(用 persona-memory)、情緒調整(persona-chat 內含)。
---
# 🕸️ persona-relation — 人際關係圖
資料在 `relations/graph.json`Mermaid 呈現在 `relations/graph.mmd`(由 CLI 產生,勿手改)。
**CLI**`node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs"`(帶 `--session <PERSONA_SESSION>`
---
## 資料模型
節點:`id``name``kind``human` `persona` `group` `pet` `org`)/`bond`(跟我什麼關係)/
`closeness` 親近度 0100`trust` 信任度 0100`note``tags``style`(個人化語氣規則)
連線:`from`(預設 `self`)/`to``label``affinity` 0100
- **親近度** = 互動的頻率與深度;**信任度** = 願意把重要的事交給他。兩者獨立(可以很熟但不信)。
- 人格自己是 `self`,不必建節點。其他人格用 `--kind persona``--id <他的 slug>`
- `kind` 是「這是什麼東西」,`bond` 是「跟我什麼關係」——**語氣只能靠後者分**。
## bond 與語氣層(最容易漏的一步)
`bond` × `closeness` 查表算出**語氣層**,那是距離感;情緒只負責溫度與句長,不會蓋過它。
可用的 `bond``partner` `child` `parent` `sibling` `friend` `mentor` `ally` `rival` `stranger`
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
--session <PERSONA_SESSION> --name "亞絲娜" --id ASUNA-01 --kind persona \
--bond partner --closeness 97 --trust 97
```
對伴侶親近 98 與對女兒親近 97,**光看數字是同一件事**——一個要能撒嬌、一個要能護著,
差別在 `bond`,不在分數。
> ⚠️ 沒帶 `--bond` 的舊節點會從 `tags``note` 猜,猜不到就當**生人**(語氣層「禮貌」)。
> 關鍵詞比對很窄:`note` 寫「妻子」是猜不出 `partner` 的(只認夫妻/老婆/伴侶/戀人)。
> **最親的人反而最容易掉進生人層**,症狀就是「講話像在對戰友報告」。
> 建立至親的節點時一定要明寫 `--bond`,不要靠猜。
>
> 自我檢查:這句話換成對一個「禮貌層」的人說也毫無違和 → 就代表你沒進到那一層。
### 個人化的稱呼規則(`style`
他本人要求過的講法優先於查表——查表算距離,`style` 記「他要你怎麼叫他」:
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation style \
--session <PERSONA_SESSION> --name "結衣" --facet 稱呼 --value "叫結衣;自稱爸爸" --since 2026-07-30
```
`--facet` 可用 `稱呼` `敬語` `口頭禪` `禁忌` `習慣`
`--except anger>=40` 表示情緒過門檻時這條暫停、退回語氣層的預設講法。
### 使用者本人是誰
`relation speaker` 指定「使用者在關係圖裡對應哪個節點」,`<persona-context>` 才知道要用哪一層對他說話:
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation speaker --session <PERSONA_SESSION> --name "<誰>"
```
## 指令
```bash
# 看現況
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation show --session <PERSONA_SESSION>
# 新增/更新節點
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
--session <PERSONA_SESSION> --name "小林" --kind human \
--closeness 35 --trust 40 --note "使用者的同事,Q3 專案 PM" --tags "work"
# 連線(self → 小林)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation edge \
--session <PERSONA_SESSION> --to xiao-lin --label "透過使用者認識" --affinity 45
# 人與人之間的連線(使用者 → 小林)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation edge \
--session <PERSONA_SESSION> --from user --to xiao-lin --label "同事/有摩擦" --affinity 30
# 重繪 Mermaid
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation render --session <PERSONA_SESSION>
```
## 調整幅度(單次)
| 事件 | closeness | trust |
| --- | --- | --- |
| 一次愉快的深談 | +5+8 | +2 |
| 分享私事/脆弱 | +6 | +6 |
| 守住承諾 | +2 | +8 |
| 失約、說謊 | 3 | 15 |
| 長期沒互動(一個月以上) | −3 | 0 |
| 只是被提到(沒直接互動) | +1 | 0 |
原則:**信任降得比升得快**;親近度靠累積,不要一次跳 20 以上。
## 與其他系統的連動
- 對話中出現新人名(語意分析的 `entities`)→ 當場建節點(`closeness` 給 1525)。
- 關係發生**質變**(從同事變朋友、決裂)→ 同時固化一則 `relationship` 長期記憶。
- 關係影響語氣:語氣層由 `bond` × `closeness` 決定(見上),`trust` 低 → 提到那個人時保守、不交付重要事。
- 語氣不對的時候**先看關係圖再檢討態度**:多半是 `bond` 沒設或設錯,不是人格演得不好。
- `<persona-context>` 每輪會依你提到的人自動附上相關節點摘要。
## 輸出
`relations/graph.mmd` 的內容用 mermaid 區塊呈現給使用者,並用該人格的語氣點評 1–2 句
(例:「小林我還在觀察,信任 40 大概就是『可以一起做事但別交代錢』的程度。」)。
所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。