同一個 Hermes Agent 指令,有時順利跑完、有時卻吐出「找不到檔案」;或是明明在自己電腦的終端機測試沒問題,丟上伺服器跑 Cron 排程或背景服務就直接掛掉。
很多人遇到這種情況,直覺都會懷疑是不是底層模型抽卡不穩定、或是 Prompt 沒下好。但實務經驗告訴我們:問題往往不在模型能力,而是每次執行時的工作目錄、環境變數、可用工具和執行帳號根本沒有固定。
只要每次啟動時的底層環境有些微差異,Agent 看到的系統就完全不是同一個,產出的結果自然無法重現。想要讓自動化 Agent 穩定運作,建議先照著以下 5 個步驟把環境設定逐一確認清楚。
本篇目錄
1. 先確認每次任務從哪裡開始
相對路徑是排程或背景執行時最容易被忽略的盲點。
手動在終端機下指令時,當前工作目錄通常在專案資料夾底下;但如果是 Cron、Webhook Gateway 或是容器環境,預設啟動路徑往往是 /、使用者的家目錄(~)或是其他工作區。
這會導致指令裡寫的 ./config 或 ./scripts/run.sh 抓到完全錯誤的位置。
- 記錄起始狀態:每次任務啟動時,先記錄當前工作目錄(
pwd)、執行檔的絕對路徑,並先檢查輸入檔案到底在不在。 - 讀寫全面改用絕對路徑:需要讀寫檔案時,一律使用明確的絕對路徑,不要依賴相對路徑碰運氣。
2. 把環境變數當成執行輸入
別以為在互動式 Shell 裡能讀到的變數,背景排程和服務就一定拿得到。終端機通常會自動載入 .bashrc 或 .zshrc 中的設定,但非互動式的排程服務預設不會繼承這些內容。
- 統一由單一來源注入:像是 API endpoint、模型名稱、工作區路徑和權限範圍,都該由同一份啟動設定(例如
.env)傳入,並在啟動時先檢查必填欄位齊不齊全。 - 避免設定多頭馬車:如果同一項設定在
.env、systemd 服務檔和管理介面各有一份,請指定唯一來源,其他地方只負責引用。 - Log 去敏保護:除錯記錄只要寫變數名稱、是否存在和安全遮罩,千萬別把整串 Token 或密碼明文印進 Log 裡。

3. 固定執行帳號與工具權限
不同的系統帳號,擁有的檔案讀寫權限、PATH 路徑和憑證完全不同。這常會讓 Agent 出現「偶爾找不到工具」的怪現象,其實只是任務在不同入口被不同帳號啟動了而已。
- 清點最小工具集:列出 Hermes Agent 必須用到的最小工具清單,逐一確認這些工具的實際安裝路徑、執行權限(chmod),以及輸入輸出的目錄權限。
- 用正式帳號實測:測試時請切換到正式排程專用的帳號(例如
www-data或deploy)來跑,不要貪圖方便用 root 或管理員帳號驗收。
4. 讓執行結果可以被比對
要抓出偶發性的異常,每次執行都必須留下清楚的足跡,不能只靠猜測。
每次任務至少要記錄這幾項數據:
- Run ID 與啟動時間
- 當前工作目錄與設定檔版本
- 工具調用狀態與輸出位置
任務成功不能只代表「有收到指令」,而是要能明確指出產出了哪個檔案、更新了哪筆資料;失敗時則要分開記錄是找不到檔案、權限不足、工具連線逾時,還是下游寫入失敗,因為這些狀況的重試邏輯完全不同。
5. 用一次中斷重跑驗證穩定性
環境都固定好之後,最有效的一步是測試系統的容錯能力與冪等性(Idempotency)。
實測方法:故意在工具執行到一半時強制中斷,再從同一個入口重新跑一次。
- 確認路徑與暫存檔:確認 Hermes 不會因為工作目錄變動而建錯檔案,也不會因為中斷而遺失狀態記錄。
- 外部寫入做好去重:如果任務會寫入 WordPress 或 Google Sheets,先在測試環境確認「去重機制」或「已完成狀態標記」正常運作,再切到正式環境。
這個測試能幫你快速釐清:問題到底出在執行環境不一致,還是流程本身缺乏重跑安全性。
常見問題快速解答(FAQ)
手動執行與 Cron 排程的啟動入口、工作目錄(PWD)、執行帳號、PATH 與載入的環境變數通常完全不同,這會導致 Agent 抓不到相應的工具或路徑。
不必急著換。先固定工作目錄、設定來源和工具權限,否則換模型只會引入更多變數,讓問題更難比較。
記錄 Run ID、設定版本、工作目錄、工具狀態、輸出位置和錯誤類型;機密值只記錄是否存在,不記錄內容。
先確認每個外部寫入都有去重鍵或已完成狀態,並用測試目標跑過一次中斷後重試,確認具備冪等性。
