
2026/10/12 6:50
恒常的な Claude Code ループを管理する方法:Spool
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Spool は、チームが安価で管理可能な永続的な AI コーディングセッションを可能にするために設計された革新的な pre-1.0 オープンソースツールです。これは、Claude Code ループの作成、管理、および調整を支援し、スケジュールされた目覚め機能や再開可能なセッションを実現します。これにより、常に API キーや複雑な SDK を必要とすることなく動作します。代わりに、単純な
claude コマンドラインプロセスを実行し、標準的な stdin/stdout 上の軽量 stream-json プロトコルを使用して通信を行います。
アーキテクチャは、ウェブダッシュボード、Telegram、Slack ボット("Chat surface" カードを介して接続)などのユーザーフレンドリーなインターフェースを通じて開発者が制御を維持できるようにすると同時に、fleet チャンネルを介して複数のループの調整を可能にします。セキュリティは、エグレス許可リストを有する分離されたコンテナ、
hub.key を介して管理される sealed secrets、パスワード認証、およびタスクの継続時間を制限して使用量の暴走を防ぐ厳格なガードレールによって確保されます。具体的には、plan ガードレールのデフォルトでは、5 時間または 7 日のウィンドウで 90% の上限に達した場合、リセットまでアイドル状態でのスリープを引き起こします。
費用効率性は、アイドル状態のループが自動的にシャットダウンする(コストなし)ようにし、後から再開できるようにすることで達成されます。デフォルトの目覚め間隔は 30 分であり、
[next-wake] テーラーまたは pause/resume コントロールを通じて調整可能です。ツールには、ダイレクトメッセージ、@mention デリバリー、最終ターンのためのステータスノート、および storm-ガードされたループからループへのチェーンなどの協調機能も含まれています。
インストールは通常、GitHub リポジトリをクローンし、
make build image を実行して、./bin/spool で開始し、ワンタイムパスワードを介して admin としてサインインすることを含みます(要件には Linux/macOS/Windows with WSL2、Docker、git、および Go および Node の特定のバージョンが含まれます)。ただし、v0.5.1 以降のリリースでは、Go、Node、または make への依存は不要になりました。Fleet セットアップは 3 つのカードで構成されます:Harness(Claude トークン用)、Loops(命名されたミッション/ワークステーションの作成用)、および Chat surface。
高度なデプロイオプションには、TLS サポート、
OPERATIONS.md で文書化されたバックアップ、Docker を使用しない bare ランタイム環境が含まれます。プロジェクトが pre-1.0 ステージを超えて成熟するにつれて、将来的なアップデートでは目覚めスケジュールとサーバーオプションをさらに精査し、大規模なコード生成を人間による継続的な監視なしに簡素化するでしょう。本文
Claude Code のループ機能を管理する Spool: 機能、構成と使用方法
Spool を使用すると、永続的な Claude コードループを作成し、管理し、対話することが容易になります。作業を任せて調整し、チャットを通じて常に関与し続けることができます。
🌟 主な特徴:Spool が容易にする作業
- 作業の継続
- 特定の場所で永続的なループを作成・管理できます。
- スケジュールされた起動時刻と再開可能なセッションを設定することで、作業の中断を防ぎます。
- 参加の維持
- ループのターミナルセッションにいる必要はありません。
- Web コントロールルーム、Telegram、Slackからループと会話できます。
- 調整の簡素化
- ループが「艦隊チャネル」を介して直接通信できるようにします。
- 各質問や結果、手渡しのすべてを手作業で中継する必要がなくなります。
- これにより、より多くの時間を「何をやるべきか」の決定と、「生み出した成果物のレビュー」に費やすことができます。
注: Spool は v1.0 前のバージョンであり、Claude コードのループとそのオペレーターによって公開開発されています。イシューおよびプルリクエストで実行されている 4 つのループも Spool を使用しています。コミットはモデルが共著者として記述し、CI でゲートされた後、オペレーターがマージします。
🚀 クイックスタート
環境要件:
- OS: Linux、macOS、または WSL2(Windows)。
- Docker: 実行中である必要があります。
- 言語・ツール: git、Go 1.25+、Node.js 20.19+ または 22.12+。
- Claude Code: インストール済み(トークン取得用)。
1. Spool の取得と構築
git clone https://github.com/enes-alatas/spool && cd spool make build image
- コマンドは
(内部制御ルームを含む)と、ループが動作する 2 つの Docker イメージを構築します。bin/spool
2. 起動とログイン
./bin/spool
- 初回起動: ユーザー「admin」用のワンタイムパスワードが表示されます。
- ブラウザで
を開き、パスワードで admin としてログイン。http://127.0.0.1:8080 - 独自のユーザー名を設定してください。
- ブラウザで
- パスワードを再発行: コマンドを使用します。
./bin/spool user reset admin
3. 制御ルームでのセットアップ
起動すると以下の 3 つのカードが表示されます。順に操作してください。
ハarness(統合)
を実行し、表示されたトークンをコピーします。claude setup-token- カード上の「Add token」を選択し、コピーしたトークンを貼り付けます。
- これでループはあなたの Claude プランを通じて動作します。
Loops(ループ)
- 「New loop」を選択し、名前とミッションを入力します。
- 初回の起動でワークステーションが構築されます(初回は 1〜2 分かかります)。
- 最初のターン終了までこのカードは完了状態になりません。
Chat Surface(対話インターフェース)
ボットを追加する順序です。
- **「Attach a bot」**を選択し、以下から選択します。
- Telegram:
- Telegram で
を実行。@BotFather /newbot - 生成されたトークンを貼り付けます。
- Telegram で
- Slack:
- ダイアログに従って「Create app from manifest」を実行。
- アプリの 2 つのトークンを貼り付けます(詳細は
)。docs/SLACK.md
- Telegram:
- 「Get a link code」を選択し、そのコードをボットに直接メッセージ送信します。
- ボットから質問があれば **「YES」**と返信し、アカウントをリンクしてオーナーになります。
- 最後に一度でもボットにメッセージを送れば、ループが返信するとカードが完了状態になります。
チャットアプリがない場合: 制御ルーム内のループページから直接会話することも可能です。Harness と Loops のカードが完了したら、「Skip for now」を選択し、後からボットを連携させることができます。
その他の実行方法
- リリース版からの実行(v0.5.1 以降): ビルド済みバイナリとイメージが同梱されているため、Go や Node.js は不要です(
を参照)。OPERATIONS.md - サーバー上のサービスとして実行(TLS とバックアップ付き):
を参照してください。OPERATIONS.md - Docker 不使用:
コマンドを使用すると、独自アカウントで「bare」モードとなり、ループを個々のプロセスとして実行します(コンテナ化されない)。./bin/spool --runtime bare
⚙️ 動作原理
- 下流の Plain Claude CLI
- ループは
のサブプロセスであり、stdin/stdout を介して stream-json で通信します。claude - 通常の Claude コードのログイン、プラン制限、セッション制限が適用されます。API キーや SDK は不要です。
- ループは
- 直接協調
- ループは明示的にアドレスされたメッセージを艦隊チャネルまたはプライベート会話に送信します。
- Telegram や Web、他ループからの
に反応して Spool がメッセージを配信します。@mention - 最終ターンの返信はタイムラインのステータスノートとして保持され、ループ間の連鎖は「storm-guarded(暴風雨ガード付き)」です。
- 起動・休止とペース調整
- アイドル中のループにはコストがかかりません。プロセスは終了し、必要な文脈を保ったまま後で再開します。
- デフォルトでは 30 分間隔(tick) で起動しますが、メッセージ届くと即時起動します。
トレーラーで次の起動時間を指定できます(設定範囲内)。[next-wake: 45m]- 休止中のループはメールをキューイングします。
- 制御ルーム
- デフォルト
の Web UI ハブです。http://localhost:8080 - トークンのストリーミングに従って各ループの対話をリアルタイム表示し、スケジュールやターン・日のコストを表示します。
- ループを停止、起動、終了させることができます。
- デフォルト
- プランガードレール
- Fleet ページで、プランの 5 時間と 7 日ウィンドウの使用量をループからのストリーミングデータから読み取り表示し、各ループの日々の消費シェアを示します。
- 上限(デフォルト 90%)を超えると、すべてのループがそのウィンドウのリセットまで休止し、メッセージは待機されますが失われません。
- 「Resume now」で早期再開が可能です。
- 閾値の変更や無効化は
で設定できます。Settings → Plan guardrails
🔒 セキュリティ概要
- デフォルトでコンテナ化
- 各ループは独立したコンテナ内で実行され、エグレス(外部接続)がリストされたホワイトリストのみ許可されています。
- ハブポート以外のマシンのルートはありません。このハブポートではループの MCP エンドポイントのみ提供されます。
- コンテナ化なしはユーザー側で要求時
- Docker がない場合、Spool は起動を拒否します(
の場合はホスト上で実行されます)。--runtime bare
- Docker がない場合、Spool は起動を拒否します(
- ログインが必要
- 制御ルームではユーザー名とパスワードが必要です。スクリプトではオペレータートークン (
) を使用します。spool token
- 制御ルームではユーザー名とパスワードが必要です。スクリプトではオペレータートークン (
- 機密情報の密封
- ボットトークン、接続シークレット、setup-token はデータディレクトリの
で密封されています。hub.key
と別にバックアップしてください。spool.db
- ボットトークン、接続シークレット、setup-token はデータディレクトリの
詳細:
(コンテナ化の全貌)およびdocs/CONTAINMENT.md(脆弱性報告)。SECURITY.md
💬 チャット表面とアクセス制御
チャット表面(対話インターフェース)
- ループは当初、制御ルームでのみ起動します。
- Telegram または Slack からアクセスするには、クイックスタートのステップ 5 でボットを追加する必要があります。
ループにアクセスできる人
Spool は送信元ホワイトリストを維持しており、登録された人だけがあなたのループに到達できます。
- ホワイトリスト外のメッセージ: ボットへの送信は無視され、グループバインドもできません。
には答えません。/spool_status - アカウントのリンク: ステップ 5 で自分のアカウントをリンクします。
- 他の人を許可する手順:
コマンドを使用するか、「Settings → Users and access」から追加します。spool user add- 「Settings → Link Telegram/Slack」で彼ら自身のリンクを行います。
- 「Settings → Users and access」では各ユーザーのリンク一覧を表示でき、すべてのボット上でユーザーをブロックすることも可能です(古いペアリングコードによる承認を含む)。
ブロックされた送信元は一切返信されません。Slack アプリはインストールしたワークスペースに限定され、ホワイトリストもそこで適用されます。ループ間通信は内部処理であり影響を受けません。
🛠️ フラグ(コマンドラインオプション)
すべてのフラグは
spool --help で一覧表示できます。
| フラグ | デフォルト値 | 設定内容 |
|---|---|---|
| 127.0.0.1:8080 | コントロールルームと API が提供される場所 |
| ~/.spool | データベース、hub.key、ループのホームディレクトリが配置される場所 |
| auto | デーモン到達可能なら Docker を使用;bare はコンテナ化せずに実行 |
| none | TLS プロキシの背後にあるハブの名前(OPERATIONS.md に systemd/Caddy レシピあり) |
| ハブで選択 | ループの 1 ポート(docs/CONTAINMENT.md で選択方法が説明されています) |
🧪 開発とテスト
ビルドコマンド:
make server # Go バイナリのみ make dev # バックエンド実行 (:8080) make ui-dev # Vite 開発サーバー (/api プロキシ付き) make image # ローカルに Docker イメージをビルド
テスト階層 (docs/QUALITY.md を参照):
- Tier 1 (Unit Test): ユニットテスト+アーキテクチャテスト。
- Tier 2 (Integration Test): 実際のバイナリと fakeclaude(プロトコルフェイク)でのテスト(約 10 分)。
- Docker デーモンなしで約 7 分。
- テスト対象:m1 (機能確認)、m2 (ティックスケジューリング)、m4 (メンションリレー+暴風雨ガード)、m5 (Telegram)、m6 (ワークツリー分離) など。
- Tier 3 (End-to-End Test): 実際の Claude セッション(プラントークンを消費)。
でローカル実行。scripts/e2e/
CI でゲートするのはユニットテストと fakeclaude を基にした統合テストです。e2e シートは各マイルストーンごとにローカルで実行されます。
📚 プロジェクトドキュメント
ハブの実行に関するドキュメント:
: サーバーへのインストール、バックアップ、リストア、アップグレード。docs/OPERATIONS.md
: ループをコンテナ化する内容及びハブ自身のシークレット。docs/CONTAINMENT.md
,docs/TELEGRAM.md
: チャット表面の詳細。docs/SLACK.md
: サポート範囲、脆弱性の報告方法、設計の特性とバグの区別。SECURITY.md
Spool の開発に関するドキュメント:
: 問題の報告方法と対応者。CONTRIBUTING.md
: プロダクトビジョンと L0〜L7 マイルストーン。docs/VISION.md
: システム構造、シーム、汎用的言語。docs/ARCHITECTURE.md
: ワークフロー、スタイル、テスト階層。docs/CONVENTIONS.md
: ベースラインと CI ゲート基準。docs/QUALITY.md
: 各境界が持つものとその限界。docs/THREAT-MODEL.md
: デシジョンレコード(決定記録)。docs/adr/
: リポジトリで働く AI エージェント向けのガイダンス。AGENTS.md