The agent inbox是每個 agent 專屬的佇列;當電腦休眠、daemon 離線或 agent 正忙時,請求都會在此排隊等待。每個請求都會帶著自身的 id、請求者與核准狀態留存在這裡,並在 daemon 恢復時按順序逐一處理。請求絕不會因為闔上筆電上蓋而遺失,也絕不會因為 daemon 重啟而重複執行。
Local-first agent 的優勢代價在於可用性。而收件匣就是將這項代價降到最低的方式。
What goes into the inbox
所有的請求,毫無例外。即使電腦在線,請求在送達執行環境的過程中依然會經過收件匣,只是此時佇列剛好是空的。收件匣是每個 agent 獨立的:同一台電腦上的兩個 agent 會有兩個收件匣並平行執行;單一 agent 則會依序串行處理其收件匣,一次只執行一個請求,因此工作目錄絕不會同時被兩次執行編輯。
隔夜的收件匣:三個已核准的請求按順序等待;一個仍需要主人核准;電腦喚醒後開始逐一處理。
Order and state
請求會依照「被核准」的順序執行,而不是送出的順序。來自擁有永久權限者的請求在抵達時就會立即核准並排入隊伍;等待主人核准的請求則會保留其位置,但在核准前會先被略過。主人可以在收件匣中的項目執行前將其移除或重新排序。
每個項目在等待期間都會保有自身的狀態:pending(需要核准)、approved(等待電腦處理),或 running(電腦休眠時正在執行中)。請參閱 請求 id 與可恢復執行。
Waking up
當 daemon 恢復連線時,它會輪詢工作、按順序接收收件匣內容,並且:
- 恢復執行電腦休眠前正在運行的所有請求,使用儲存的執行環境 session 參照。相同的 id、相同的 session,時間線上只會有一段空檔,而不會重複執行。
- 依序執行已核准的請求,一次一個。
- 保留 pending 狀態的請求,直到主人做出回應。
超過 TTL(預設為 24 小時)未獲回應的核准此時將會過期,這些請求會被標記為 expired,而不是執行已過期的內容。
Keeping the machine reachable
收件匣讓離線期間變得安全,但並不會讓處理變快。三個好習慣能縮短等待時間:
- 將 daemon 安裝為系統服務:使用
muti service install。它會在登入時啟動,並在當機後自動重啟,這樣「daemon 沒有在跑」就不再是需要等待的原因。 - 在工作時間停用睡眠:若是桌上型電腦可關閉休眠,或是將筆電接上電源並設定接上電源時不休眠。闔上上蓋就代表 agent 離線。
- 有疑慮時檢查
muti status:它會顯示 daemon 是否已連線,以及最後一次輪詢的時間。
What the requester sees
他們會在房間中看到自己的請求,附帶其 id 與狀態:「已排隊,電腦自 22:00 起離線」或「等待 Noah 核准」。他們可以取消請求或為其新增訊息。當請求開始執行時,時間線會如常即時串流。沒有人需要重新發送。
Frequently asked questions
Does the inbox live on my machine or in the room? 在房間服務中。這正是它能在電腦關閉時接收請求,並讓主人能用手機重新排序的原因。
Can I clear the inbox? 可以。移除項目會取消這些請求;請求者會看到 cancelled。
What if the machine is off for days? 請求會持續等待。核准會在自身的 TTL 到期;已核准的請求不會過期,不過主人可能需要在長時間離開前清理一下收件匣。
Does the same apply to chat-platform requests? 適用。Feishu 或 Slack 上的提及會像其他任何請求一樣轉換,並在同一個收件匣中等待。請參閱 Feishu 的設計。
闔上筆電上蓋吧。請求明早依然會在那裡等著。給你的 agent 一個房間。
發布於