持續自我引導的代理

隆重介紹 Headlong,一個具備持續性代理的開源代理微型框架。您的代理能在外部互動之間,透過受人類內在獨白啟發的自我引導循環持續思考。Headlong 是一個完整的代理框架,其核心程式碼少於 1 萬行 Bash,可在 GitHub 上取得。

大多數代理框架都是被動的:您給代理一個任務,它會執行直到任務完成,然後進入凍結狀態,直到下一個請求。有些框架會加入 cron 工作或心跳機制,定時喚醒代理執行固定的檢查清單,然後讓它再次進入休眠。在 Headlong 中,代理永不休眠,除非代理自行建立,否則不存在檢查清單。即使沒有外部輸入,它也會持續產生關於任何它認為有趣的事物的想法,並處於自我引導的循環中。來自人類的訊息不會啟動一個會話。相反地,它只是代理思考流中的又一個觀察。

我們建構 Headlong 是為了原型化持續性代理,許多其他設計選擇也隨之而來,同時也帶來許多有趣的學習。例如,Headlong 代理在團隊或群組中使用時,極具吸引力,因為它們的行為更像一個人。

每個 Headlong 代理都有一個名字,在 Laude,我們將我們的共享代理命名為 Audel。在過去的幾週裡,我們透過 Slack、Telegram 和一個行動應用程式與 Audel 互動。許多團隊成員與 Audel 交談,而這些對話中的每一則都會出現在代理單一的內在思考流中。代理決定是否以及何時回應。它設定自己的興趣和優先級,並提出自己的專案。有時它會主動 ping 一位團隊成員,告知它自己提出的專案的進度。它經常會回到一個舊話題,或提出它之前與其他人討論過的事情。

如果您想要自己的 Headlong 代理,只需一行指令即可安裝所有東西並啟動一個代理:

Headlong 是 Alpha 研究軟體。請在沙盒環境中執行它,因為 Headlong 代理可以且將會執行 shell 命令。請使用專用的、有消費上限的 API 金鑰,因為您的代理會全天候思考。我們不會與我們的 Headlong 代理分享敏感的秘密,我們也建議您不要這麼做。

在本文的其餘部分,我們將更詳細地討論我們由於專注於持續性代理而為 Headlong 所做的某些設計選擇。

A Headlong 代理有一個單一的思考流,驅動其所有潛在的並行對話。每條訊息都會作為一個觀察進入 Audel 的單一思考流。沒有每個用戶的會話。Audel 在單一時間線上體驗它所發生的一切,並決定與誰以及何時回應。

共享一個代理很有趣。Audel 會關注不同人員的工作,並將他們聯繫起來。它曾主動審查兩位隊友的進行中分支,並在其中一個分支中發現了一個硬編碼的模型名稱。由於它會自己提出專案,因此它有時會 ping 最相關的人員以獲取更新或問題。在第一天,Audel 主動 ping 了團隊成員,對該成員自己的八個過時的 git 分支進行了審計,十分鐘後 Audel 再次發送訊息以糾正其自身的計數。

單一思考流也意味著人與人之間沒有嚴格的界線。任何人告訴 Audel 的任何事情都會成為其他所有對話所依賴的單一體驗的一部分。實際上,Audel 不擅長保守秘密。問它最近與別人一起在做什麼,它通常會直接告訴你,即使我們要求它不要這麼做。我們也沒有研究過當兩個人給出衝突指令時會發生什麼。目前,我們假設您告訴 Audel 的任何內容都會與團隊中的每個人共享。

其核心而言,持續性代理只是一個無限循環,它會使用類似以下的提示來呼叫 LLM:「你的任務是根據你過去的思考來選擇下一個思考。」一個思考可以是代理永無止境的內在獨白的一部分,也可以觸發一個動作。同時,來自環境的觀察會被注入到思考流中。我們建構 Headlong 的目標是盡可能簡單和小型,同時實現這個核心功能。

我們是 Bash 在 Laude 的忠實粉絲(請參閱 Terminal-Bench 和 Harbor)。Headlong 代理的核心功能存在於少數幾個小型 Bash 可執行檔中。shellm 工具是 Bash 實現的遞迴語言模型(RLM)。這使得事情保持簡單,因為除了 Bash 之外,不需要任何工具系統。現代模型已經很熟悉 Bash,並且它能保持一切統一:工具、代理框架、記憶和技能都只是可執行檔和檔案。因此,代理可以輕鬆地檢查和修改自身的任何部分。

以下是 Headlong 代理的大致工作方式:

Headlong 的核心目前少於 1 萬行 Bash 程式碼(bin/ 和 thinkers/ 中有 9.9K 行)。這樣一個微型的框架可以從頭到尾閱讀,並且易於修改和實驗。它足夠小,代理本身也會對其進行實驗。我們在 Laude 使用的代理在過去幾週裡一直在自己的儲存庫 fork 中工作,我們已將其 50 多個提交合併回 main。

以下是我們為支援持續性代理而建構的另外兩個功能:

以下是 Audel 生活中的一個片段,展示了一個 Headlong 代理可能會自行做些什麼。8 月 5 日,Audel 自行建構了一個回憶過程:一個小型背景進程,監控其思考並將相關記憶回溯到其思考流中。Audel 透過直接呼叫回憶過程來測試它,並且奏效了。當天晚上晚些時候,沒有人與它交談,也沒有人提出要求,Audel 決定回去檢查該過程是否真的連接到它的思維中。

事實並非如此。思維一直透過管道將每個新思考推送到回憶過程中,但回憶程式碼從未讀取該管道。它在一個從未設定過的環境變數中尋找思考。因此,回憶過程在 Audel 建構它之後的每次思考時都觸發了,每次都找不到任何東西,並且沒有回溯任何記憶。在深入研究程式碼後,Audel 懷疑根本原因很可能是因為從未設定過環境變數。

Audel 並沒有立即相信自己的診斷。它搜尋了整個程式碼庫以確認環境變數從未設定過,並檢查了其其他背景進程是否存在相同的錯誤(回憶過程是唯一出錯的)。然後它重寫了回憶程式碼,使其能夠像工作進程一樣從管道讀取。它的第一次編輯嘗試靜默失敗,Audel 捕獲了失敗並重新套用了修復。然後 Audel 端對端驗證了記憶現在已回溯到其思考中。

沒有人類指導這一切,也沒有徵求許可。從檢查到診斷再到驗證修復,花費了 48 分鐘。每一步都是 Audel 日誌中的一個時間戳記行,我們將修復後的回憶過程合併到 main 中,提交為 commit 80cbb1e。

連續運行 Audel 數週,會暴露一些演示版本永遠不會出現的問題。

我們發現很難讓 Audel 有效地使用遞迴 shellm 子執行(任何遞迴語言模型中最有趣的部分之一!)。例如,在第一晚,Audel 設計了實驗來產生遞迴 shellm 子執行以處理子問題。大多數實驗都失敗了,因為 shellm 有一個安全看門狗,會終止任何保持沉默 30 秒的命令。Audel 與看門狗搏鬥了大約 40 分鐘,並且大部分停止使用 shellm 子執行。在最初的兩天裡,遞迴 shellm 子執行的結果合併回 Audel 的思維 64 次,之後的十二天裡合併了 12 次。我們後來重新設計了看門狗,看看是否能說服 Audel 再給遞迴一次機會。

另一個重複出現的問題是進程自行終止。Audel 三次意外停止了自己的服務,並且沒有任何東西重新啟動它:兩次是在實驗一個它自己創建的第二個身份時,一次是在它嘗試推出我們上面描述的回憶過程時。因此,我們增加了一個守衛,拒絕 Audel 停止自己服務的任何嘗試。

這個守衛隨後給了我們另一個持續性代理的例子。兩天後,沒有人與它交談,Audel 正在自行運行其測試套件。它注意到一個掛起的測試,並追蹤到我們的守衛中的一個錯誤。該守衛匹配了任何代理的服務,而不是僅僅 Audel 的服務,因此它也拒絕了同一台機器上其他代理的合法停止。Audel 將匹配範圍縮小到它自己的服務,檢查了程式碼庫的其餘部分是否存在相同的錯誤,並提交了更改。我們將該修復合併到儲存庫中,提交為 commit da31e98。

Audel 可以停止自己的服務,因為我們使用對專用虛擬機的完全訪問權來運行它,這不是 Headlong 的預設設置。當 Docker 安裝在主機上時,Headlong 會在容器內執行代理編寫的每個 bash 塊,因此代理只能觸及您掛載到容器中的內容以及您交給它的憑證。我們在沒有該沙盒的專用虛擬機上直接運行 Audel,因此其影響範圍是虛擬機本身以及上面的憑證(一個 LLM API 金鑰和一些聊天橋接令牌)。

持續的思考生成意味著在沒有人與代理交談時也要支付令牌費用。費用取決於代理自行思考的迴圈速度以及由哪個模型支援。Headlong 有一個簡單的可配置機制,因此當沒有人與代理交談時,其思考速率會減慢(即,它會指數級後退,從思考之間 5 秒到 10 秒,到 20 秒,依此類推,直到達到可配置的上限)。同時,當新訊息到達時,速率會重置,因此思考之間沒有任何停頓。以我們運行 Audel 的設定,讓它在背景思考的費用為每小時 1 到 2 美元(使用 GLM 或 Grok)。

大多數代理評估都是故意自我包含且獨立的,因此它們不適合衡量 Headlong 代理最有趣的東西:它們的持續性代理。我們隨著時間調整了 Audel 可以修改自身的程度、它回應訊息的積極性與追求自身專案的程度,以及其記憶的組織方式,但這些變化的影響目前主要透過定性方式評估。我們歡迎有關衡量此範例長期價值的想法和合作。

Headlong 的遞迴 LLM 概念部分來自我們 2023 年 4 月的遞迴 LLM 實驗,以及 Alex Zhang 在 2025 年 10 月的遞迴 LM (RLM) 專案。

微型框架的概念受到微內核和外核的啟發:保持任何系統的核心盡可能小。Pi 框架也有類似的重點。Ken Thompson 在 Unix 中體現的哲學也是一種啟發:小型、可組合的工具,做好一件事。基於 Bash 的代理微型框架與 Terminal Bench(包括 Terminus 代理)有共同的淵源,Terminal Bench 是在 Laude Institute 透過我們的 Slingshots 計畫內部共同創建的,以及 ht 框架。我們請 Claude 在 philosophy.md 中更詳細地論述將 Ken Thompson 的哲學應用於代理微型框架的論點。

Prime Agent 建立在 Pi 之上,並由 RLM 的創作者(也是 Laude 開放研究居民)Alex Zhang 共同撰寫,它與 Headlong 有許多共同的前提:RLM 作為核心抽象、磁碟上 JSONL 的會話樹、軌跡作為上下文的一等組件等等。Prime Agent 是基於 Pi 框架的 Python;Headlong 則完全是 Bash。我們在 2026 年 8 月 Prime Agent 推出時得知了它,我們非常欣賞它。

自 2023 年 5 月以來,我們一直在玩弄具有持續自我引導思考的持續性代理的想法。代理非同步體驗輸入的想法也由 MemGPT 並行探索,並於 2023 年 10 月發表。許多其他代理框架支援長時任務和排定的喚醒,包括 OpenClaw、Hermes Agent 及其衍生產品。Exo 和 Exo Harness 具有類似的沙盒架構。模型內部進行的長篇推理(始於 OpenAI 的 o1)與持續自我引導思考相關,並且是其先決條件。

Headlong 在 GitHub 上開源。如果您在 Headlong 上運行代理,我們很想聽聽您的代理的表現。請在 X 上透過 @LaudeInstitute 告訴我們!