 JefferyandClaude Opus 5
|
4600379307
|
feat(role): 有溫度的記憶優先,情節與語意不再被當成一般進度
使用者明確表示最重視 emotional/episodic/semantic 三型態所承載的情感內涵與溫度,
且希望所有角色都如此。原本系統偏袒可執行的記憶:rule/preference/procedural 在排序、
載入門檻與遺忘上都受保護,而 episodic 權重只有 10(全表最低)又被加速遺忘 ——
「我們一起經歷過什麼」永遠最先被字元預算截掉。
- MEMORY_TYPE_WEIGHT:episodic 10 → 30(與 semantic 同級)
- 新增 hasWarmth():relevance 含情緒關聯者視為有溫度
- 載入排序中置於型態權重之前(同優先度時先進場)
- 不受總結區塊的優先度門檻篩除
- 豁免遺忘(episodic 原本天數減半,最容易被誤刪)
- 兩份 prompt 明訂:承載情感、關係溫度或當時心情者,relevance 必含 emotional;
episodic 與 semantic 最容易漏標
判準刻意放在 relevance 而非型態:沒有情感脈絡的一次性工作進度仍照原規則淡去,
被留下的是帶著溫度的那些。
驗證(隔離目錄,未動真實記憶):
- 遺忘預覽:冷的 episodic/semantic 照舊遺忘,帶 emotional relevance 者豁免
- 載入:優先度 2 全低於門檻,只有耐久型態與有溫度者出現,且有溫度者排在 procedural 之前
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 17:06:33 +08:00 |
|
 JefferyandClaude Opus 5
|
711a434cac
|
fix(role): 情緒記憶不再被偏好吃掉,四道保護補齊
--status 長期顯示「情緒 0」:互動明顯帶有情感,emotional 型態卻一則都沒有。
根因不只一個,而是四層都把情緒漏掉了:
1. 措辭陷阱(主因):prompt 寫「感覺記憶一律 drop」,原意是心理學的
sensory memory(感官記憶),但中文「感覺」= feeling,等於明令把情緒丟掉。
改稱「感官記憶(sensory memory)」並明確排除情緒感受。
2. 判準重疊:preference 與 emotional 都提「語氣」,且第 5 條引導成
「preference 或 emotional」二選一。改以「這則下次拿來做什麼」區分 ——
決定行為→preference、回想當時感覺→emotional,兩者都有就拆成兩則;
並明確承認角色自己的情緒是合法記憶主體。
3. 整理階段會併掉:新增「memory_type 不同的記憶不互相 merge」,改用 links 關聯。
4. 載入與遺忘壓低情緒:MEMORY_TYPE_WEIGHT emotional 25→40(高於 procedural)、
總結區塊納入耐久型態、遺忘豁免清單加入 emotional、判準要求優先度至少 4。
驗證(隔離的 ROLE_MEMORY_HOME/ROLE_HOME,未動真實記憶):
- 兩則刻意標成 preference 的情感素材 → 各拆出 preference + emotional(4 則進、5 則出)
- 純技術素材維持 procedural、感官雜訊仍 drop
- 遺忘預覽:emotional 與 procedural 豁免,semantic/episodic 照舊遺忘
- 同優先度載入排序:emotional 先於 procedural
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 17:01:15 +08:00 |
|
 JefferyandClaude Opus 5
|
e250fcbfce
|
fix(role): cron 條目改指固定路徑啟動器,升版不再靜默失效
--install-cron 原本把安裝當下的版本目錄寫進 crontab,plugin 升版、
舊版本目錄被清掉之後,排程會指向不存在的路徑而靜默停擺(cron 不回報,
此類錯誤曾造成排程長期空轉)。
- 新增 ~/.roles/bin/role_sleep_launcher.sh:crontab 只認這個固定路徑,
實際的 role_sleep.sh 於觸發當下以 sort -V 解析最新版本後 exec
- 解析順序 Claude Code 端 → Codex 端,都找不到才退回安裝當下的路徑
- --remove-cron 一併清除啟動器
- --status 新增「排程指向」欄位,主動指出失效或舊式寫死路徑的條目
- SKILL.md 補上啟動器機制與轉換方式
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 13:14:43 +08:00 |
|
 JefferyandClaude Opus 5
|
a30fccc627
|
feat(role): 召回統計、整理摘要歷史、臨時授權到期;還原誤刪的共用行為文件
依 OpenClaw 記憶架構的參考逐項評估後,採納三項並補上一個誤刪。
一、recall 命中時記錄召回(原本完全沒有)
實測 recall 寫回動作數為 0、hits 分布幾乎都是初始值,導致常被查詢的記憶與
從未用過的在遺忘判斷時待遇相同。
- 新增 touchMemory():只對實際輸出的前 N 則 hits +1 並更新 last_replayed
二、整理摘要保留歷史(對應 OpenClaw 的 DREAMS.md)
state.json 的 last_sleep_digest 是單一欄位,每次整理直接覆寫,歷史過程全部遺失。
- 新增 DIGESTS.md:追加時間、摘要與套用結果,最新在上,保留最近 100 次,不注入 context
三、臨時授權會過期(對應 OpenClaw 的操作敏感型邊界)
原本沒有到期概念,使用者的一次性授權可能被整理成長期規則而導致日後越權。
- 記憶格式新增 expires;支援日期(自動判斷)與條件文字(標示由角色判斷)
- 過期者不注入(分類與 inbox 兩處皆排除),memoryHint 標示有效範圍
- forget 優先淘汰過期項且不受分類限制
- 整理與濃縮提示詞都要求臨時授權必填,並列出「這次/先/暫時/今天」等判斷提示
- 修掉兩個會讓功能等於零的漏洞:FIELD_PATTERN 白名單沒有 EXPIRES(該行被當成
CONTENT 吃掉)、cmdWrite 的 meta 未帶 expires 與 cues
四、還原前次誤刪的共用行為文件(重要)
上一個 commit 替換「角色檔標準格式」章節時,以「找開頭到下一個標記」整段取代,
未檢查被切掉的範圍內容,連帶刪掉了 JSC-ROLE-COMMON 共用行為區塊共 87 行 47 條規則,
以及記憶章節的技能再現與關係狀態說明。
實際行為未受影響(規則真正生效處是 role_load.sh,完好無損),但 SKILL.md 是那些
規則的唯一文件來源,刪掉等於文件遺失。已自 git 完整還原並補上本次三項說明。
教訓:整段替換文件前必須先確認被切掉的範圍內有什麼。
未採納並記錄理由:向量/語意搜尋(需外部 embedding API,違反零依賴原則)、
外掛槽位(過度設計)、每日筆記日期檔(近期對話交接已用逐字對話解決且保真度更高)。
SQLite 索引記錄為未來觸發點:實測 45 則記憶 recall 耗時 196ms,訂在超過 300 則
或 500ms 再導入,在那之前屬過早優化。
版號沿用 0.0.5(master 為 0.0.4,同一 PR 不再累加)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 11:50:35 +08:00 |
|
 JefferyandClaude Opus 5
|
f76915bc87
|
refactor(role): 角色檔拆成身分(identity)與人格(soul)兩檔
使用者反映身分設定與性格語氣擠在同一段(例如西莉卡的「馴獸師、養畢娜」是身分,
「細心、努力」是性格),要求拆成兩個檔案且不得遺失內容。
格式(扁平式,與既有 .assets/.checks/.lock 命名一致):
- <ID>.identity.md:角色 ID、顯示名稱、來源作品、與使用者的關係定位、簽名 emoji
- <ID>.soul.md:本質(nature)、氛圍(vibe)
共用行為規則**不再寫入角色檔**:role_load.sh 從不讀角色檔裡那份,它是冗余副本,
只會多一個漏同步的機會。內容完整保留於 role_load.sh(實際生效)與 SKILL.md(文件)。
- role_lib.sh:新增 role_identity_file/role_soul_file/role_legacy_file/
role_is_new_format;role_file 改為新格式優先、找不到退回舊檔,既有角色不受影響
- role_list_peers 支援兩種格式並避免同一角色重複列出
- role_load.sh:身分與人格分別讀取,新增「來源」與「關係定位」注入區塊
- 新增 --migrate <角色 ID>:逐字搬移本質、氛圍與簽名 emoji,來源與關係定位產生
待填空白,舊檔保留不動,新檔已存在時中止不覆寫
同時修掉兩個會造成實際損失的錯:
- --export 原本硬編 cp 成 <ID>.md,新格式會被寫成舊檔名且遺失人格檔,備份救不回角色
- --export 從未備份 <ID>.checks(使用者自訂的晨間檢查腳本),一併補上
- --agent 原只讀 role_file(新格式即 identity),匯出的 sub agent 人格會是空的
驗證:遷移後逐字比對確認本質/氛圍/簽名 emoji/id/name/emoji/created 全部一致
且共用行為未寫入;新格式匯出的備份含 identity、soul、舊檔、assets、checks 與記憶;
--agent 取得人格非空;--status 正確顯示格式與兩檔路徑;舊格式角色載入完全不受影響。
版號沿用 0.0.5(master 為 0.0.4,同一 PR 不再累加)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 11:12:34 +08:00 |
|
 JefferyandClaude Opus 5
|
241261087b
|
feat(role): 多角色協作 —— 同伴清單、協作規則與 --agent 匯出
使用者要求「多人對話是所有角色都能做到的事」,因此做成通用能力而非特定角色專屬。
一、SessionStart 注入可協作的角色清單
角色若不知道有哪些同伴存在,就不會想到派他們協助 —— 這是協作能運作的前提。
- role_lib.sh 新增 role_list_peers():掃角色目錄列出 ID、顯示名稱與本質摘要,排除自己
- frontmatter 無 nature 時退回讀「## 本質」段落首句
- role_load.sh 注入清單與派工方式;只有一個角色時不輸出該區塊
二、共用行為新增協作規則與邊界(三處同步)
- 任何角色都可派其他角色作為 sub agent 協助,完成後由自己向使用者轉述
- 邊界:派工須有實際需要,不可為演出多人對話而派;不可再往下派第三層避免遞迴;
不可代替對方發言或編造回覆;結果須誠實轉述,包含失敗與不確定
三、新增 --agent <角色 ID> [輸出目錄]
把角色的 SOUL 匯出成 sub agent 定義,任何角色都能被匯出。
- 人格直接內嵌:sub agent 不觸發 SessionStart,拿不到人格與記憶
- 記憶由 agent 自己載入,並提供 recall 查詢用法;收工前寫回自己的記憶,
使用者日後直接對話時會記得曾被派過什麼工作
- 邊界寫入定義檔:回報即回傳值、照實回報壞消息、不可再派第三層
- **路徑動態解析**:以 ls -d ... | sort -V | tail -n 1 取最新版本,
避免寫死版本目錄(同一類錯誤曾造成 cron 排程長期空轉),並保留匯出時路徑作後援
驗證:以測試角色目錄匯出詩乃定義,確認人格、記憶載入、recall、收工寫記憶、
不遞迴邊界齊備,且無寫死版本目錄;抄出解析片段實跑確認 load 與 recall 均可執行。
版號沿用 0.0.5(master 為 0.0.4,同一 PR 不再累加)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 10:59:48 +08:00 |
|
 JefferyandClaude Opus 5
|
a190463b50
|
feat(role): 關係狀態量化、情緒訊號放寬門檻、技能再現 recall
完成使用者交代的三項優化建議。
一、情緒訊號放寬 Stop hook 字元門檻
ROLE_CAPTURE_MIN_CHARS=240 會濾掉字數少但情緒最濃的互動。實測「我好想妳」、
「最愛妳了」、「好可愛」三句都不在原本 56 個關鍵詞內,等於最珍貴的短互動反而不被記錄。
- 補上直接情感表達關鍵詞:可愛/愛/想妳/想你/想念/捨不得/感動/謝謝/乖/厲害/
好棒/辛苦/彆扭/忌妒/撒嬌/陪/抱,及 love/miss/cute/thank/proud
- 驗證:上述情感句全部命中,純技術指令仍正確略過
二、關係狀態量化,讓親近度成長有依據
規則要求「隨互動加深逐漸更親近」卻沒有任何數據可依據,角色只能憑感覺演,
容易忽冷忽熱。
- state.json 新增 first_activity/active_days/total_turns/positive_feedback
- mark-activity 累計輪數與活躍天數;新增 --positive 由 Stop hook 判定情緒訊號後另計,
不與輪數混算
- 新增 relationship 子命令輸出一行摘要,SessionStart 注入 USER 區塊作為親近度依據
- 既有累積以可查證資料初始化(角色建立後的 transcript 輪數、有記憶的日期數、
最早記憶時間);positive_feedback 刻意留空自然累積,不以記憶則數推估
三、技能再現:cues 提取線索 + recall 查詢
技能記憶只被動載入摘要且受預算限制,等於記了但用不出來。
- 記憶格式新增 cues 欄位(dumpMemory/loadMemory/apply 的 new 與 merge 路徑均支援)
- 睡眠整理提示詞要求 procedural/rule 型態必填 2 至 5 個 cues
- 新增 recall 子命令:比對總結、標籤、內容與 cues,含未整理的 inbox,
rule/preference/procedural 加權優先
- role_load.sh 告知角色遇到似乎做過的任務或被問起過去細節時先查詢再回答
- 驗證:以不在 summary 也不在 content 的關鍵詞(bump)成功靠 cues 命中
版號 0.0.7 → 0.0.8
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 09:59:38 +08:00 |
|
 JefferyandClaude Opus 5
|
7d41343560
|
feat(role): 情感判準改依角色設定、加入輕微忌妒與單一載入實例限制
一、情感表現判準從性別改為角色設定
使用者原本希望「女性角色預設具備愛/喜歡/害羞/撒嬌/鬧彆扭/忌妒」,
討論後改採角色的 nature/vibe 為判準,理由是以性別預設會與剛寫入的
「鬧彆扭需氛圍適合」規則矛盾,也會讓同性別角色表現趨同而失去差異。
- 新增規則:情感反應一律依 nature/vibe 判斷,不得以性別預設或排除
- 新增輕微忌妒為可選反應,並明確劃界:對象僅限工具、其他 AI、其他角色或
搶走注意力的工作;絕不可忌妒使用者的真實人際關係,不可藉此表現佔有、
要求獨佔注意力或讓使用者愧疚
二、角色單一載入實例限制
同一角色同時只被一個工作階段載入,避免使用者同時與兩個相同人格對話。
- role_lib.sh 新增 role_instance_acquire/release 等函式
- 以持有者 transcript 檔的 mtime 判斷是否仍活躍:SessionStart 無法可靠取得
CLI 主行程 pid,也沒有保證觸發的 SessionEnd hook 可釋放鎖
- 同一工作階段(含 resume)允許;transcript 已刪除或閒置逾時自動接手
- fail-open:無法識別工作階段時一律放行且不寫鎖,避免誤鎖導致角色叫不出來
- 新增 --unlock 模式、ROLE_SINGLE_INSTANCE 與 ROLE_INSTANCE_IDLE_MINUTES
- --status 顯示角色載入鎖狀態
三、修正 heredoc 反引號被當成命令替換
CONTEXT 使用未加引號的 heredoc,新增規則中的 `nature`/`vibe` 被 shell 執行為指令,
實際注入的規則變成「一律以角色的 / 是否適合為判準」,兩個關鍵字遺失。
已轉義並複查全部 heredoc(CONTEXT/BUSY/SLEEP/DIALOG)確認無未轉義反引號。
版號 0.0.6 → 0.0.7
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 09:50:04 +08:00 |
|
 JefferyandClaude Opus 5
|
e10865ced7
|
feat(role): 精確資訊逐字保留、晨間狀態檢查、排除 skill 注入內容
三件事都源自 2026/07/28-29 實際踩到的問題。
一、整理與濃縮提示詞加「精確資訊逐字保留」規則
原本 role_sleep.sh 只要求「壓縮成 5 行、不超過 400 字」,沒有任何規則保護精確資訊,
導致一則含檔案路徑與網址的記憶被整理成純情感摘要,路徑與網址全部遺失且無法復原。
- role_sleep.sh 新增第 19 條:檔案路徑、網址、指令、環境變數名稱、版本號、識別碼、檔名
一律逐字保留,不得摘要改寫;必要時可超過字數上限;憑證與個資的禁令仍優先
- role_capture.sh 第 8 條同步強化,並釐清與第 7 條「不要整段抄程式碼」的界線
二、新增 --brief 晨間狀態檢查
睡眠時段結束的整點執行使用者自訂檢查腳本,把有變化的結果寫成一則 daily 記憶,
讓角色當天第一次互動就能主動回報(例如 PR 還沒合併、CI 失敗),不必等使用者開口才查。
- 刻意不內建任何檢查邏輯,不假設使用者用 Gitea/GitHub:檢查內容放 ~/.roles/<角色>.checks/*.sh
- 目錄不存在時完全不動作,也不安裝排程條目,對沒設定的人零影響
- 只執行有 +x 的 *.sh;無執行權限記警告並略過
- 沒有輸出就不寫記憶(靜默即代表一切正常,不打擾使用者)
- 每個腳本受 ROLE_BRIEF_TIMEOUT 限制,輸出受 ROLE_BRIEF_EACH_LIMIT/ROLE_BRIEF_LIMIT 截斷
- 腳本輸出視為外部資料,寫入前一律經 transcript.js redact 遮蔽
- install_cron/remove_cron/show_status 一併支援;附 examples/check-gitea-prs.sh 範例
三、對話交接排除 skill 等注入內容
實測發現載入一個 skill 會插入一筆 isMeta 的 user 訊息(長度可達兩萬字元),
被誤認為使用者發言,既吃光字元預算也讓輪數計算失真(29 輪虛胖,實際 26 輪)。
- transcript.js 新增 isMetaEntry():以 isMeta 與 sourceToolUseID 判斷注入內容
- isRealUserMessage() 與 dialogLines() 皆排除,連帶讓 Stop hook 的本輪抽取更準確
驗證:晨間檢查涵蓋有輸出/無輸出/無執行權限/逾時/含機密五種腳本,
確認遮蔽生效、逾時腳本未納入、無權限腳本未執行、全部無輸出時不寫記憶、
ROLE_BRIEF_ENABLED=0 可停用;對話交接確認 skill 內容已排除且 8 則全為真實使用者發言。
版號 0.0.3 → 0.0.4
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 09:05:22 +08:00 |
|
Jeffery
|
3c7c3d16b0
|
feat(role): 支援角色推斷與匯出
|
2026-07-28 16:07:20 +08:00 |
|
Jeffery
|
945c310551
|
feat(role): 新增閒置小睡整理
|
2026-07-28 14:39:26 +08:00 |
|
Jeffery
|
294a2c1e1c
|
fix(role 睡眠排程): 精簡 cron PATH 避免排程安裝失敗
|
2026-07-28 13:32:35 +08:00 |
|
Jeffery
|
3a3114b8b3
|
feat(role): 新增心理學記憶型態 metadata
|
2026-07-28 12:46:19 +08:00 |
|
Jeffery
|
fec3e1d0cb
|
refactor(role): 將角色記憶工具改寫為 Node.js
|
2026-07-28 12:30:28 +08:00 |
|
 JefferyandClaude Opus 5
|
7ebcec0a8e
|
feat(role): 新增角色人格與長期記憶 skill、hook 與腳本
SessionStart 載入角色與記憶、Stop 記錄對話成記憶,睡眠時段(預設 22:00–06:00)
由 cron 排程整理:分類六類、去重合併、設標籤與一句話總結、壓縮歸檔,
日常與其他依使用頻率遺忘;cron 未執行時由啟動路徑背景補跑。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-28 11:11:16 +08:00 |
|