Hermes Agent · Engineering Doctrine

把工程 workflow 寫進 Hermes Agent 的核心思想

如果你希望 AI 代理不是「偶爾記得」你的工程習慣,而是把它當成每一輪都會遵守的 operating doctrine,就不能只靠聊天記憶。你必須把規則寫進它的核心 prompt 組裝層,並用備援與測試把這件事鎖死。

主題:Prompt Architecture、Persistent Behavior、Bug-fix Discipline、TDD、Hermes Agent

問題不是記憶,而是注入來源

很多人會直覺想把 workflow 存到 memory。這樣做有幫助,但不夠穩。因為 memory 更適合儲存使用者偏好、環境細節、穩定慣例;如果你要的是「代理的核心工作憲法」,那就必須放到每回合都會重新建構的 system prompt 來源。

容易被壓縮的內容

  • 聊天歷史
  • session 摘要
  • 臨時對話中的口頭要求

不容易消失的內容

  • 核心 prompt builder 常數
  • SOUL.md 這種每回合重新載入的 context file
  • 單元測試保護下的 prompt contract

兩條必須永久存在的工程鐵律

Implementation:
Write Code -> Run Tests -> Fail -> Fix -> Review Logs -> Fix -> Write Code (repeat)

Bug Fix:
Reproduce the issue -> Find the root cause -> Fix -> Review logs and code -> Fix (repeat) -> Add additional unit tests to improve coverage

這兩條規則不是一般提醒,而是流程憲法。它們的目的不是讓代理「更認真」,而是防止它進入典型的錯誤模式:

正確的實作方式:三層鎖定

第一層:寫進核心 prompt builder

這是最重要的一層。把 workflow guidance 寫成 prompt builder 裡的常數,例如 WORKFLOW_DISCIPLINE_GUIDANCE,並在 system prompt 組裝時固定注入。這樣代理每次開新回合時都會重新收到這套規則,不依賴聊天歷史。

第二層:寫進 SOUL.md 做備援

SOUL.md 是另一種每回合重新載入的長期人格來源。即使未來 prompt builder 邏輯被重構,SOUL.md 仍能保留這套 doctrine。

第三層:寫測試保護這個 contract

如果沒有測試,未來很容易在 refactor 時把規則意外刪掉。最好加一個測試,直接驗證 build 出來的 system prompt 確實包含 workflow 關鍵句。

為什麼測試不可少

真正會讓這套核心思想消失的,通常不是 AI 忘記,而是人類重構時把 prompt 組裝改壞。所以測試不是附加品,而是這個 doctrine 能否長期存在的保險絲。

def test_includes_workflow_discipline_guidance(self, agent):
    prompt = agent._build_system_prompt()
    assert "Write Code -> Run Tests -> Fail -> Fix -> Review Logs -> Fix -> Write Code (repeat)" in prompt
    assert "Reproduce the issue -> Find the root cause -> Fix -> Review logs and code -> Fix (repeat) -> Add additional unit tests to improve coverage" in prompt

這個測試的價值很直接:如果某次修改讓 workflow guidance 不再出現在 system prompt,CI 會先炸,而不是等你實際用到時才發現代理開始偷懶。

一個常見誤解:只存 memory 就夠了

不夠。Memory 很適合存「使用者希望之後都用繁體中文」、「偏好的稱呼方式」、「某台機器的環境細節」;但如果你要的是工程流程鐵律,這種東西應該屬於 system-level guidance,而不是 user memory。

最穩的組合通常是:

結論

如果你希望 Hermes Agent 即使在 session 壓縮、上下文裁切、跨回合重建後,仍然牢牢遵守你的工程 workflow,那你要做的不是「提醒它一次」,而是把規則放進它每回合都會重新讀取的系統結構裡。

真正穩固的作法不是讓代理「記得」,而是讓代理「每次都重新被告知,而且有測試保證不會被移除」。