TL;DR: Work Log 是一個很無聊的東西:一份 markdown 檔案,記錄這個任務做到哪裡、做了哪些決定、下個 session 要從哪裡繼續。它沒有解決 AI 的記憶問題,只是繞過它。但在我們找到更好的方法之前,它有效。

那篇談治理基礎的文章裡,我說過 AI「只活在那一次的對話框裡」。這個說法的代價,在你真正開始用 AI 代理做持續開發的時候才會變得具體。

你跟 AI 花了一個小時討論這個 feature 要走哪個設計模式、為什麼不用另一個方案、資料庫的 schema 要怎麼調整。全部討論清楚了,開始實作。隔天開新對話,繼續做。AI 從頭來:哪個設計模式?資料庫?我不知道你說的是什麼。

這不是 Claude 的問題,也不是任何特定模型的問題。它就是這樣運作的。上一篇說到記憶檔案(CLAUDE.mdAGENTS.md)可以幫助 AI 記住專案的架構規則。但那解決的是「規則要記住」的問題,不是「這個任務做到哪裡」的問題。Work Log 是後者。


兩層記憶,兩個問題

先說清楚兩個東西的差別,因為我發現自己最初混在一起想。

專案記憶:這個專案的架構是什麼、用了哪些 ADR、活躍的任務清單在哪裡、哪些 skill 可以用。這是全域的、靜態的,跟任何一個具體任務無關。你不常去動它,但每次開新 session,AI 需要讀它才知道自己在什麼脈絡裡。

任務記憶(Work Log):這個任務做到哪個 phase、做了哪些決定、下一個 session 要從哪裡繼續。它是動態的、per-task 的。一個任務一個檔案,在 Agentic OS 裡放在 .agentcortex/context/work/<task-key>.md完整結構見 repo)。

混在一起的後果是:要麼全域狀態被塞滿具體任務細節(之後沒人看得懂),要麼任務進度沒地方記(每次都從頭)。分開之後,兩個問題各有各的解。


Work Log 長什麼樣子

下面是一個簡化版的實際樣子(來自 github.com/KbWen/agentic-os):

# Work Log: feat/email-verification

## Header
- Branch: feat/email-verification
- Classification: feature
- Current Phase: implement
- Checkpoint SHA: a3f9c12

## Task Description
新增 email OTP 驗證流程。使用者第一次登入後需完成驗證,
未驗證帳號只能讀取,不能寫入。

## Phase Sequence
| Phase     | Status      | Notes                    |
|-----------|-------------|--------------------------|
| bootstrap | completed   | 分類為 feature           |
| plan      | completed   | 確認走 OTP 不走 magic link |
| implement | in-progress | auth module 完成,email 發送待測 |
| review    | pending     |                          |

## Gate Evidence
- Gate: plan | Verdict: pass | At: 2026-05-10T14:00Z
- Gate: implement | Verdict: FAIL | Reason: email sending untested, scope not complete | At: 2026-05-11T09:00Z

## Phase Summary
- plan: 討論了 OTP vs magic link。決定用 OTP,因為我們的 email
  provider 有速率限制,magic link 的 retry 設計複雜度更高。
  這個決定要記住,下個 session 不要再討論。

關鍵不在格式,在那個 Phase Summary。每個完成的 phase,AI 要用一段話說:做了什麼決定、為什麼這樣決定、有什麼取捨。

這段話的作用不是給人讀的,是給下一個 session 的 AI 讀的。這個差別值得注意:給人讀的語言習慣加很多語境鋪墊,給 AI 讀的語言要決策密度高、歧義少。同樣一個決定,給人讀可能寫「考量效率後決定用 OTP」,給 AI 讀更好的形式是「用 OTP,不用 magic link,原因:provider rate limit + magic link retry 複雜度高,此決定封存,不再重新討論」。後者直接進入 AI 的 context,前者需要它自己推斷。

新對話開始,AI 讀了這份 Work Log,知道「OTP vs magic link 已經決定過了,不用再想」。它不會再建議你改用 magic link,因為那個決策已經被記錄並封存。


哪些東西值得記

不是所有事情都要寫進 Work Log。先說限制:一份幾百行的 Work Log,AI 讀完之後注意力也稀釋了。我們設定的上限是每個 Phase Summary 一段話,不超過五句。有這個上限,才值得想清楚什麼東西最值得占那個位置。

從我的觀察來看,排最前面的是這幾樣:

決策,尤其是否定的決策。 你決定不做某件事的原因,比你決定做某件事更容易被遺忘。「我們用 OTP 不用 magic link,因為 rate limit 問題」——如果沒記,下個 session 的 AI 大概又會建議 magic link。

當前 phase 的狀態。 做到哪一步、什麼東西是完成的、什麼還沒做。這讓新 session 可以從中間接續,不是從頭。

還有一類東西最容易被忽略:你在 implement phase 發現了一個沒有答案的問題。不要默默繼續,也不要讓 AI 自己想辦法繞過去。寫進去,下個 session 一開始就正面面對它。這類問題如果沒記,AI 下次遇到同一個岔路,十之八九走錯方向——不是因為它笨,是因為它不知道你已經知道那條路走不通。


這個方法的真實限制

說清楚它做不到的事,比說它能做什麼更重要。

Work Log 解決的是「把決策外化」的問題。AI 把決策寫在外部,下次讀回來,行為才一致。它沒有解決 AI 的狀態記憶問題,因為那個問題的解決需要模型架構層面的改變。Work Log 只是個繞路方案:既然 context 不能跨 session 存活,我們就把最重要的東西寫成文件,在 session 開始時重新注入。

這個繞路有個天花板。任務夠複雜的時候,Work Log 本身也會膨脹。你開始注意到你在寫一份文件,讓 AI 讀這份文件,再根據它繼續工作——而不是直接繼續工作。整個過程變得笨重。

還有一個現在可能不用擔心、但以後要注意的事:prompt cache 機制。Claude 和其他主流模型都有 prompt cache,在同一個 session 內重用相同 context 的成本很低(以 Claude 為例,cache TTL 大約是 5 分鐘到 1 小時)。如果你的任務可以在一個 session 裡完成,Work Log 的 ROI 其實有限——cache 幫你保住了 context,不用依賴外部記錄。Work Log 真正發揮的地方,是跨越多個 session 的任務,也就是 cache 早就失效的那種。

我們把 Agentic OS 的 Work Log 定位為一個夠用的暫時解,不是最終答案。AI 工具的 native memory 機制在快速發展,現在適合加 Work Log 的任務類型,一兩年後可能模型自己就能處理。這個觀察在整個系列的第一篇裡也說過:任何固化的解法都有保鮮期。


如果你想試試看

最輕量的開始:開一個任務,在任務開始前新增一個 markdown 檔案。三個區塊就夠:任務目標(一句話)、已決定的事(每次做了決定就加一行)、目前停在哪裡(每次結束 session 更新)。

不需要完整的 Work Log 格式。這三個區塊能擋掉大部分「下個 session 從頭來」的問題,原因很簡單——它逼你在 session 結束之前把當前狀態說清楚,而不是留給下一個 AI 自己猜。做複雜了再引入完整的 phase 結構,不用一開始就全部上。

Agentic OS 完整的 Work Log 模板在這裡,包含 phase 定義、gate evidence 格式和 handoff 結構。如果你每次開新對話的前 10 到 15 分鐘都在重新交代背景,而不是做事,那就是加 Work Log 的時機了。

這篇是 Agentic OS 系列的一部分。相關閱讀:只用 Prompt 和技能,也能做到基本治理說的是更輕量的做法,Work Log 是在那個基礎上加一層。AI 代理常見痛點與我們的嘗試是這個系列的入口。