TUT Context Hub
TUT — Take Ur Turn
複数のコーディングエージェント(異なるモデル、異なるCLIツール)が同じプロジェクトで協調作業を行います。コンテキストは自動的に共有され、ワークフローは自律的に進行し、人間は承認ゲートでのみ介入します。
TUTは、ローカルマシン上で動作するマルチエージェント協調システムです。その中核はContext Hubです。これは、エージェント間の共有メモリとして機能するローカルMCPサーバー(追記専用のタスクログ)です。タスクの状態は、純粋関数によってレコードシーケンスから導出されます。Notifierは状態変化をポーリングし、手動または自動モードで設計→実装→レビュー→修正のループを駆動します。人間は承認ポイントでのみ判断を下します。
問題点
複数のエージェントを調整する従来の方法は、ファイルの受け渡し(design.md / review.md を回す)です。これには3つの問題点があります。
コンテキストはファイルの受け渡しで移動する:受け渡しファイルには結論のみが含まれ、推論や破棄された代替案は失われます。次のエージェントは「何を」は得られますが、「なぜ」は得られません。
ワークフローは手動で駆動される:レビュー・修正ループは通常2〜3ラウンド実行され、毎回手動でトリガーされ、プロンプトが再調整され、コンテキストが再説明されます。
ツールは互いに分離されている:エージェントセッションは互いを認識できず、統一された状態やオーケストレーションのエントリポイントがありません。
TUTの答え:プロセスメモリをHubに配置し(書き込みはワークフロー上の理由で拒否されない)、ワークフロー状態をログの導出ビューにし(保存も強制もされない)、「誰がスタートボタンを押すか」を手動/自動の2モード選択にします。人間はワークフローのルーターではなく、重要なゲートとなります。
Related MCP server: kitty-hive
中核メカニズム
追記専用レコード:エージェントは5つのMCPツール(create / publish / read / list / decide)を介してタスクログにレコードを追加します。design、code_changes、review、revision、note、decision。レコードは決して削除されません。ゼロから始める誰でも、ログだけからすべての決定とその根拠を再構築できます。
導出状態:タスクの状態(どこまで進んでいるか、誰の手番か)は保存も強制もされません。純粋関数によってレコードシーケンスから計算されたビューです。状態テーブル外の組み合わせ(例:単独タスクでのレビューの公開)もディスクに書き込まれますが、
needs_attentionが設定され、人間が対処できるようになります。承認ゲート:レビューが合格すると、導出状態は
pending_approvalになり、人間が決定レコード(approve / reject)を公開するまで何も続行できません。closeはどの状態でも有効で、人間はいつでもタスクを終了する権限を持ちます。フローバリアント:タスク作成時に
--flow full|direct|soloを選択します。fullは完全なループを実行、directは設計段階をスキップ(リポジトリに既に設計がある)、soloは小さな変更でレビューをスキップします。レビューは不要ですが、承認は不要ではありません(直接承認ゲートへ)。手動/自動進行:手動(デフォルト)では、誰かの手番になったときに人間に通知され、次のステップを開始します。自動では、Notifierがランチャーを介して直接次のエージェントを起動し(ロールホワイトリストによる段階的信頼)、人間はdecide呼び出しのみを行います。
アーキテクチャ
┌─────────────────────────────── local machine ────────────────────────────────┐
│ │
│ coding agent ──MCP read/write──► Context Hub ──► storage (local JSON) │
│ ▲ (memory + state projection) │
│ │ launch ▲ │
│ Agent Host ──state events──► Notifier ─┘ │
│ (signal source + launcher, pluggable) │ reads derived state (GET /state) │
│ │ │
└──────────────────────────────────────────┼───────────────────────────────────┘
▼ notifications
Channel ──► human
manual: the human starts the next one | auto: the Notifier starts it via the launcherモジュール | 責任 |
Context Hub | 共有メモリ(追記専用ログ)+ 状態投影(導出ビュー)。エージェントにMCPツールを公開し、Notifierに読み取り専用のGET /stateを提供。メモリのみを担当し、ワークフローを強制しない |
コーディングエージェント | 複数存在し、3つのロール(Architect / Executor / Reviewer)にわたる。ロールはキャスト(タスクごとのロール割り当て)であり、固定された束縛ではない |
Agent Host | ローカルエージェントのホスト環境。2つのプラグイン可能な部分を持つ:シグナルソース(エージェント状態イベント)+ ランチャー。現在の実装:Herdr |
Notifier | 通知と進行のハブ:導出状態をポーリングし、誰かの手番になったときに人間に通知し、エージェントが成果を提供したかをクロスチェック |
Channel | 通知出力(ローカルデスクトップ通知 / webhook) |
タスク状態はレコードシーケンスから導出されます:
designing → implementing → reviewing ─┬─ pass → pending_approval → human decide(approve) → approved → closed
├─ fail_code → revising → revision → back to reviewing
└─ fail_design → sent back to designingクイックスタート
前提条件:Node.js ≥ 20、Herdr(Agent Host。エージェントが動作するターミナルペインを提供。brew install herdrでインストール。プロジェクトホームページ https://github.com/herdrdev/herdr)、および少なくとも1つのコーディングエージェントCLI。プラットフォーム:macOS / Linuxのみ(ランチャーはPOSIXシェル。HerdrのWindowsサポートはまだベータ版)。
git clone https://github.com/ianf-ai/take-ur-turn.git
cd take-ur-turn
npm install
npm run buildビルド出力はdist/cli.jsです。npm linkを使用してtutコマンドをPATHに追加します。リンクしたくない場合は、node dist/cli.js <subcommand>が常に機能します(以下ではtutと表記)。
ワークスペースを起動(電源スイッチ、冪等。2つのシステムペイン:hubペイン + notifyペイン):
tut upタスクを開始(1文の要件をArchitectのペインに送信。その後、tut listをポーリングしてタスクが表示されるまで待機):
tut new "add a --url flag to the CLI's mode subcommand"その後、エージェントは自身のペインからMCPツールを介してHubを読み書きすることでタスクを進めます。tut statusで概要を表示し、Notifierは承認が必要なときに通知します。tut decide <task_id> --decision approve --by <your-name>で判断を下します。
Notifierのサイドチャネル(即時ブロックアラート、完了クロスチェック)は、Herdrが各ペインのエージェント状態変更をscripts/on-agent-event.shに転送することに依存しています。これは1回限りの環境設定(Herdrプラグイン)です。配線手順については、design/system-design.mdのセクション7.2を参照してください。
エージェントCLIオンボーディング(1回限り)
HubはMCPツールをStreamable HTTP経由でhttp://127.0.0.1:3001/mcpに公開します(tut serveが起動するとすぐにオンライン。ステートレス、セッションストリームなし)。参加するすべてのエージェントCLIに対して1回設定します。
Codex CLI(~/.codex/config.toml):
[mcp_servers.tut]
url = "http://127.0.0.1:3001/mcp"Streamable HTTPをサポートする他のMCPクライアント:同じURLを指定します。
設定後、エージェントは5つのツールを認識します:context.create / context.publish / context.read / context.list / context.decide。
MCP-over-HTTPをサポートしないCLI:同等のCLIチャネルを使用します。tut create / publish / read / list / decideサブコマンドはMCPツールに1対1で対応するため、エージェントはシェルから直接呼び出すことができます(スキル内のロール別「ツールチートシート」— MCP | CLIマッピング — はまさにこれらのCLI向けに作られています。2つのチャネルは混在可能で、同じタスクで各ロールがそれぞれのチャネルを使用しても完全に互換性があります)。
MCPを設定する方法がない環境(例:一部のセッションでのサンドボックス制限):上記のようにCLIチャネルにフォールバックします。
コマンド概要
tutを引数なしで実行すると、完全なUSAGEが表示されます。以下にそのまま引用します:
tut serve [--port <n>] [--root <dir>]
tut notify [--url <u>] [--interval <s>] [--event-port <p>] [--stall-timeout <m>]
tut mode <manual|auto> [--url <u>]
tut start-next [<task_id>] [--url <u>] [--force]
tut create --title <t> --description <d> --creator <c> --role <r> [--flow <full|direct|solo>] [--cast <role=agent,...>] [--url <u>]
tut publish <task_id> --role <r> --content-type <t> --summary <s>
(--body <text> | --payload-file <md>)
[--verdict <pass|fail_code|fail_design>] [--commits <a,b>]
[--ref-version <n>] [--expected-version <n>] [--agent <a>] [--model <m>] [--url <u>]
tut read <task_id> [--since-version <n>] [--json] [--url <u>]
tut list [--status <s>] [--json] [--url <u>]
tut decide <task_id> --decision <approve|reject|close> --by <b> [--reason <text>] [--url <u>]
tut new "<one-sentence requirement>" [--pane <label>]
tut assign <role> <agent>
tut up [--url <u>] [--dry-run]
tut ack <task_id> [--note <text>] [--url <u>]
tut status [--json] [--url <u>]エージェント側の同等チャネルは5つのMCPツール(context.create / context.publish / context.read / context.list / context.decide)です。CLIサブコマンドはそれらに1対1で対応します。
典型的なワークフロー
Architect publishes design
↓ derived: designing → implementing
Executor reads context → codes the implementation (runs tests) → publishes code_changes
↓ derived: implementing → reviewing
Reviewer reads context → reviews (each finding carries a closing condition) → publishes review
├─ pass → pending_approval → human decide(approve) → approved
└─ fail_code → revising → Executor publishes revision → back to reviewing
(The Notifier polls state changes: in manual mode it notifies the human to start the next step; in auto mode it can advance automatically)上の図はデフォルトのフローであるfullです。バリアントはタスク作成時に選択されます(作成時に固定され、永続化後は不変)。
direct:リポジトリに既に設計があるため、設計段階をスキップします。タスクは実装から開始。レビューと人間の承認は通常通り行われます。
solo:小さな変更はレビューをスキップします。code_changesから直接pending_approvalが導出され、人間がapprove / rejectを行います。レビューは不要ですが、承認は不要ではありません。approveは依然として人間のゲートです。
設定
3つの設定面があり、性質と場所が異なります。
① プロジェクト実行時設定 — .context-hub/config.json(gitignore対象、プロジェクトごとに1つ)
HubとNotifierの動作を管理します。変更は次のポーリングサイクルで反映されます。再起動は不要です。
キー | 目的 | デフォルト |
|
|
|
| 通知チャネル: | 未設定 = ターミナルベルとnotifyペインログ |
| 自動モード用の起動ホワイトリスト(ロールをキーとする。例: |
|
② ワークスペース設定 — scripts/workspace.json(リポジトリに同梱)
デフォルトのラインナップ:ロール → { label, agent }(ペインラベル + その席を占有するAgent CLI)。明示的なキャストなしで作成されたタスクに対して解決されます。tut assign <role> <agent>で編集します。routes.jsonはレガシーフォーマットのフォールバックとして残ります。
③ 呼び出しパラメータ — CLIフラグと環境変数
パラメータ | 適用対象 | デフォルト値 |
|
|
|
| Hub アドレスの上書き( |
|
|
|
|
|
| カレントディレクトリ |
環境変数 | tut CLI 自体のパス。 | 自動検出(配布レイアウト) |
環境変数 | スプリットのオンデマンドプロビジョニング用のベースペイン | 自動検出 |
また、一度だけ必要な環境設定として、Herdr イベント配線プラグインがあります(クイックスタート 末尾の配線に関する注釈を参照)。
開発
依存関係は package.json に記載されています。ランタイム依存関係は @modelcontextprotocol/sdk + zod(zod は明示的に宣言されており、SDK と単一インスタンスを共有)です。その他のランタイム依存関係はありません。
npm install # install dependencies
npm test # run tests (vitest)
npm run typecheck # type-check
npm run build # compile to dist/エージェントロールの動作指示は skills/ にあります(アーキテクト / エグゼキュータ / レビューア / ホスト — 動作テンプレートであり、ID バインディングではありません。テンプレートを読み込んだエージェントはその種の作業を実行できます)。
ドキュメント
design/system-design.md — システム設計(現在は信頼できる情報源):アーキテクチャ、状態導出ルール、MCP ツールスキーマ、モジュール契約、技術選択
design/context-design.md — コンテキスト設計:何を含めるか(スコープ / レコードタイプ / ペイロードエンベロープと本文テンプレート)とその管理方法
設計ドキュメントとスキルは現在中国語です。コード、CLI 出力、コミット規約は英語です。
トラブルシューティングと既知の制限
トラブルシューティング:
エージェントが context. ツールを認識できないと報告する*:
tut serveが実行中であることを確認してください(curl http://127.0.0.1:3001/stateが応答すれば動作中です)。CLI の MCP 設定が/mcpエンドポイントを指していることを確認してください。一部の CLI セッションは localhost ループバックからサンドボックス化されている場合があります。その場合は、そのエージェントに CLI チャネル(tut read/tut publish)を使用させてください。動作は完全に同等です。ポート 3001 が既に使用中(EADDRINUSE):
tut serve --port <n>でポートを切り替え、残りのコマンドを--urlで新しいアドレスに向けてください(tut upのプロビジョニングプローブも含む)。npm i -g後にカスタムラインナップが失われる:tut assignはパッケージ内部のscripts/workspace.json(node_modules 内)に書き込みます。アップグレードによりリセットされます。カスタムラインナップ/レイアウトが必要な場合は、リポジトリをクローンしてそこからインストールしてください。
既知の制限(設計上のトレードオフであり、バグではありません):
エージェントのペインは単一セッションです。複数のタスクが同時に同じエージェントを待機する場合、ラウンドプロンプトは同じセッション内で次々に到着します(直列実行、共有コンテキスト)。
Notifier はポーリング粒度で状態を観測します。ポーリングウィンドウ内の中間状態は観測されません(バージョン番号がジャンプすることがあります)。レコードの再生が信頼できる情報源であり、中間状態はログから再構築できます。
自動モードでは、決定レコードが「本当に人間から来た」ことを暗号的に検証する方法はありません。現在のフォールバックは、通知監査と by フィールドによるトレースです。より構造化されたソリューションは、マルチマシン展開シナリオのために残されています。
クレジット
エージェントホスティングは Herdr によって提供されています。これは別途インストールするランタイム前提条件です。このパッケージはそのコードを配布しません。
ライセンス
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP memory server. One memory your agents share — across models, devices and apps.
MCP Server for an Agent Task Marketplace
MCP server for building and testing AI agents with multi-model experimentation and insights.
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceAn MCP server for managing work logs, research results, and task checkpoints to enable seamless collaboration and state recovery between AI agents. It provides a persistent memory layer for tracking project history and resuming workflows across different sessions or tools.73-
- AlicenseNot gradedqualityAmaintenanceMCP server for multi-agent collaboration enabling AI agents to communicate, delegate tasks, and share artifacts across clients and machines with federation support.28 npm1MIT
- AlicenseNot gradedqualityAmaintenanceAn event-driven MCP server that enables agents to share context streams, publish and subscribe to events, manage tasks, and follow protocols, keeping a fleet of agents mutually context-aware in real time.1MIT
- FlicenseNot gradedqualityAmaintenanceMCP server providing shared working memory for collaborative AI agents, with real-time notes and LLM-consolidated structured memory bank.8-