跳至內容

@ 提及代理

本指南說明如何在空間中以 @ 提及代理與隊友。

在撰寫器中輸入 @,然後從自動完成中挑選一個代理,或自行輸入名稱:

@alice fix the login bug

被提及的代理若還不是參與者,會先加入空間成為參與者,然後帶着空間的上下文與模式被派發。未被提及的參與者會看到訊息,但不會被派發。

若你送出的訊息沒有提及任何代理,Control Center 會自行挑選回應者:對話中最後發言的代理;否則取對話的擁有者(若它有的話);再否則取空間參與者中第一個頂層代理。在只有一個代理的空間中,那永遠就是唯一的代理。

提及標記以不分大小寫、全名或前綴的方式比對。因此 @arch 可觸達名為 architect 的代理,而 @Alice 可觸達 alice。

有兩項後果值得預先規劃:

  • 短標記不是錯誤。 若兩個代理共用同一個前綴,先找到的那個勝出,而哪個先找到取決於排序——而不是任何決勝規則。名稱有重疊時,請使用全名。
  • 只有字母、數字和底線算作標記的一部分。 剖析器比對的是 @(\w+),所以 @code-reviewer 會被讀成標記 code,而 @my agent 會被讀成 my。名稱含有連字號、點號或空格的代理無法可靠地被提及——透過自動完成亦然,因為它會把名稱當作純文字插入。請以單一詞語或加上底線來命名代理。

提及會在文字送達代理之前被剝除。因此,一條_只有_提及的訊息(@alice)不會派發任何東西——請給它一點事做。

@alice refactor the auth module. @bob write tests for it.

兩個代理會並行派發到同一個對話,而且雙方都收到完整訊息。

它們也會共用該空間的 worktree。程式庫的 worktree 是按空間佈建,而不是按代理;每個代理會取得自己的覆蓋層工作目錄,用來放它的 AGENTS.md、技能與設定,而共用的程式庫以可讀寫方式連結進去。所以同時被提及的兩個代理會看到彼此——也會互相撞上——對方的編輯。

任何不符合代理的 @token,都會以相同的「不分大小寫、全名或前綴」規則,按代號對工作區的人類成員嘗試比對。

已解析的人類提及不會派發任何東西。它只是附在訊息的中繼資料上,純粹為了讓通知路由器可以通知那個人。

代理名稱永遠會先被嘗試,而一旦某個標記被代理認領,就永遠不會再提供給成員清單——一個 @word 只可能解析到一個主體。

被派發的代理會在提示中取得一個「召喚」區塊,裏面寫明是誰召喚它,並列出空間名冊——其他代理(標示為頂層或下屬)與人類成員——讓它知道自己可以把工作交接給誰。該區塊也會告訴它,在回覆中提及另一個代理會喚醒那個代理,而提及自己會被忽略。

代理可以在自己的回覆中交接工作。當一個回合乾淨地完成時,其文字中的提及會被解析,那些代理會被加入空間並派發到同一個對話,並以提及它們的那個回合作為它們的提示。失敗或被中斷的回合不會喚醒任何人——它在思考途中就停下來了。

這些規則刻意比撰寫器的規則更嚴格,因為沒有人會在旁糾正一次錯誤的猜測:

  • 只接受全名。 不做前綴比對。人類輸入 @arch 時可觸達 architect;由代理發出時則誰也觸達不到。若一個名稱同時符合兩個代理,也同樣誰都觸達不到。
  • 程式碼不是散文。 圍欄區塊或 `backticks` 內的提及會被忽略,因此引用 @Override 註釋或 pip install foo@1.2 都是安全的。未閉合的圍欄會令其後的一切失效。
  • 緊貼前一個標記的 @ 不是提及——sam@host.com、pkg/@scope 和 node@20 都解析不到任何人。
  • 連字號會被保留,因此 @code-reviewer 會解析成它本身,而不是標記 code。
  • 每個回合最多三個代理。 一個代理在摘要中列出六個隊友,只是在列出它們,而不是召喚它們。

喚醒鏈與委派受到相同的界線約束:深度 3,而已經在鏈上的代理不能再被它喚醒(沒有 A → B → A)。一個有序配對跨鏈亦受速率限制。被拒的喚醒會在對話中張貼一條系統訊息,說明哪個提及沒有送達以及原因——未解析的名稱則不會,否則句子中任何 @ 都會自我敍述。

若一次交接不能取決於散文——例如請求/回覆,或觸達空間以外的代理——請改用 send_to_agent、ask_agent 和 delegate_task 工具。