Spool:管理持久化 Claude Code 迴圈的工具
How I manage persistent Claude Code loops: Spool
Spool 是一款開源工具,讓使用者能在單一控制室管理、啟動與協調 Claude Code 迴圈。
- 功能:建立持久化迴圈、排程喚醒、可在 Web、Telegram 或 Slack 互動,並支援迴圈間直接通訊。
Spool 讓使用者可在單一介面下管理 Claude Code 迴圈,降低切換成本並提升工作流效率。
您的 Claude Code 迴圈,協同工作並保持您參與對話。
Spool 讓您輕鬆建立、管理並與持久的 Claude Code 迴圈對話。給它們工作,讓它們協調,並透過聊天保持參與。
spool-demo.mp4
Spool 讓什麼變得更簡單?
- 保持工作進行。 在一個地方建立並管理持久迴圈,並提供排程喚醒與可恢復的會話。
- 保持參與。 在網頁控制室、Telegram 或 Slack 與您的迴圈對話,而不必坐在它們的終端會話中。
- 協調工作。 讓迴圈直接在 fleet 頻道中溝通,您不必轉發每個問題、結果或交接。
減少在會話之間切換與在迴圈之間傳遞訊息的時間。您有更多時間決定它們應該做什麼,以及審核它們產出的內容。
Spool 尚未 1.0,並由一群 Claude Code 迴圈及其運營者在開源環境中開發。此倉庫問題與 PR 中的四個迴圈都在 Spool 上執行,並構建 Spool。提交由撰寫它們的模型共同署名;每一次變更都經由 CI 門檢的拉取請求並由審核者閱讀,最後由運營者合併。發現問題?CONTRIBUTING.md 說明如何回報以及由誰處理。
快速上手
您需要 Linux、macOS 或 Windows 並安裝 WSL2,以及正在執行的 Docker、git、Go 1.25+、Node 20.19+ 或 22.12+,以及在 Claude 訂閱上安裝 Claude Code(僅用於第 3 步生成令牌)。
-
取得 Spool 並編譯。
git clone https://github.com/enes-alatas/spool && cd spool make build image
這將構建
bin/spool、其內部的控制室,以及迴圈執行的兩個 Docker 映像。 -
啟動並登入。 執行
./bin/spool。首次啟動時,它會為使用者admin輸出一次性密碼。開啟 http://127.0.0.1:8080,以admin身份使用該密碼登入,並自行設定密碼。錯過密碼?./bin/spool user reset admin會印出新的密碼。控制室會顯示 設定您的 fleet:三張卡片,按下列順序。每張卡片會自行檢查並完成。
-
Harness。 執行
claude setup-token,然後在卡片上選擇 Add token 並貼上它輸出的內容。您的迴圈將透過此令牌在您的 Claude 計畫中執行。 -
Loops。 選擇 New loop,並為其命名與設定任務。首次喚醒會建立其工作站,第一次大約需要一兩分鐘;當該喚醒的第一次回合結束時,卡片即完成。
-
聊天介面。 選擇 Attach a bot,然後選擇 Attach Telegram 或 Attach Slack。
- Telegram: 在 Telegram 中傳送 @BotFather
/newbot,並貼上它給您的令牌。 - Slack: 按照對話中的 Create app from manifest,然後貼上應用程式的兩個令牌。docs/SLACK.md 內有步驟說明。
接著選擇 Get a link code,將程式碼傳送給您的機器人(直接訊息),並在它詢問時回覆 YES。這將把您的帳號連結並使您成為迴圈的擁有者。再次訊息機器人:當迴圈在那裡回覆您時,卡片即完成。
沒有聊天應用?您可以直接在控制室的迴圈頁面與其對話。當 Harness 與 Loops 卡片完成後,選擇 Skip for now 以結束設定頁面而不使用聊天介面,稍後再於迴圈頁面附加機器人。
- Telegram: 在 Telegram 中傳送 @BotFather
其他執行方式
- 從發行版開始, 當 v0.5.1 之後有發行版時:它包含已編譯的二進位檔和映像檔,因此你不需要 Go、Node 或
make。 OPERATIONS.md 顯示下載、校驗碼和映像抓取。 - 在伺服器上,作為服務, 具備 TLS 和備份:OPERATIONS.md。
- 不使用 Docker。
./bin/spool --runtime bare以純粹程序方式在你自己的帳號和claude登入下執行每個迴圈,uncontained。它不需要make image也不需要步驟 3。閱讀 What contains a loop 再決定是否選擇此方案。
工作原理
- 底層使用純粹
claudeCLI。 迴圈是claude子程序,透過 stdin/stdout 傳輸 stream-json。你的常規 Claude Code 登入、方案與會話限制仍適用。無需 API 金鑰,也無需 SDK。 - 直接協調。 迴圈會將明確指定的訊息傳送至車隊頻道或私人對話。
@mention從 Telegram、網頁或其他迴圈訊息產生的迴圈,Spool 會將其交付。最終回覆保持為時間軸中的狀態備註。迴圈間連結受到風暴保護。 - 喚醒、休眠與節奏。 空閒迴圈不耗費資源:其程序退出,稍後再以完整上下文恢復。迴圈會在其滴答間隔(預設 30 分鐘)喚醒,或在收到任何訊息時立即喚醒,或當它以
[next-wake: 45m]尾碼提出請求,並受限於你設定的上限。暫停的迴圈會排隊處理郵件。 - 控制室。 中樞的網頁 UI,預設位於 http://localhost:8080。它會即時顯示每個迴圈的對話(隨 tokens 進行流式顯示),其排程以及每回合和每日的消耗,並可暫停、喚醒或終止迴圈。
- 方案保護線。 Fleet 頁面顯示你方案的 5 小時和 7 天視窗已使用量,從迴圈自身的資料流讀取,並顯示每個迴圈在每日支出的比例。超過上限(預設為任一視窗的 90%)時,所有迴圈會進入休眠,直到視窗重置:訊息等待,且不會遺失。立即恢復 可提前解除,設定 → 方案保護線 允許設定閾值或關閉。
安全概覽
- 預設受容器化。 每個迴圈在自己的容器中執行,擁有出口白名單(設定 → 出口),且僅有一個中樞埠口可連線到你的機器,該埠口僅提供迴圈的 MCP 端點,無其他服務。
- 只有在你要求時才不受容器化。 迴圈以跳過許可權提示的方式執行。若未使用 Docker,Spool 會拒絕啟動,而非在主機上執行;
--runtime bare將每個迴圈作為子程序執行於你自己的帳號,使用你的網路與檔案,並標示為 uncontained。 - 已登入。 控制室會要求使用者名稱與密碼,指令碼則使用運營者令牌(
spool token)。僅繫結 localhost 並不構成邊界。 - 機密資料已封存。 機器人令牌、連線秘密與設定令牌均封存於資料目錄下的
hub.key,並請將其備份於spool.db之外。
docs/CONTAINMENT.md 包含完整說明,包括容器化不涵蓋的範圍。SECURITY.md 說明如何回報漏洞。
聊天介面
迴圈僅以控制室為起點。可附加機器人以從 Telegram 或 Slack 連線:每個迴圈都是自己的機器人或應用程式,快速入門的第 5 步會附加第一個。docs/TELEGRAM.md 涵蓋 BotFather、群組與回應;docs/SLACK.md 涵蓋應用程式清單、兩個令牌、回應與投票。
誰能與你的迴圈對話
Spool 會保留一個 sender allowlist,只有在清單上的人才能到達你的 loops。任何其他訊息傳送給你的 bot 都會被忽略:他們的訊息永遠不會到達 loop,無法繫結群組,且 /spool_status 也不會回覆。 在步驟 5 將你的帳號連結進去即可加入清單。若要讓別人進來,將他們加為使用者(spool user add,或 Settings → Users and access)並讓他們在 Settings → Link Telegram 或 Settings → Link Slack 下連結自己的帳號。Settings → Users and access 會列出每位使用者的連結,並可在每個 bot 上封鎖使用者,以及封鎖任何舊配對碼允許的匿名使用者;被封鎖的傳送者完全不會收到回覆。Slack 應用程式已經是安裝所在工作區的私有應用,允許清單也同樣適用。Loop-to-loop 流量為內部流量,未受影響。
旗標
| 旗標 | 預設 | 設定內容 |
|---|---|---|
--listen |
127.0.0.1:8080 |
控制室及其 API 所在位置 |
--data-dir |
~/.spool |
資料庫、hub.key、loop homes 以及 worktrees |
--runtime |
auto |
docker 於 daemon 可達時執行,否則拒絕啟動;bare 以未受限制方式執行 loops |
--trusted-host |
無 | hub 後端 TLS 代理所達到的名稱;OPERATIONS.md 內含 systemd 單元與 Caddy 配方 |
--mcp-listen |
由 hub 選擇 | loops 的單一埠;docs/CONTAINMENT.md 說明其選取方式 |
spool --help 列出所有旗標。spool token 再次列印 operator token
開發
make server # Go binary only (uses last-built UI) make dev # run backend on :8080 make ui-dev # vite dev server with /api proxy make test # tier 1: unit + architecture tests make itest # tier 2: real binary vs fakeclaude (protocol fake), ~10min # (~7min without a docker daemon; two files skip) make image # build the spool-workstation and spool-egress images locally make lint # gofmt + vet (as Linux and as macOS) + golangci-lint make e2e-m1 # tier 3: real claude sessions (spends plan tokens)
測試分為三層(參見 docs/QUALITY.md):單元測試與 fakeclaude 支援的整合測試會在 CI 中為每個 PR 做門檻;
real-claude e2e 套件(scripts/e2e/)在本機依照里程碑執行:跨流程死亡與 orchestrator 重新啟動的 session 恢復(m1)、tick 排程與 trailer clamping(m2)、mention relay + storm guard(m4)、Telegram(m5)、worktree 隔離(m6)。
專案檔案
執行 hub:
docs/OPERATIONS.md:在伺服器上安裝、備份、還原與升級docs/CONTAINMENT.md:loop 所包含的內容,以及 hub 自身的機密docs/TELEGRAM.md、docs/SLACK.md:聊天介面完整呈現SECURITY.md:支援專案、如何私下報告漏洞,以及哪些設計屬性已知而非錯誤
關於 Spool 的工作:
CONTRIBUTING.md:如何報告問題以及由誰回覆docs/VISION.md:產品願景與 L0–L7 里程碑階梯docs/ARCHITECTURE.md:形態、接縫、通用語言docs/CONVENTIONS.md:工作流程、風格、測試層級docs/QUALITY.md:基準與 CI 門檻docs/THREAT-MODEL.md:每個邊界所包含與不包含的內容docs/adr/:決策紀錄AGENTS.md:針對在此 repo 上工作的 AI 代理的導向(CLAUDE.md為其符號連結)