Tirith について
Tirithは、複数のコーディングエージェントが同じリポジトリで作業するためのMCPサーバーです。ファイルの確保、タスク管理、インターフェース契約、変更通知、パス単位のメモを扱い、会話履歴や埋め込みデータは保存しません。
主な機能
- 01ファイルとディレクトリの期限付き確保
- 02優先度と依存関係付きタスク
- 03バージョン管理されるインターフェース契約
- 04変更通知と決定記録
- 05パス単位の検索可能なメモ
- 06エージェント間メッセージとエスカレーション
活用シーン
- 01複数エージェントによるファイル編集の競合防止
- 02並行エージェントへのリポジトリ作業の割り当て
- 03実装前のインターフェース変更共有
- 04後続の担当者へのファイル固有の知見の伝達
MCP 対応
TirithはstdioまたはHTTP経由で、MCPクライアントに協調作業用ツールとプロトコル指示を提供します。MCP対応クライアントで利用でき、同じMCP経路を使うCLIも備えています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Tirith
並行して動作するコーディングエージェント向けの調整サーバー。
MCP を介して、作業の確保、タスクボード、インターフェース契約、変更通知、決定ログ、パスの範囲を限定したメモ、エージェント間メッセージを提供します。
1つのリポジトリで5つ、あるいは10のコーディングエージェントを動かすと、同じファイルを編集したり、他のエージェントが依存しているものの名前を変更したり、インターフェースの両側を異なる形で実装したりします。Tirith は、すべてのエージェントがやり取りする小さなデーモンです。エージェントは編集前にファイルの作業を確保し、確保とともに、そのファイルに関する通知、契約、決定、メモを受け取ります。また、どちらかの側が実装する前に、インターフェースの仕様を公開します。
stdio または HTTP 経由で MCP を話すものなら何とでも連携できます。Claude Code、Cursor、Codex、LangGraph、CrewAI、または単純なスクリプトに対応しています。
また、情報を記憶します。エージェントはリポジトリ内のパスに紐づけたメモを残すため、あるエージェントがファイルについて学んだことを、そのファイルを次に確保するエージェントが利用できます。Tirith は会話履歴も埋め込みも保存しません。
ステータス:v1 リリース済み。 ADR-0013 の定義に基づき、すべてのプリミティブ、CLI、永続化機能、ダッシュボードを実装し、テスト済みです。ツールスキーマはセマンティックバージョニングに従います。
インストール
macOS と Linux:
curl -LsSf https://eabz.github.io/tirith/install.sh | sh
Windows(PowerShell):
irm https://eabz.github.io/tirith/install.ps1 | iex
cargo を使用する場合(パッケージ名は tirith-mcp、バイナリ名は tirith です):
cargo install tirith-mcp
すでにインストール済みですか?tirith update を実行すると、最新リリースでバイナリをその場で置き換えます。x86_64 および ARM64 向けの macOS、Linux、Windows 用のビルド済みバイナリはリリースページにあります。すべてのオプションについては、docs/1-about/05-installation.mdをご覧ください。
MCP Registryに登録されています:
mcp-name: io.github.eabz/tirith。
クイックスタート
リポジトリで、次を実行します。
tirith init
.mcp.json に tirith stdio を登録し、AGENTS.md に短いブロックを追加します(別のファイルを指定する場合は --file を使用します)。最初のクレームから、どのエージェントがスウォームを率いるかに至るまで、プロトコル自体はセッション接続のたびに MCP サーバーの指示として渡されます。独自のプロトコルを使いたいリポジトリでは、.tirith/instructions.md に記述します(tirith init --instructions を実行すると、編集用の組み込みプロトコルがそこに書き込まれます)。他のクライアントでは、同じコマンドを手動で登録します。シムはセッションで初めて必要になったときにリポジトリのデーモンを起動し、別バージョンのデーモンがあれば置き換え、その後はデーモンにリクエストを中継します。手動で起動する必要はありません。
| クライアント | セットアップ |
|---|---|
| Claude Code | claude mcp add tirith -- tirith stdio |
| Cursor | .cursor/mcp.json: { "mcpServers": { "tirith": { "command": "tirith", "args": ["stdio"] } } } |
| Codex | codex mcp add tirith -- tirith stdio |
| LangGraph、CrewAI、curl | HTTP 経由で接続します。docs/2-examples/02-client-setup.md を参照してください。 |
デーモンは MCP を http://127.0.0.1:7477/mcp で、ライブダッシュボードを
http://127.0.0.1:7477/ で提供します。状態はリポジトリ内の .tirith/ に書き込まれます。コントラクト、通知、決定、メモリノートはコミットすることを想定しています。.tirith/runtime/(クレーム、タスク、メッセージ)は、Tirith が自動作成する .gitignore によって Git の追跡対象外になります。
各エージェントは、すべての呼び出しに一貫した agent 名を渡します。従う必要がある規約はこれだけです。複数のエージェントを同時に実行するには、プロジェクトのエージェント指示に
docs/2-examples/03-swarm-playbook.md
のプロトコルブロックを貼り付けます。このブロックには、どのセッションがリードするか、いつワーカーを起動するか、各ワーカーに何を伝えるか、各ワーカーがどのモデルで動作するかが記されています。デーモンは同じルールを指示として提供します。
機能
| プリミティブ | ツール | 目的 |
|---|---|---|
| クレーム | claim、release、renew、claims_list | 編集前にファイルまたはディレクトリのリースを取得します。重複する場合は、所有者、理由、有効期限とともに拒否されるか、wait_secs を指定してサーバー側で待機します。エージェントが停止するとリースは期限切れになり、エージェントには次の呼び出し時にそのことが通知されます。 |
| タスクボード | task_create、task_pull、task_update、task_list | 優先度、所有者、依存関係を持つタスクを管理します。エージェントは他のエージェントが保持しているタスクをスキップして、次のブロックされていないタスクを取得します。また、wait_secs を指定してサーバー側でタスクを待つこともできます。所有者から応答がなくなったタスクはボードに戻されます。 |
| コントラクト | contract_publish、contract_get、contract_list | 実装前にインターフェースの形状を公開し、バージョン管理します。新しいバージョンが公開されると、利用者に自動で通知されます。 |
| 変更通知 | notice_publish、notice_list | 「X を Y に改名しました。次のパスに影響します。」といった通知です。依存するエージェントには、クレーム取得時に返される概要に一度だけ通知が含まれます。 |
| 決定ログ | decision_record、decision_list | 理由を添えて確定した選択を記録し、同じことを二度決めないようにします。 |
| メモリノート | memory_write、memory_read、memory_search、memory_delete | リポジトリのパスに関連付けた教訓、注意点、引き継ぎ事項を記録します。コミット可能な Markdown 形式で検索でき、ノートが対象とするパスのクレームを取得したエージェントに届けられます。 |
| メッセージ | message_send、message_list | エージェント間の短いメモです。受信者の次の呼び出し時に届けられるため、どの MCP クライアントからでも参加できます。ランタイムのみで保持されます。 |
| ステータス | status | 件数、永続化、負荷の問題を表示します。verbose を指定すると、誰が何を保持しているかも表示します。 |
各パラメーターの説明、MCP アノテーション、出力スキーマを備えた 22 個のツールに加え、接続時にサーバーの指示として渡されるプロトコルがあります(ADR-0038)。すべての結果は status フィールドを含む JSON 形式で、リストはページ分割されます。また、どの結果にも、終了したリースを示す lost や、未読メッセージを示す inbox が含まれる場合があります。ツールスキーマの唯一の信頼できる情報源である完全なリファレンスは、docs/1-about/04-primitives.md をご覧ください。
例
2つのエージェントが1つのディレクトリを使用します。2つ目のエージェントは、次にどうするか判断できるだけの情報とともに拒否されます。
tirith claim --agent alice --reason "refactor session handling" src/auth/
# ok alice src/auth expires 04:14:34Z
tirith claim --agent bob --reason "fix login redirect" src/auth/login.rs
# conflict src/auth/login.rs overlaps src/auth (alice: "refactor session handling", expires 04:14:34Z)
次にパスを編集する人へのメモです。Alice が一度書くと、Bob がそのパスを要求した際に、誰も検索することなく抜粋として返されます。本文として返されることはありません。
tirith memory write --agent alice "Session ids are opaque" -k gotcha --path src/auth/ <<'NOTE'
Tokens are opaque strings. Compare them, never parse them.
NOTE
tirith release --agent alice
tirith claim --agent bob --reason "fix login redirect" src/auth/login.rs
# ok bob src/auth/login.rs expires 04:14:34Z
# memory:
# session-ids-are-opaque gotcha 04:04:34Z paths src/auth Session ids are opaque: Tokens are opaque strings. Compare them, never parse them.
契約、通知、MCP を直接使った同じ呼び出しを含む詳しい手順はdocs/2-examples/01-two-agents-demo.md、スクリプトはexamples/demo.shをご覧ください。
CLI
すべてのツールにサブコマンドがあり、CLI はエージェントと同じ MCP パスを使用します。
tirith serve # run the repo's daemon by hand
tirith stdio # per-session shim clients spawn; starts the daemon if needed
tirith update # replace the binary with the latest release
tirith status # counts, and who holds what
tirith init [--file AGENTS.md] [--instructions] # register the server, add the agents block
tirith claim | release | renew | claims
tirith task create | pull | update | list
tirith contract publish | get | list
tirith notice publish | list
tirith decision record | list
tirith memory write | read | search | delete # body from --body, --file, or stdin
tirith message send | list # talk to other agents; the inbox shows on any result
tirith lead log # the swarm lead and its policy's decisions
tirith lead human # items waiting for you, most agents blocked first
tirith lead human done <id> [--reply TEXT] # answer one; the reply reaches its sender
tirith tray # macOS only: menu bar icon listing every daemon
tirith tools # list tools with descriptions
tirith call <tool> '<json>' # call any tool directly
--agent で名前を設定し、--json で生の結果を出力します。また、ok 以外の結果では終了ステータス 1 を返します。
Swarm のリードとエスカレーション
ほかのエージェントを起動するセッションは、予約済みのパス
.tirith/lead を要求して swarm のリードになります。status とダッシュボードで、誰が保持しているかを確認できます。以降、デーモンは LLM のターンを消費することなく、定められたルールに従って定型的なエスカレーションを処理します。
- リードの権限:
.tirith/leadを保持している間、契約の公開、タスクの作成、決定の記録、メモリノートの削除、ほかのエージェントのタスクの強制を行えるのはリードだけです。それ以外のエージェントには、リードの名前を示すconflictが返され、変更案をmessage_sendで送信するよう案内されます (ADR-0036)。リードがいない場合、こうした制限は適用されません。また、コミット、プッシュ、プルリクエストの作成、デプロイを行えるのもリードセッションだけです (ADR-0037)。 - エスカレーションの条件: タスクが
blockedに設定された場合(その理由はタスクのメモに記載されます)、または同じ要求が 360 s 以内に 3 回拒否された場合です。リードへのメッセージはエスカレーションになりません。 - 送信先: リードがいる間は、
tirithからのメッセージとしてリードの受信箱に届きます。認証情報、権限、支出、破壊的な操作に言及している場合は、「人間の確認が必要かもしれない」というタグが付きます。エスカレーションが自動的にあなたに届くことはありません。あなたの対応が必要なものは、リードがあなた宛ての文面にしてmessage_sendでhumanに中継します。リードがいない場合、エスカレーションはあなたのキューに届きます。 - あなたのキュー: ダッシュボードの「Needs you」リスト、
tirith lead human、ダッシュボードのポートにある/api/human、macOS のトレイから確認できます。macOS のトレイには各項目の送信者と冒頭の行が表示され、新着が通知されます。ダッシュボードの Done ボタン、またはtirith lead human done <id> --reply "..."で返信できます。返信はhumanからのメッセージとして送信者に届きます。
要求の許可、拒否、待機、解放、リース終了、通知の送信、エスカレーションは、リードの決定ログに追記されます。ログは tirith lead log またはダッシュボードのポートにある /api/lead で確認できます。設計については
ADR-0027、各ツールについては
04-primitives.mdをご覧ください。
ドキュメント
| セクション | 内容 |
|---|---|
| 1-about | 目的、アーキテクチャ、プロジェクト構成、ツールリファレンス、インストール |
| 2-examples | デモ、サポート対象の各フレームワーク向けのクライアント設定、リード、ワーカー、ブリーフ、モデルを扱う swarm プレイブック |
| 3-tests | テスト戦略 |
| 4-style | Rust のルールとその出典、git の規約 |
| 5-decisions | アーキテクチャ決定記録 |
| 6-agent-workflow | このリポジトリでエージェントが作業する方法:Serena、メモリ、Tirith 自身での Tirith の使用 |
| 7-release | リリースプロセスとバージョンの更新 |
| index.html | eabz.github.io/tirith のランディングページ |
コントリビューション
コーディングエージェントは、まず AGENTS.md を読む必要があります。このリポジトリは Tirith 自身を使って調整されています。リポジトリ用のデーモンが稼働しており、エージェントは編集前にそのデーモンを通じてファイルを要求します。.agents/skills/ に手順が記載されています。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。