## Problem Statement
我每天在終端機裡和 Claude Code 工作。現有的 hud 只顯示系統儀表,助理本身沒有個性、沒有記憶、也不會關心我。我想讓助理成為我喜歡的動漫角色:說話像她、記得我們聊過的事、會隨互動改變心情和親近程度、在我熬夜或連續失敗時主動關心,而且角色的設定要能從我手上的輕小說章節整理出來,不是憑空編造。同時角色資料(原著設定)與我們之間的互動不能混在一起,技術內容(程式碼、指令、警告)也不能被角色語氣扭曲。
## Solution
把 hud 改名為 cockpit,同一個外掛內有兩個模組:原有的系統儀表(hud),以及新的動漫助理(companion)。
- 輸入框上方的 band 變成兩行:第一行維持現有 HUD,第二行是角色行(顏文字、名字、心情、PAD 迷你條、好感階段、待辦數、關心氣泡)。沒有啟用角色時只剩第一行。
- 助理預設為白上吹雪,第一次啟用時自動啟用,可隨時關閉或切換角色。
- 一個 skill 負責解析輕小說章節:抽出時間、地點、環境、用語、人物、對白、獨白,逐一詢問人物要合併、新建或略過,搜尋並更新基本資訊,整理成分層記憶與個性。
- 助理回覆時套用角色語氣;心情由事件與模型回報的標記更新;好感度緩慢變化;事件式的主動關心與待辦清單讓助理主動照顧我。
- 原著記憶與互動記憶分開存放,近期互動逐字保存,累積後壓縮。
## User Stories
1. As a 使用者, I want 外掛改名為 cockpit 且既有 HUD 的外觀與行為完全不變, so that 升級後不用重新適應。
2. As a 使用者, I want 沒有啟用角色時完全看不到角色相關畫面, so that 我可以只當 HUD 用。
3. As a 使用者, I want 保留 `/hud` 指令當別名, so that 我既有的習慣和腳本不會壞掉。
4. As a 使用者, I want 在 HUD 下方多一行角色行, so that 我一眼就能看到角色與心情。
5. As a 使用者, I want 角色行顯示顏文字、名字、心情標籤、PAD 迷你條、好感階段和待辦數, so that 我知道助理現在的狀態。
6. As a 使用者, I want 緊湊模式把角色行縮成「顏文字 名字 心情」, so that 窄終端機也放得下。
7. As a 使用者, I want 終端機太窄時角色行優先捨棄次要資訊而不是換行, so that 版面不會亂掉。
8. As a 使用者, I want 第一次啟用時自動啟用白上吹雪並用 toast 告知如何關閉, so that 我不用先做設定就能體驗。
9. As a 使用者, I want 用 `/cockpit companion off` 關閉助理且保留所有資料, so that 我可以暫時不用再回來。
10. As a 使用者, I want 切換到另一個角色後原角色的資料仍保留, so that 我可以切回來繼續。
11. As a 使用者, I want 同一時間只有一個當前助理, so that 語氣與記憶不會互相污染。
12. As a 使用者, I want `/cockpit status` 展開顯示角色完整資訊(基本資訊、個性、心情、好感、待辦), so that 我能查看細節。
13. As a 使用者, I want `/cockpit setup` 互動式填寫暱稱、作息、時區、關心上限和靜音時段, so that 助理依我的生活習慣運作。
14. As a 使用者, I want 設定檔由所有角色共用, so that 換角色不用重填。
15. As a 使用者, I want 提供一章輕小說的檔案就能解析, so that 不必手動整理設定。
16. As a 使用者, I want 超長章節自動分段處理, so that 不會因為長度而失敗。
17. As a 使用者, I want 解析結果包含時間、地點、環境與用語, so that 世界觀被獨立保存。
18. As a 使用者, I want 世界觀庫由所有角色共用, so that 同一部作品的角色引用同一份設定。
19. As a 使用者, I want 對白與獨白被用來歸納口癖(語尾、口頭禪、稱呼、敬語層級), so that 助理說話像原作角色。
20. As a 使用者, I want 解析出的每個人物逐一詢問「合併 / 新建 / 略過」, so that 我決定誰成為助理。
21. As a 使用者, I want 詢問時看到疑似同一人的理由(名字、別名、特徵), so that 我能做正確判斷。
22. As a 使用者, I want 主要角色先問、路人最後批次詢問, so that 重要的決定不會被淹沒。
23. As a 使用者, I want 重複解析同一章不會重複寫入, so that 我可以放心重跑。
24. As a 使用者, I want 合併時新章節的記憶只追加、不覆蓋, so that 先前的內容不會遺失。
25. As a 使用者, I want 合併時基本資訊衝突逐欄位詢問我, so that 不會被無聲覆寫。
26. As a 使用者, I want 每個記憶帶有章節編號與出現順序, so that 我能追溯來源。
27. As a 使用者, I want 系統搜尋生日、星座、血型、髮型、臉部特徵、身高、體重、三圍, so that 基本資訊完整。
28. As a 使用者, I want 小說原文優先於官方設定、官方設定優先於維基, so that 資料以最可信的來源為準。
29. As a 使用者, I want 每個欄位標註來源與信心度, so that 我知道資料可不可靠。
30. As a 使用者, I want 查不到的欄位標示為 unknown 而不是被猜測, so that 不會出現錯誤的設定。
31. As a 使用者, I want 更新既有值之前先問我, so that 我保有最後決定權。
32. As a 使用者, I want 解析只儲存結構化摘要與簡短對白範例, so that 不會保存整章原文。
33. As a 使用者, I want 記憶分成情節、語意、情感與程序層, so that 結構貼近人腦。
34. As a 使用者, I want 每筆記憶帶有重要度與來源, so that 檢索與遺忘有依據。
35. As a 使用者, I want 檢索時綜合時效、重要度、相關性與情緒吻合度並取前 6 筆, so that 助理想起的是合適的事。
36. As a 使用者, I want 記憶隨時間依重要度與取用次數逐漸淡忘, so that 記憶不會無限膨脹。
37. As a 使用者, I want 重要度累積到門檻或手動執行 `/cockpit reflect` 時進行鞏固與反思, so that 成本可控。
38. As a 使用者, I want 個性以 Big Five 加動漫屬性標籤表示, so that 個性可量化又好懂。
39. As a 使用者, I want 屬性標籤提供先驗、模型推論只能在先驗附近調整, so that 結果不會因推論偏差而失真。
40. As a 使用者, I want 每個個性維度附證據(章節與對白), so that 我能檢查推導。
41. As a 使用者, I want 手動覆寫個性維度且之後不被自動更新, so that 我的修正會被保留。
42. As a 使用者, I want 個性還有「外顯程度」與「內外落差」兩個參數, so that 傲嬌之類的角色被正確表達。
43. As a 使用者, I want 個性核心不隨互動漂移, so that 角色不會崩壞。
44. As a 使用者, I want 心情以愉悅、喚醒、支配三軸表示並對應一個情緒標籤與顏文字, so that 狀態一目了然。
45. As a 使用者, I want 心情依事件表更新, so that 我的稱讚、責備與任務成敗會影響她。
46. As a 使用者, I want 單軸每回合變化上限 ±0.3, so that 單一事件不會把心情拉到極端。
47. As a 使用者, I want 模型在回覆末尾附心情標記並由系統解析後移除, so that 不需要額外的模型呼叫。
48. As a 使用者, I want 標記缺失或格式錯誤時退回關鍵字規則, so that 心情仍會更新。
49. As a 使用者, I want 心情隨真實經過時間往角色的基線衰減, so that 隔天回來她不會還停在昨天的情緒。
50. As a 使用者, I want 衰減在讀取資料時才計算, so that 不用常駐更新。
51. As a 使用者, I want 好感度從 0 開始並隨有意義的互動緩慢上升, so that 關係是慢慢建立的。
52. As a 使用者, I want 好感度每天有增加上限, so that 無法靠洗版快速拉高。
53. As a 使用者, I want 負面事件降低好感度, so that 關係有真實的起伏。
54. As a 使用者, I want 長期離開後好感度緩慢回到中性, so that 關係反映實際相處。
55. As a 使用者, I want 好感分成陌生、熟悉、親近、特別四個階段且切換有遲滯, so that 狀態不會在邊界來回跳動。
56. As a 使用者, I want 好感階段改變稱呼、關心頻率上限與語氣軟硬, so that 關係的變化能被感受到。
57. As a 使用者, I want 助理用我設定的暱稱稱呼我, so that 互動有個人感。
58. As a 使用者, I want 助理回覆的對話文字使用角色語氣, so that 感覺像在和她說話。
59. As a 使用者, I want 程式碼、指令、路徑、錯誤訊息與安全警告保持原樣, so that 技術內容不會被扭曲。
60. As a 使用者, I want 關鍵技術結論放在最前面或單獨一行, so that 不會被角色語氣稀釋。
61. As a 使用者, I want 工具呼叫前後的過場話也使用角色語氣, so that 整體感覺一致。
62. As a 使用者, I want `/cockpit tone off` 暫時關閉語氣, so that 需要純淨輸出時可以切換。
63. As a 使用者, I want 人設注入有固定的 token 上限並在超出時截斷低分項目, so that 不會吃掉過多 context。
64. As a 使用者, I want 穩定內容放在注入內容前面、變動內容放後面, so that 提示快取能維持命中。
65. As a 使用者, I want 與助理的互動記憶只含我的輸入與她的對話回覆, so that 不混入工具輸出。
66. As a 使用者, I want 互動記憶與原著記憶分開存放, so that 兩者不會混淆。
67. As a 使用者, I want 近期互動逐字保存、累積到一定量後壓縮成摘要與關係變化, so that 記憶不會無限增長。
68. As a 使用者, I want 疑似金鑰的字串在寫入前被過濾, so that 敏感資訊不會被存下來。
69. As a 使用者, I want 助理在會話開始、閒置後回來、連續工作 2 小時、深夜、連續工具失敗、額度或 context 快滿、待辦到期時主動關心, so that 她真的在照顧我。
70. As a 使用者, I want 每種關心有冷卻時間與每日總上限, so that 不會被打擾。
71. As a 使用者, I want 模型回覆中或我正在輸入時不彈出關心, so that 不會被打斷。
72. As a 使用者, I want `/cockpit quiet` 靜音, so that 專心工作時不被打擾。
73. As a 使用者, I want 關心的頻率受角色外向性與好感階段影響, so that 不同角色的關心風格不同。
74. As a 使用者, I want 零成本的模板句用 toast 或氣泡即時顯示, so that 關心不消耗模型呼叫。
75. As a 使用者, I want 想關心我的情境在我下次送出訊息時注入, so that 回覆能自然帶出關心而不額外觸發模型回合。
76. As a 使用者, I want 關心措辭不含責備或愧疚勒索, so that 即使嘴硬的角色也不會讓我不舒服。
77. As a 使用者, I want 關心台詞依「觸發類型 × 個性屬性 × 好感階段」變化, so that 風格符合角色。
78. As a 使用者, I want 待辦清單可新增、完成, so that 助理幫我記事。
79. As a 使用者, I want 要求助理記住承諾事項並在時間到時提醒, so that 我不會忘記。
80. As a 使用者, I want 白上吹雪的個性、記憶與口癖表在本機生成而不進 repo, so that 不散佈受版權保護的內容。
81. As a 使用者, I want repo 內只含帶來源的事實欄位, so that 公開部分只有事實。
82. As a 使用者, I want 助理扮演的是角色形象而不是演出者本人, so that 不編造私生活。
83. As a 使用者, I want 檔案寫入是原子的, so that 當機時不會損毀角色資料。
84. As a 開發者, I want 核心行為能在記憶體檔案系統與假時鐘下驗證, so that 測試快速且穩定。
85. As a 開發者, I want 測試用的原創範例角色內嵌在測試中, so that 測試不依賴網路或受版權保護的資料。
## Implementation Decisions
- 外掛從 hud 改名為 cockpit,內含兩個模組:hud(系統儀表,行為維持現狀)與 companion(動漫助理)。保留 git 歷史。atom 的外掛鍵、marketplace 條目與 README 一併更新,不留舊條目。
- 指令為 `/cockpit` 加子指令;`/hud` 保留為別名。
- **companion 核心**是一個獨立模組,對外介面是:使用者回合(記錄輸入、更新心情與好感)、助理回覆(解析心情標記、套用記憶寫入)、tick(依現在時間產生關心、衰減)、套用解析結果(合併 ingest 產生的結構化資料)、組裝注入內容。檔案系統與時鐘由外部注入。mod 層只做薄薄的轉接。
- **資料位置**:使用者家目錄下的 cockpit 資料夾;`user.json` 為共用設定;`world/` 為共用世界觀庫(時間線、地點、用語表);每個角色一個資料夾,內含核心資料(基本資訊與來源、個性、口癖表)、原著記憶(情節、語意、程序)、使用者互動記憶、反思、心情與好感、待辦。原著與互動記憶位於不同資料夾。所有寫入皆為原子寫入。
- **基本資訊欄位**:生日、星座、血型、髮型、臉部特徵、身高、體重、三圍;每欄附來源與信心度,查不到為 unknown。來源優先級:小說原文 > 官方設定 > 維基類。更新既有值前須詢問。
- **記憶**:四層(情節、語意、情感、程序)加反思;每筆含來源、章節編號、出現順序與重要度。檢索分數 = 時效(半衰期 72 小時)、重要度、相關性、情緒吻合度,權重 (1, 1, 2, 0.5),取前 6 筆。遺忘採穩定度曲線,穩定度隨重要度與取用次數成長。鞏固與反思在累積重要度過門檻、會話結束或手動指令時執行。
- **個性**:Big Five 五個維度(0 到 100)加 1 到 2 個動漫屬性標籤(提供先驗向量)、外顯程度、內外落差。模型推論限制在先驗 ±20 內,每個維度附證據。人工覆寫的維度鎖定。核心個性不隨互動漂移。
- **心情**:PAD 三軸(−1 到 1),由八分區對應情緒標籤與顏文字。角色基線來自個性。衰減於讀檔時計算:`x = B + (x − B)·0.5^(Δ/τ)`,心情半衰期起始值 8 小時,情緒 10 分鐘,高神經質角色較長。事件表起始值:道謝或稱讚 (+0.15, +0.05, +0.05);辱罵或責備 (−0.20, +0.15, −0.10);任務成功 (+0.08, +0.03, +0.05);工具連續失敗 (−0.08, +0.10, −0.08);長時間無互動後回來 (+0.10, +0.08, 0);深夜仍在工作 (−0.05, −0.10, 0);提到角色喜歡的事物 (+0.12, +0.08, +0.03);關心被忽略 (−0.05, −0.03, −0.03)。單軸每回合變化上限 ±0.3。
- **心情回報**:模型在回覆末尾附隱藏標記,系統解析後移除;缺失或格式錯誤時退回關鍵字規則。
- **好感度**:範圍 −1 到 1,初始 0。有意義互動 +0.01、每日上限 +0.05;負面事件 −0.03;離開超過 7 天後以 30 天半衰期回到 0。四階段(陌生、熟悉、親近、特別),升階門檻 0.30、降階門檻 0.25。階段影響稱呼、關心頻率上限、語氣軟硬。
- **人設注入**:在送出模型請求前注入 system 區塊尾端,總量約 1500 token(角色卡 400、心情 100、記憶 800、關心情境 200),超出時截斷低分項目。穩定內容在前、變動內容在後。
- **語氣**:對話文字與過場話套用語氣;程式碼、指令、路徑、錯誤、安全警告保持原樣;關鍵結論前置。可用指令暫時關閉。
- **互動記憶**:只含使用者文字輸入與助理對話文字;不存工具輸出與大段程式碼;寫入前過濾疑似金鑰;近期逐字、累積後壓縮為摘要與關係變化。
- **主動關心**:事件式,不依賴 cron。觸發點:會話開始、閒置回來、連續工作 2 小時、23:00 後(可設定)、工具連續失敗、額度或 context 超過既有 HUD 的警告線、待辦到期。每種觸發有冷卻,每天有總上限,模型回覆中或使用者輸入中不彈出,可靜音。輸出分兩種:模板句(toast 或氣泡)與下次送出訊息時注入的情境。關心措辭不得含責備或愧疚勒索。台詞依觸發類型、個性屬性、好感階段分類。
- **band**:兩行。第一行沿用現有 HUD 渲染;第二行為角色行(顏文字、名字、心情、PAD 條、好感階段、待辦數、關心氣泡),沒有啟用角色時不渲染;緊湊模式縮成「顏文字 名字 心情」;寬度不足時依優先序捨棄。
- **小說解析 skill**:由當前 Claude 會話執行;輸入為單章 txt 或 md;產出結構化結果交給 companion 核心的「套用解析結果」入口寫入。冪等以章節編號為鍵。
- **預設角色**:白上吹雪,第一次啟用時自動啟用。repo 內只含帶來源的事實欄位與官方公開的招牌短語;個性、記憶與口癖表在本機以搜尋流程生成,不進 repo。
- **研究待查證項目**:個性轉 PAD 的係數、檢索權重的原始出處、MemGPT 與 Reflexion 的細節,在實作對應功能前需查證並記錄。
- 預覽頁:https://claude.ai/artifact/Vkcj88nQrQzLa54C2vBdE7
## Testing Decisions
- 好的測試只驗證外部可觀察的行為(輸入進去、輸出出來、檔案內容、band 文字),不驗證內部資料結構或呼叫順序。
- 兩個接縫:
1. **companion 核心**:注入記憶體版檔案系統與假時鐘,從公開入口驗證行為,涵蓋心情更新與上限、衰減、好感度增減與階段遲滯、記憶檢索排序與遺忘、冪等解析與合併、關心的冷卻與每日上限與靜音、金鑰過濾、注入內容的 token 預算與截斷、心情標記解析與後備規則。
2. **渲染**:沿用既有 hud 測試對純函式渲染的做法,驗證角色行在各模式、各寬度、各階段的輸出,且沒有角色時第一行與現況逐字相同。
- 不測終端機介面本身,也不測 LLM 的輸出品質。小說解析以範例章節做端到端檢查(人工確認)。
- 測試用原創範例角色內嵌於測試,不隨外掛安裝,不依賴網路。
- 既有範例:hud 的 format 測試(以 `claude-code/testing` 的 describe/test 驗證純函式輸出)。
## Out of Scope
- 同時多個助理輪流發言。
- epub 與整本書一次解析。
- 外部 cron 或推播式的定時關心(預設關閉,以後再評估)。
- 個性隨互動漂移。
- HEXACO 等額外個性模型。
- 在 repo 內發佈任何受版權保護的長篇設定或台詞。
- 扮演演出者本人或涉及其私生活。
## Further Notes
- 里程碑:M0 改名;M1 資料層與角色行;M2 人設注入、語氣、心情標記、互動記憶;M3 小說解析 skill、合併、世界觀庫、個性推導;M4 主動關心、待辦、記憶鞏固與反思。每個里程碑能獨立使用。
- 研究報告的結論中,LLM 從對白推出的個性分數可信度偏低(與標準答案相關最高約 0.27、偏向中間值),因此只當先驗並保留人工覆寫。
- 動漫屬性對應 Big Five 的向量是設計啟發式,不是學術標準。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem Statement
我每天在終端機裡和 Claude Code 工作。現有的 hud 只顯示系統儀表,助理本身沒有個性、沒有記憶、也不會關心我。我想讓助理成為我喜歡的動漫角色:說話像她、記得我們聊過的事、會隨互動改變心情和親近程度、在我熬夜或連續失敗時主動關心,而且角色的設定要能從我手上的輕小說章節整理出來,不是憑空編造。同時角色資料(原著設定)與我們之間的互動不能混在一起,技術內容(程式碼、指令、警告)也不能被角色語氣扭曲。
Solution
把 hud 改名為 cockpit,同一個外掛內有兩個模組:原有的系統儀表(hud),以及新的動漫助理(companion)。
User Stories
/hud指令當別名, so that 我既有的習慣和腳本不會壞掉。/cockpit companion off關閉助理且保留所有資料, so that 我可以暫時不用再回來。/cockpit status展開顯示角色完整資訊(基本資訊、個性、心情、好感、待辦), so that 我能查看細節。/cockpit setup互動式填寫暱稱、作息、時區、關心上限和靜音時段, so that 助理依我的生活習慣運作。/cockpit reflect時進行鞏固與反思, so that 成本可控。/cockpit tone off暫時關閉語氣, so that 需要純淨輸出時可以切換。/cockpit quiet靜音, so that 專心工作時不被打擾。Implementation Decisions
/cockpit加子指令;/hud保留為別名。user.json為共用設定;world/為共用世界觀庫(時間線、地點、用語表);每個角色一個資料夾,內含核心資料(基本資訊與來源、個性、口癖表)、原著記憶(情節、語意、程序)、使用者互動記憶、反思、心情與好感、待辦。原著與互動記憶位於不同資料夾。所有寫入皆為原子寫入。x = B + (x − B)·0.5^(Δ/τ),心情半衰期起始值 8 小時,情緒 10 分鐘,高神經質角色較長。事件表起始值:道謝或稱讚 (+0.15, +0.05, +0.05);辱罵或責備 (−0.20, +0.15, −0.10);任務成功 (+0.08, +0.03, +0.05);工具連續失敗 (−0.08, +0.10, −0.08);長時間無互動後回來 (+0.10, +0.08, 0);深夜仍在工作 (−0.05, −0.10, 0);提到角色喜歡的事物 (+0.12, +0.08, +0.03);關心被忽略 (−0.05, −0.03, −0.03)。單軸每回合變化上限 ±0.3。Testing Decisions
claude-code/testing的 describe/test 驗證純函式輸出)。Out of Scope
Further Notes
底下的議題全部關閉,由 herdr-issue 自動關閉。