<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Work Log on KbWen Blog</title>
    <link>https://www.kbwen.com/tags/work-log/</link>
    <description>KbWen 的個人技術部落格，分享 Python、機器學習、深度學習、資料工程與 AI 開發的學習筆記與實作心得。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <image>
      <url>https://www.kbwen.com/images/og-default.png</url>
      <title>KbWen Blog</title>
      <link>https://www.kbwen.com/</link>
    </image>
    
    <lastBuildDate>Fri, 22 May 2026 18:00:00 +0800</lastBuildDate><atom:link href="https://www.kbwen.com/tags/work-log/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Work Log：跨 session 的記憶機制</title>
      <link>https://www.kbwen.com/work-log-cross-session-continuity/</link>
      <pubDate>Fri, 22 May 2026 18:00:00 +0800</pubDate><dc:creator>KbWen</dc:creator>
      <guid>https://www.kbwen.com/work-log-cross-session-continuity/</guid>
      <description>AI 代理每個新對話都失憶？Work Log 用一份 markdown 記錄任務進度與決策，讓 Claude Code 跨 session 接續，不用每次重講背景。</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR：</strong> Work Log 是一個很無聊的東西：一份 markdown 檔案，記錄這個任務做到哪裡、做了哪些決定、下個 session 要從哪裡繼續。它沒有解決 AI 的記憶問題，只是繞過它。但在我們找到更好的方法之前，它有效。</p>
</blockquote>
<p>在<a href="/beyond-prompt-from-instructions-to-building-systems/">那篇談治理基礎的文章</a>裡，我說過 AI「只活在那一次的對話框裡」。這個說法的代價，在你真正開始用 AI 代理做持續開發的時候才會變得具體。</p>
<p>你跟 AI 花了一個小時討論這個 feature 要走哪個設計模式、為什麼不用另一個方案、資料庫的 schema 要怎麼調整。全部討論清楚了，開始實作。隔天開新對話，繼續做。AI 從頭來：哪個設計模式？資料庫？我不知道你說的是什麼。</p>
<p>這不是 Claude 的問題，也不是任何特定模型的問題。它就是這樣運作的。<a href="/ai-governance-with-prompts-and-skills/">上一篇</a>說到記憶檔案（<code>CLAUDE.md</code>、<code>AGENTS.md</code>）可以幫助 AI 記住專案的架構規則。但那解決的是「規則要記住」的問題，不是「這個任務做到哪裡」的問題。Work Log 是後者。</p>
<hr>
<h2 id="兩層記憶兩個問題">兩層記憶，兩個問題</h2>
<p>先說清楚兩個東西的差別，因為我發現自己最初混在一起想。</p>
<p><strong>專案記憶</strong>：這個專案的架構是什麼、用了哪些 ADR、活躍的任務清單在哪裡、哪些 skill 可以用。這是全域的、靜態的，跟任何一個具體任務無關。你不常去動它，但每次開新 session，AI 需要讀它才知道自己在什麼脈絡裡。</p>
<p><strong>任務記憶（Work Log）</strong>：這個任務做到哪個 phase、做了哪些決定、下一個 session 要從哪裡繼續。它是動態的、per-task 的。一個任務一個檔案，在 Agentic OS 裡放在 <code>.agentcortex/context/work/&lt;task-key&gt;.md</code>（<a href="https://github.com/KbWen/agentic-os">完整結構見 repo</a>）。</p>
<p>混在一起的後果是：要麼全域狀態被塞滿具體任務細節（之後沒人看得懂），要麼任務進度沒地方記（每次都從頭）。分開之後，兩個問題各有各的解。</p>
<hr>
<h2 id="work-log-長什麼樣子">Work Log 長什麼樣子</h2>
<p>下面是一個簡化版的實際樣子（來自 <a href="https://github.com/KbWen/agentic-os">github.com/KbWen/agentic-os</a>）：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># Work Log: feat/email-verification
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Header
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> Branch: feat/email-verification
</span></span><span class="line"><span class="cl"><span class="k">-</span> Classification: feature
</span></span><span class="line"><span class="cl"><span class="k">-</span> Current Phase: implement
</span></span><span class="line"><span class="cl"><span class="k">-</span> Checkpoint SHA: a3f9c12
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Task Description
</span></span></span><span class="line"><span class="cl">新增 email OTP 驗證流程。使用者第一次登入後需完成驗證，
</span></span><span class="line"><span class="cl">未驗證帳號只能讀取，不能寫入。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Phase Sequence
</span></span></span><span class="line"><span class="cl">| Phase     | Status      | Notes                    |
</span></span><span class="line"><span class="cl">|-----------|-------------|--------------------------|
</span></span><span class="line"><span class="cl">| bootstrap | completed   | 分類為 feature           |
</span></span><span class="line"><span class="cl">| plan      | completed   | 確認走 OTP 不走 magic link |
</span></span><span class="line"><span class="cl">| implement | in-progress | auth module 完成，email 發送待測 |
</span></span><span class="line"><span class="cl">| review    | pending     |                          |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Gate Evidence
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> Gate: plan | Verdict: pass | At: 2026-05-10T14:00Z
</span></span><span class="line"><span class="cl"><span class="k">-</span> Gate: implement | Verdict: FAIL | Reason: email sending untested, scope not complete | At: 2026-05-11T09:00Z
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Phase Summary
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> plan: 討論了 OTP vs magic link。決定用 OTP，因為我們的 email
</span></span><span class="line"><span class="cl">  provider 有速率限制，magic link 的 retry 設計複雜度更高。
</span></span><span class="line"><span class="cl">  這個決定要記住，下個 session 不要再討論。
</span></span></code></pre></div><p>關鍵不在格式，在那個 <strong>Phase Summary</strong>。每個完成的 phase，AI 要用一段話說：做了什麼決定、為什麼這樣決定、有什麼取捨。</p>
<p>這段話的作用不是給人讀的，是給下一個 session 的 AI 讀的。這個差別值得注意：給人讀的語言習慣加很多語境鋪墊，給 AI 讀的語言要決策密度高、歧義少。同樣一個決定，給人讀可能寫「考量效率後決定用 OTP」，給 AI 讀更好的形式是「用 OTP，不用 magic link，原因：provider rate limit + magic link retry 複雜度高，此決定封存，不再重新討論」。後者直接進入 AI 的 context，前者需要它自己推斷。</p>
<p>新對話開始，AI 讀了這份 Work Log，知道「OTP vs magic link 已經決定過了，不用再想」。它不會再建議你改用 magic link，因為那個決策已經被記錄並封存。</p>
<hr>
<h2 id="哪些東西值得記">哪些東西值得記</h2>
<p>不是所有事情都要寫進 Work Log。先說限制：一份幾百行的 Work Log，AI 讀完之後注意力也稀釋了。我們設定的上限是每個 Phase Summary 一段話，不超過五句。有這個上限，才值得想清楚什麼東西最值得占那個位置。</p>
<p>從我的觀察來看，排最前面的是這幾樣：</p>
<p><strong>決策，尤其是否定的決策。</strong> 你決定不做某件事的原因，比你決定做某件事更容易被遺忘。「我們用 OTP 不用 magic link，因為 rate limit 問題」——如果沒記，下個 session 的 AI 大概又會建議 magic link。</p>
<p><strong>當前 phase 的狀態。</strong> 做到哪一步、什麼東西是完成的、什麼還沒做。這讓新 session 可以從中間接續，不是從頭。</p>
<p>還有一類東西最容易被忽略：你在 implement phase 發現了一個沒有答案的問題。不要默默繼續，也不要讓 AI 自己想辦法繞過去。寫進去，下個 session 一開始就正面面對它。這類問題如果沒記，AI 下次遇到同一個岔路，十之八九走錯方向——不是因為它笨，是因為它不知道你已經知道那條路走不通。</p>
<hr>
<h2 id="這個方法的真實限制">這個方法的真實限制</h2>
<p>說清楚它做不到的事，比說它能做什麼更重要。</p>
<p>Work Log 解決的是「把決策外化」的問題。AI 把決策寫在外部，下次讀回來，行為才一致。<strong>它沒有解決 AI 的狀態記憶問題</strong>，因為那個問題的解決需要模型架構層面的改變。Work Log 只是個繞路方案：既然 context 不能跨 session 存活，我們就把最重要的東西寫成文件，在 session 開始時重新注入。</p>
<p>這個繞路有個天花板。任務夠複雜的時候，Work Log 本身也會膨脹。你開始注意到你在寫一份文件，讓 AI 讀這份文件，再根據它繼續工作——而不是直接繼續工作。整個過程變得笨重。</p>
<p>還有一個現在可能不用擔心、但以後要注意的事：prompt cache 機制。Claude 和其他主流模型都有 prompt cache，在同一個 session 內重用相同 context 的成本很低（以 Claude 為例，cache TTL 大約是 5 分鐘到 1 小時）。如果你的任務可以在一個 session 裡完成，Work Log 的 ROI 其實有限——cache 幫你保住了 context，不用依賴外部記錄。Work Log 真正發揮的地方，是跨越多個 session 的任務，也就是 cache 早就失效的那種。</p>
<p>我們把 Agentic OS 的 Work Log 定位為一個<strong>夠用的暫時解</strong>，不是最終答案。AI 工具的 native memory 機制在快速發展，現在適合加 Work Log 的任務類型，一兩年後可能模型自己就能處理。這個觀察在<a href="/ai-agent-common-pitfalls-and-fixes/">整個系列的第一篇</a>裡也說過：任何固化的解法都有保鮮期。</p>
<hr>
<h2 id="如果你想試試看">如果你想試試看</h2>
<p>最輕量的開始：開一個任務，在任務開始前新增一個 markdown 檔案。三個區塊就夠：任務目標（一句話）、已決定的事（每次做了決定就加一行）、目前停在哪裡（每次結束 session 更新）。</p>
<p>不需要完整的 Work Log 格式。這三個區塊能擋掉大部分「下個 session 從頭來」的問題，原因很簡單——它逼你在 session 結束之前把當前狀態說清楚，而不是留給下一個 AI 自己猜。做複雜了再引入完整的 phase 結構，不用一開始就全部上。</p>
<p><a href="https://github.com/KbWen/agentic-os">Agentic OS 完整的 Work Log 模板在這裡</a>，包含 phase 定義、gate evidence 格式和 handoff 結構。如果你每次開新對話的前 10 到 15 分鐘都在重新交代背景，而不是做事，那就是加 Work Log 的時機了。</p>
<p><em>這篇是 Agentic OS 系列的一部分。相關閱讀：<a href="/ai-governance-with-prompts-and-skills/">只用 Prompt 和技能，也能做到基本治理</a>說的是更輕量的做法，Work Log 是在那個基礎上加一層。<a href="/ai-agent-common-pitfalls-and-fixes/">AI 代理常見痛點與我們的嘗試</a>是這個系列的入口。</em></p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
