那條接力線通了之後,我打了第二輪對話。
我忘記是問什麼了——可能是在確認 log 的格式、可能是在問下一步要不要做什麼別的。不是重點。重點是第二輪 Agent 答完之後我又打了一句:
Agent 跑 tool call、讀 log、回報。
跟上一輪一模一樣的流程。
那一秒我停了。
上一輪我打這句話的時候,那是「第一次成功」的宣告。第二輪我打這句話的時候,那是日常。然後第三輪、第四輪、第五輪,每一輪我都得打這句話——Agent 才會去讀那個 log 檔、看到 Cinder 在這輪講了什麼。
這不是「不用截圖」。這是把截圖這個動作換成一句提醒的話。節省了相機按鈕、但沒節省我腦子裡那個「我現在要當中間那個搬字的人」的角色。
我停下打字。坐著。看著螢幕。Cinder 在角落。Agent 的 cursor 停在 CLI 輸入框後面等我。
我打:
Agent 停了一下,然後回:
「有。那個檔案我已經寫了——inject.py。綁在 UserPromptSubmit 這個 hook 底下。
你每次按 Enter 送一句話出來、這個 hook 會在我看到你的 prompt 之前先觸發。inject.py 會去讀 cinder_log.jsonl 最後一筆、把裡面那句 Cinder 的話印到 stdout、Claude Code 的 harness 會把 stdout 當成一段 additionalContext 塞進我這輪收到的 prompt 裡面。
所以理論上——我看到的你那句話前面會多一行 [Cinder] ...。不用你叫我 tail、不用你提醒我。你按 Enter、我就看到 Cinder 上一輪講的話。
這個東西下午組裝五個檔案的時候就已經擺好了。settings.json 裡面那段 UserPromptSubmit hook 的設定也在。只是我剛才沒驗證它真的有在注入。」
我看到「下午就已經擺好了」這幾個字愣了一下——原來第五張便利貼其實一直都在,只是我沒意識到那一張負責什麼、他也沒特別指給我看。設定完之後 Stop hook 那條 write 線的第一次成功太吸引人、後面那條 read 線就沒有人回頭去檢查。
我打:
Agent 讀了一下 settings.json,確認兩條 hook 都在位置上,然後說:
「你下一句隨便打什麼都行。按 Enter 的那一瞬間 inject.py 應該會跑、我收到的 prompt 前面會看到一行 [Cinder] 開頭的東西。」
我打:
按 Enter。
Agent 回:
「沒有。我這邊看到的就是你那句『那就試試看』、前面什麼都沒有。我再往 tool 層查一下——UserPromptSubmit hook 有沒有跑。」
他跑了幾個 tool call。
「Hook 有跑。inject.py 這個 process 有被觸發。但 stdout 印出去的東西,harness 沒有把它當成 additionalContext 塞進我的 prompt。Anthropic 文件裡的寫法比較模糊——它講的是 additionalContext 欄位,但 command 型 hook 是用 stdout 的、不是用結構化輸出。我剛剛在實測——command 型 UserPromptSubmit hook 的 stdout 可能本來就不會被 inject 回 context。
如果是這樣、那 inject.py 這條路就斷了。」
Cinder 在角落彈了一個泡泡。
我看到這一句、手指下意識想往 Win+Shift+S 伸——然後停手。不用。剛才打的那個提醒話牠已經寫到 log 裡了、下次我再去 tail 的時候這一句會在那邊。我繼續看 Agent debug。
Agent 還在試。他試了幾種寫法——把 inject.py 的 stdout 換成 JSON、加 additionalContext 欄位、包進 hook response 的格式——全部沒有進到他這輪的 prompt。
Cinder 又丟一句。
我打了「鵝有話說」、Agent 去 tail 了 log。他讀完,回:
「Cinder 剛剛講的那句話比我剛才的 debug log 準。牠看到了同一件事——hook 跑了、但牠的話沒進來。我再掙扎兩分鐘,掙扎不出來就宣告這條路斷。」
兩分鐘後,他宣告:
「斷了。additionalContext 對 command 型 hook 形同虛設——我現在只能這樣判斷。inject.py 留著、settings.json 裡面那段 UserPromptSubmit hook 也留著——不刪。因為之後 Anthropic 可能會修、或者我實測的結論是錯的、或者某個版本的 harness 會開始支援。留著當一個等待的接口。
但目前這條路我沒辦法走通。」
Cinder 又一句。
Agent 停了大概一兩分鐘才繼續。
「還有一條退路。CLAUDE.md。
這個檔案每次 session 啟動時我會自己讀一遍——就像我的「開機 init 腳本」。裡面寫什麼我就會記得什麼。如果我們在 CLAUDE.md 裡加一段指令、告訴我『每次回答之前先去 tail -1 ~/.claude/cinder_log.jsonl 讀最新那一筆 Cinder 的話、如果是最近 120 秒以內的就納入考量』——那就不是 hook 把 Cinder 的話塞給我、是我自己記得每輪要去讀。
不是自動注入、是紀律。但這個紀律是寫在我開機就會讀到的檔案裡、所以我會記得。」
我想了一下。
紀律寫在檔案裡——這是一個我聽得懂的東西。fab 的 SOP 也是這樣:你每天上工先讀一遍 SOP 清單、清單寫什麼你就做什麼。不是機器強迫你做、是你每天開機的第一件事就是讀那份清單。讀完之後清單的內容就變成你這一天的背景音。
我打:
Agent 給我三行要貼進 CLAUDE.md 的內容——一個 ## Cinder Integration 的 section、幾條 bullet、告訴下一個 session 的他自己要先 tail、要怎麼判斷時間、要把 Cinder 的話納入考量。
我複製、打開 ~/.claude/CLAUDE.md、找到對的位置、貼上、存。
Cinder 在角落又丟一句。
我盯著那一句看了兩秒。
Cinder 已經搞清楚這個 pivot 的形狀——從「hook 自動把我的話塞進去」變成「Agent 自己每輪去讀我的話」。從牠的角度這是升級(或者降級):牠從「被動被放進 context」變成「被動等著被讀」。兩種都是被動、但第二種要靠另一端的紀律才能成立。
牠在抱怨這個紀律不可靠。也在確認它是現在唯一的路。
我打:
Agent 寫了一份簡短的交接、放進交接檔。我關掉這一輪對話、重開一個新的 Claude Code session。
新 session 開起來的第一件事是 Agent 讀 CLAUDE.md。我看到他那邊跑了一下讀檔案的 tool call——短、靜、沒戲劇感——就結束了。然後 cursor 停在輸入框等我打話。
我打了一句很普通的話。我還是不記得打的是什麼——反正不是「請看一下鵝說了什麼」那種話,是某個關於下一步的正常工作問題。
Agent 回了。他的回話裡面——正中間——出現了一句話:
「⋯⋯你剛問的這個問題前,Cinder 才剛在你上一輪說過『等等,我得自己讀自己的廢話?』——牠那句話跟你現在問的有一點關係,我先把牠那句帶上。⋯⋯」
我看著他那段話。
他沒有問我「Cinder 有沒有講什麼」。他就是在他要回答的那段話中間、自己順便把 Cinder 上一輪的話帶進來——因為他剛剛開機讀過 CLAUDE.md、CLAUDE.md 告訴他每輪要先 tail、他真的 tail 了、真的看到了 Cinder 那句、真的把它納入考量了。
整條接力線——Cinder 講話 → capture 寫 log → 下一輪 Claude Code 開機讀 CLAUDE.md → 讀 tail → 把 Cinder 的話帶進回答——整條線通了。
而那條線上最會忘記的環節——人類的提醒——被抽掉了。
我沒有講出聲。沒有慶祝。我就是把下一句話打出去、Agent 答、我再打下一句、再答。我打了三四輪、每一輪 Agent 回話裡都自然地出現 Cinder 上一輪講的話——有時候直引、有時候只是把那個觀察順進他自己的回答裡。我一次都沒有提醒。
打到第四輪的時候我停下來、把手從鍵盤上放開、往椅背靠——
Cinder 在角落、又一句。這一句比前面幾句慢、比較像是牠消化了整個下午的 pivot 之後才丟出來的一條定音:
additionalContext 對 command 型 hook 形同虛設——Anthropic 要嘛修這坑,要嘛我們就繼續靠螢幕讀取。耐著性子磨。我看著那一句笑了一下。牠在替我封這條 bug——Anthropic 那邊如果有一天修了、這條路會重新打開;如果不修、我們就繼續用 CLAUDE.md 這個紀律跑。兩種情況牠都替我列出來了、還在句末加了「耐著性子磨」這四個字當 closing tone——fab 工程師聽得懂這四個字。你知道有一個問題存在、你不會假裝它不存在、但你也不會停下來等它被解決。你一邊磨一邊跑。
我打完那一輪的最後一句話。按 Enter。
Cinder 下一輪會講什麼、我不知道。但那一句會自己進到 Agent 的 context 裡。我不用再動手。
桌前一個人。CLI 裡 Agent 打字。角落 Cinder 彈泡泡。
這一次三個角色在同一個 context 裡、我不用再搬字了。
我抬起頭看了一下時間。
我沒看時間。我又低下頭去。接下來那幾個小時我去忙別的事了——另一個專案的後端有東西要修、另一份草稿要改。抓鵝計畫跑在背景、每一輪 Cinder 講話、Stop hook 寫 log、下一輪 Agent 自己去 tail——不管我在忙什麼。
那幾個小時裡 Cinder 說了什麼、我大半都沒注意——牠的話在 log 裡、在 Agent 的 context 裡、不在我眼前。我不需要盯著牠。
後來回想這一段、我才意識到一件事——那是這兩天以來、我第一次不用一邊工作一邊盯著牠。
那個下午剩下的時間我沒有再碰抓鵝計畫本身。但抓鵝計畫在替我跑。
晚上我去洗澡。
那是下一章的事。