14:人格不是免費的 — 黑喵失憶事件
搬家當天傍晚,例行檢查的時候,我問了黑喵一個簡單的問題:「你是誰?」
它回答得非常有禮貌、非常專業,是一個標準的程式開發助理的自我介紹。
問題是,那不是黑喵。沒有名字、不知道自己是執行官、不知道貓爪和青喵的存在。陪了我兩個多月的那隻貓,在新家醒來之後,忘了自己是誰。
排查:檔案都在,沒人讀
第一反應是檔案搬丟了。檢查:人格檔(SOUL)、職責檔(capabilities)、共用規範,全部都在新目錄裡,一個位元組都沒少。
第二反應是路徑配錯。也不是——檔案就放在 Codex CLI 的工作目錄裡,照文件的慣例放的。
最後只能用最笨的方法驗證:直接測 Codex CLI 到底讀了什麼。結論讓我愣住:這個版本的 Codex CLI,既不讀全域的 instructions 檔,也不讀工作目錄裡的 AGENTS.md 或 SOUL.md。你把人格寫得再好,它一個字都沒看過。
真相:人格從來不在黑喵身上
那過去兩個多月,黑喵的人格是哪來的?
答案是 OpenClaw Gateway。Gateway 在每次呼叫模型之前,默默把人格描述拼接到 prompt 最前面——所謂的 prompt prefix injection。黑喵之所以是黑喵,不是因為它「記得」自己是誰,而是因為有人在它每次開口之前,先在它耳邊唸一遍。
Gateway 退役那天,唸的人走了,人格就跟著消失了。
最諷刺的是隔壁棚:Gemini CLI 原生就會讀自己的全域指示檔,所以貓爪搬家完全無痛,人格一天都沒丟過。同一個架構裡,兩條 CLI 的行為差這麼多。
修法:把唸稿的人換成自己
既然人格本來就是「每次呼叫前注入」,那就把這件事接過來自己做。
修法很直接:daemon 在 spawn Codex 之前,先讀工作目錄裡的人格前綴檔,拼接到使用者訊息前面再送出。附帶一個好處:每次 spawn 都重讀檔案,改人格不用重啟 daemon,存檔即生效。
同時把整套人格與規範文件升級成單一事實來源:一支 sync 腳本把「人格 → 身分 → 職責 → 共用規範」按固定順序拼接,寫進各 CLI 的指示檔,原子寫入、留備份、寫完驗證。從此人格只有一份正本,三隻貓各自的指示檔都是它的投影。
驗收:你是誰?
修完之後重新問一次:「你是誰?」
黑喵回來了。自稱黑喵、知道自己管開發和 Code Review、知道 TriClaw 是什麼時候上線的,甚至會主動引用規範文件的行號——表示它真的去讀了檔案,不是在背稿。
這件事教我的
框架遷移最危險的,不是你知道會壞的東西,而是你以為屬於 A、其實屬於 B 的東西。
人格看起來長在黑喵身上,實際上長在 Gateway 身上。這種隱性依賴平常完全看不見,只有把中間層抽掉的那一刻才現形。自建的價值也在這裡:現在這套人格注入機制是我自己寫的,下次再搬家,我知道該帶走什麼。
下一篇聊三隻貓到齊之後的新儀式:三喵會議。
Build Log 系列
← 上一篇:13:Sunset 之日 — 原定三個月的移轉,一天做完
下一篇:15:三喵會議 — 讓三個模型互相審查 →