部落格

我的 AI 代理人到底做了什麼?用證據回答四個問題

每個 AI 代理人的任務,你都應該看得到是誰做的、改了什麼、略過了什麼、為什麼,並附上可以檢查的證據,而不是一則寫著「做完了」的留言。

Weft 是為獨立創業者和小團隊打造的 AI 任務管理工具。

全部文章

作者: Andrei Finogeev ·

想知道你的 AI 代理人做了什麼,別從它的摘要開始。檢查四件事:是哪個連線做的、改了什麼(用你自己能打開的東西證明)、留下了什麼沒做,以及做了什麼決定、為什麼。如果這四項裡有任何一項只靠代理人的一面之詞,你拿到的是旁白,不是紀錄。

Weft 是我們做的。關於其他產品的資訊都來自它們的官方頁面,查證日期為 2026 年 10 月 27 日。

為什麼一則寫著「做完了」的留言不夠?

留言是代理人在描述自己的工作。它很可能是正確的,但留言本身證明不了這一點,因為作者正是你想檢查的那一方。知道某個代理人碰過某個任務,回答的是「誰」。它回答不了這份工作是不是你以為的那樣。

Hypertask 那篇關於 AI 工作歸屬的文章提出了一個中肯的觀點:代理人的工作應該跟人的工作落在同一塊看板上,而不是在一份沒人看的終端機紀錄裡。Hypertask 也讓代理人以服務帳號擁有自己的身分,所以寫入會算在代理人頭上而不是你;它也有任務證據和租約,不過它的文件說,這些刻意只做成 REST 端點,不是 MCP 工具。我們的分歧在於紀錄應該包含什麼。一串附上代理人輸出的留言,是代理人說了什麼的紀錄。我們希望紀錄裡裝的是證據。

這份指南裡沒有任何調查數字。你今天下午就能在自己的看板上測試這四個問題,那會比任何產業平均值告訴你更多。

這四個問題是什麼?

挑一個代理人上週完成的任務。你應該能在一分鐘內回答下面每一題,不用問代理人,也不用打開它的對話:

  1. 是誰做的? 哪個客戶端、透過哪個連線,認領並完成了這個任務。
  2. 改了什麼? 結果,加上你不必信任代理人就能檢查的產出物:一個 commit 雜湊值、一個網址、一個檔案、一個訊息 id。
  3. 什麼沒做? 它略過的部分,以及它沒把握的事。
  4. 做了什麼決定,為什麼? 過程中做的任何選擇、權衡過的選項,以及你每一次把工作退回去的時候。
問題弱的答案:一則寫著「做完了」的留言強的答案:你可以檢查的證據
是誰做的?每個變更上都寫著「代理人」或你自己的名字,因為所有工具共用一把金鑰認領並完成任務的那個連線,用客戶端註冊時的名稱顯示,每一筆紀錄事件都標明來自人或 MCP,以及客戶端 id
改了什麼?「重構了驗證模組,測試通過」一個 commit 雜湊值、一個 PR 或頁面網址、一個附 sha256 的檔案、一個訊息 id:你自己能打開的東西
什麼沒做?什麼都沒說,所以你以為什麼都沒略過一份 notDone 清單(「沒有在 staging 上跑資料庫遷移」)和一份 unknowns 清單(「不確定舊端點沒有其他呼叫者」)
做了什麼決定,為什麼?埋在一段早已捲走的對話裡一筆決策紀錄,附上權衡過的選項和重新檢討的條件,再加上任務的決策歷史,包括它為什麼被退回

我怎麼知道是哪個代理人做的?

Weft 透過 Model Context Protocol 在單一端點 https://letsweft.com/api/mcp 連接 AI 客戶端。每個 OAuth 客戶端和每個個人存取權杖都是獨立的行為者。任務會記錄是哪個客戶端建立的,看板會顯示該客戶端登入時註冊的名稱,外加一個圖示。任務紀錄裡的每一筆事件都會儲存它來自人還是 MCP,以及是哪個客戶端送出的。

完整的紀錄(get_task_history 的 full 模式)會顯示每筆事件的原始客戶端 id:一個 OAuth 客戶端 id,或是 mcp-token 後面接著權杖的 id。它不是好讀的名稱,但它很精確,就算兩個連線來自同一個產品,也能把它們區分開來。

工作期間的所有權也很明確。代理人呼叫 start_task,用 20 分鐘的租約認領任務並把它移到 Doing。report_progress 會續約。嘗試同一個任務的第二個代理人會拿到 already_claimed,而過期的租約會把任務釋出給別人。認領循環指南一步一步說明了這部分,在一塊看板上跑好幾個代理人則涵蓋多客戶端的情況。

一條實用的規則:給每個工具各自的連線。如果兩個客戶端共用一個存取權杖,看板只會看到一個行為者,「是誰」這個問題就沒有答案了。

改了什麼?我能不問代理人就檢查嗎?

代理人做完時會呼叫 complete_task。只有任務 id 是必填的;其他都是可選的,而這個呼叫永遠不會因為缺少證據而失敗。這是刻意的:弄丟已完成的工作,比把它以未驗證的狀態記錄下來更糟。一張收據可以帶有:

  • outcome:最多 1,000 個字元,說明做了什麼、結果放在哪裡。
  • artifacts:最多 20 筆,每筆包含一個種類(url、file、message、commit 等等)、一個位置,以及可選的 sha256 摘要值。
  • claims:代理人聲稱它做了的事,以「主張」而不是已驗證的事實儲存。
  • notDone 和 unknowns:在下一節說明。
  • nextStep:如果你接受,代理人接下來會做什麼。
complete_task({
  "id": "<task id>",
  "runId": "<from start_task>",
  "leaseToken": "<from start_task>",
  "outcome": "已在 /login 加上速率限制;PR 已開,尚未合併。",
  "artifacts": [
    { "kind": "commit", "uri": "<repo>/commit/<hash>" },
    { "kind": "url", "uri": "<repo>/pull/<number>" }
  ],
  "notDone": ["沒有修改註冊端點"],
  "unknowns": ["每分鐘 5 次的上限是猜的;沒有流量數據"],
  "nextStep": "把 PR 合併到 main"
})

結果那一行仍然是旁白。產出物才是你能檢查的部分。一個 commit 雜湊值要嘛存在於你的程式庫裡,要嘛不存在。一個網址要嘛打得開,要嘛打不開。一個檔案的 sha256 要嘛對得上,要嘛對不上。如果一張收據有結果卻沒有產出物,就把它當成代理人回報的工作,因為它本來就是。在網頁上,Done 裡的卡片會顯示任務是「已驗證」還是「代理人回報」。

代理人沒做什麼?

這是大多數紀錄都會略過的問題,也是兩週後會反咬你一口的那個。complete_task 有兩份清單處理它,每份最多 20 筆、每筆 500 個字元:notDone 記錄代理人刻意略過的部分,unknowns 記錄它沒把握的部分。這個工具自己的說明就要求代理人把沒做的事明白說出來。這正是區分「你可以信賴的結果」和「你得重新推敲的結果」的關鍵。

先讀這兩份清單。「沒有對 staging 資料庫跑測試」會改變你下一步要做什麼。一個大任務的收據上如果一筆 notDone 都沒有,這件事本身就值得問一問。

做了什麼決定,為什麼?

在對話裡做的決定,會隨著對話捲走而消失。record_decision 用兩種方式把它們留下來:

  • 獨立的決策紀錄:標題、結論、背景、實際權衡過的選項、後果,以及在什麼條件下要重新檢討。紀錄是不可變的;要改一筆紀錄,就得記一筆新的決策來取代它,舊的會留著,並標為已被取代。
  • 轉達裁決:當你在對話裡告訴代理人「接受」「用 X 重做」「捨棄」或「現在不要」,它會把這個裁決連同你的附註記錄在任務上。

get_task_history 用三種模式把它讀回來:summary(卡片、最新的收據和各種計數)、decisions(關於這個任務的每一個決定,包括它為什麼被退回,即使之後被接受也還留著),以及 full(原始紀錄,上限 100 筆事件)。get_context 會在 token 預算內把現行的決定交給下一個代理人,讓下一次執行從已經決定的事開始,而不是從零開始。更多內容請看為什麼 AI 對話裡的決定會不見。

我在哪裡審閱?要按什麼?

預設情況下,完成的任務會直接進 Done。當任務需要審閱或驗證檢查失敗時,它會停在你的收件匣。你會在那裡看到收據和四個按鈕:「接受」「重做」「之後再說」和「捨棄」。「重做」需要附註,而那段附註會送回給代理人。

如果代理人傳了 nextStep,它會顯示在「接受」按鈕上方,而接受就代表核准的正是那一步。這個核准 72 小時內有效,並透過 get_my_work 或 start_task 回到代理人手上,成為它下一個要做的唯一步驟。代理人用 request_input 問的問題也會進到同一個收件匣,在網頁和 iOS、Android App 上都看得到,並附上手機推播。

收件匣刻意設了上限:單人工作區 5 項等待中的項目,團隊 10 項,或估計 45 分鐘的審閱時間,以先到者為準。滿了的時候,start_task 會以 attention_queue_full 拒絕,讓代理人去把工作做完或釐清,而不是堆更多東西給你檢查。

不同類型的任務,該要求什麼證據?

把這些寫進任務說明裡,讓代理人知道你期待什麼樣的證據:

  • 程式碼:commit 雜湊值和 PR 網址作為產出物。notDone 應該列出沒跑的測試、沒套用的資料庫遷移,以及刻意不動的檔案。
  • 內容:已發布的網址;如果還沒上線,就是附 sha256 的草稿檔。unknowns 應該列出代理人無法確認的事實。
  • 研究:每個關鍵主張的來源網址,以及筆記檔。unknowns 應該把來源說的和代理人推論的分開。
  • 對外聯繫:每封已寄出訊息的訊息 id,以及收件人清單檔。notDone 應該列出誰沒有被聯繫、為什麼。

一開始要怎麼控制代理人能做什麼?

事後的歸屬,最好搭配事前的限制。在 Weft 裡,每個 OAuth 連線有三種權限等級之一,可以在同意畫面上設定,或之後在「設定 → 已連線的 AI 客戶端」裡更改:

  • full(預設):全部 32 個工具。
  • write:除了三個破壞性工具(trash_task、archive_done_tasks、complete_sprint)以外的全部。
  • read:只有 11 個唯讀工具。

每次呼叫都會檢查。中斷連線會撤銷該連線的 refresh token,並在下一次呼叫時拒絕任何在切斷之前發出的權杖。給不支援 OAuth 的客戶端用的個人存取權杖沒有權限範圍:一個權杖就能碰到全部 32 個工具,撤銷則在下一次呼叫時生效。代理人可以把任務移到保留 30 天的回收桶,但不能永久刪除;從回收桶還原是 Pro 功能。

Weft 在這方面不做什麼?

  • 它沒有 GitHub 或 Slack 整合,所以 Weft 不會替你查你的 commit 或訊息。產出物要你自己打開。
  • 它沒有公開的 REST API、webhook 或 CLI,可以把收據推送到其他系統。它有 JSON 和 Markdown 匯出。
  • 它不追蹤模型的步驟。在模型層記錄提示、token 和延遲的工具做的是另一件事,你可能也會想要一個。
  • 收據是代理人自己寫的。Weft 讓主張和證據之間的落差看得見;它無法讓代理人變誠實。

如果你想要透過 REST API 把代理人當服務帳號來管理、給 CI 腳本用的 CLI,或是像寫任務和分流這樣的內建 AI 功能,Hypertask 比較適合。我們的 Hypertask 替代方案頁面把兩者並排比較。

git 歷史不就足以知道我的代理人做了什麼嗎?
Git 顯示程式碼裡改了什麼。它不會顯示代理人略過了什麼、對什麼沒把握,或是在兩個選項之間選了哪一個。把 commit 雜湊值當成任務上的產出物,其餘的放在收據和決策紀錄裡。
代理人不能隨便捏造一個產出物嗎?
它可以送出任何字串。產出物的意義在於你能打開它:一個查得到的雜湊值、一個載入得了的網址、一個找得到的訊息 id。捏造的產出物在你檢查的那一刻就會露餡,而留言永遠不會。當任務帶有驗證檢查而某個阻擋性的檢查失敗時,任務就不會進 Done。
每個做完的任務都要等我審閱嗎?
不用。預設情況下,完成的任務會進 Done。只有當任務需要審閱或驗證檢查失敗時,它才會在你的收件匣裡等你選「接受」「重做」「之後再說」或「捨棄」。
哪些 AI 客戶端能把收據寫進 Weft?
任何 MCP 客戶端。ChatGPT 裡的 Weft 是已上架的外掛,所有方案都能用,包含免費版。Claude Code 用 claude mcp add --transport http weft https://letsweft.com/api/mcp 連接。Claude.ai 和 Claude Desktop 用自訂連接器。共有 33 個客戶端的設定頁面,例如 Claude Code、ChatGPT、Cursor 和 Codex。
這要多少錢?
免費版涵蓋 50 個任務和每月 200 次 AI 呼叫。Pro 是每席次每月 $7 或每席次一年 $60。Weft 沒有 AI 額度:思考發生在你自己的 AI 客戶端裡。請看定價。