task-graph-mcp について
task-graph-mcpは、単一または複数のエージェントによる複雑な作業を構造化するMCPサーバーです。フェーズ、遷移ゲート、タスク依存関係で実行を管理し、データをSQLiteに保存します。
主な機能
- 01入れ子タスクと依存グラフ
- 02フェーズとワークフローによる整理
- 03要件に基づく状態遷移ゲート
- 04アトミックなタスク取得とファイルロック
- 05トークン、コスト、時間の記録
- 06全文検索と添付ファイル
活用シーン
- 01複雑な開発をフェーズごとに進行
- 02並行エージェントへの作業割り当て
- 03遷移前にテストやレビュー要件を確認
- 04タスク記録の検索とコミット情報の添付
MCP 対応
MCPサーバーは、タスクの作成、検索、更新、取得、全文検索のツールを提供し、エージェント登録、協調、ワークフロー設定にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Task Graph MCP Server
実際に機能するエージェントのタスクワークフロー。
AI エージェントに複雑なタスクを任せると、すぐに問題が起こります。エージェントはコンテキストを失い、手順を飛ばし、連携を忘れてしまいます。Task Graph は、作業を導くフェーズ、自動ガイダンスを提供するプロンプト、品質を保証するゲート、複数エージェントのシナリオに対応する調整プリミティブを備えた、構造化ワークフローでこの問題を解決します。これらはすべて Model Context Protocol を通じて利用できます。
Task Graph を選ぶ理由
課題:構造化された実行が必要な複雑なタスクがあります。フェーズに沿って作業する単一のエージェントの場合もあれば、複数のエージェントが並行して連携する場合もあります。適切なワークフローがなければ、エージェントは進捗を見失い、手順を飛ばし、一貫性のない結果を生み出します。
できること:
- 構造化ワークフロー — フェーズ(調査、実装、レビュー、テスト)に沿ってエージェントを作業に導きます。遷移プロンプトが各ステップで自動的にガイダンスを提供します。
- 品質ゲート — 遷移の前に、テストの合格、コードのコミット、レビューの完了を必須にできます。基準を自動的に徹底します。
- すぐに使えるトポロジー — 単独作業、並列スウォーム、スペシャリスト間のリレー、階層型の委任に対応する、すぐに使えるワークフローを用意しています。すぐに始めて、後からカスタマイズできます。
- 設定可能なワークフロー — 独自の状態、フェーズ、プロンプト、ゲートを定義できます。こちらのプロセスではなく、あなたのプロセスに合わせられます。
- マルチエージェントの調整 — アドバイザリーファイルロック、DAG 依存関係、アトミックなタスク取得に対応しています。競合や作業の重複を防ぎます。
- トークン効率に優れた設計 — LLM のコンテキスト制限を考慮しています。コンパクトなクエリ、最小限の往復、構造化された出力を実現します。
- 組み込みの使用状況管理 — タスクごとのトークン数、コスト、時間を追跡できます。エージェントが何にどれだけ費やしているかを正確に把握できます。
- インフラ不要 — WAL モードの SQLite を使用します。データベースサーバーを実行する必要はありません。ファイルを指定するだけです。
機能
| 機能 | 説明 |
|---|---|
| タスク階層 | 親子関係を持つ、無制限の階層化 |
| DAG 依存関係 | 型付きエッジ(blocks、follows、contains)と循環検出 |
| フェーズ | 作業の種類を分類(調査、実装、レビュー、テスト、デプロイ) |
| ワークフロー | 名前付きワークフロートポロジー(solo、swarm、relay、hierarchical) |
| 遷移プロンプト | ステータスやフェーズの変更時にエージェントへ自動的にガイダンスを提供 |
| ゲート | ステータスやフェーズの遷移に必要な終了条件 |
| アトミックなタスク取得 | 上限とタグベースのルーティングを備えた厳密なロック |
| ファイル調整 | 理由と変更ポーリングを備えたアドバイザリーロック |
| コスト追跡 | タスクごとのトークン使用量と USD コスト |
| 時間追跡 | 状態遷移からの自動累積 |
| ライブステータス | 他のエージェントから見えるリアルタイムの「現在の思考」 |
| 全文検索 | タスクと添付ファイルを対象とする FTS5 ベースの検索 |
| 添付ファイル | インラインコンテンツ、ファイル参照、またはメディアストレージ |
| エージェントフィードバック | カテゴリー分けされたエージェント間コミュニケーション(設定に応じて有効) |
| 動的オーバーレイ | オーバーレイの追加・削除ツールによる実行時のワークフローカスタマイズ |
クイックスタート
# Install
cargo install task-graph-mcp
# Add to your MCP client (Claude Code, etc.)
{
"mcpServers": {
"task-graph": {
"command": "task-graph-mcp"
}
}
}
# Agent workflow (worker_id auto-generated if omitted)
connect(workflow="swarm", tags=["code"]) → "bright-lunar-swift-fox"
list_tasks(ready=true, agent="bright-lunar-swift-fox") → claimable work
claim(worker_id="bright-lunar-swift-fox", task="add-auth") → you own it
update(..., phase="implement") → enter implementation phase
thinking(agent="bright-lunar-swift-fox", thought="Adding JWT...") → visible to others
update(worker_id="bright-lunar-swift-fox", task="add-auth",
status="completed",
attachments=[{type:"commit", content:"abc123"}]) → done
インストール
crates.io から(推奨)
cargo install task-graph-mcp
ビルド済みバイナリ
GitHub Releases から、お使いのプラットフォーム用の最新リリースをダウンロードします。
| プラットフォーム | ダウンロード |
|---|---|
| Linux(x64) | task-graph-mcp-x86_64-unknown-linux-gnu.tar.gz |
| macOS(Intel) | task-graph-mcp-x86_64-apple-darwin.tar.gz |
| macOS(Apple Silicon) | task-graph-mcp-aarch64-apple-darwin.tar.gz |
| Windows(x64) | task-graph-mcp-x86_64-pc-windows-msvc.zip |
展開し、バイナリを PATH に配置します。
ソースから
git clone https://github.com/Oortonaut/task-graph-mcp.git
cd task-graph-mcp
cargo build --release
バイナリは target/release/task-graph-mcp に生成されます。
使い方
MCP サーバーとして
MCP クライアントの設定に追加します。
{
"mcpServers": {
"task-graph": {
"command": "task-graph-mcp",
"args": []
}
}
}
CLI オプション
task-graph-mcp [OPTIONS]
Options:
-c, --config <FILE> Path to configuration file
-d, --database <FILE> Path to database file (overrides config)
-v, --verbose Enable verbose logging
-h, --help Print help
-V, --version Print version
構成
完全なリファレンス:ワークフロー、プロンプト、ゲート、ロール、タグを含む構成の詳細については、docs/CONFIGURATION.md を参照してください。
.task-graph/config.yaml を作成します。
server:
db_path: .task-graph/tasks.db
media_dir: .task-graph/media # Directory for file attachments
skills_dir: .task-graph/skills # Custom skill overrides
stale_timeout_seconds: 900
default_format: json # or markdown
paths:
style: relative # or project_prefixed
auto_advance:
enabled: false # Auto-transition unblocked tasks
target_state: ready # Target state (requires custom state in states config)
状態の構成
タスクの状態は構成できます。デフォルトの状態は pending、working、completed、failed、cancelled です。
自動進行用に ready 状態を追加するには、次のようにします。
states:
initial: pending
disconnect_state: pending # State for tasks when owner disconnects (must be untimed)
blocking_states: [pending, working]
definitions:
pending:
exits: [ready, working, cancelled]
ready:
exits: [working, cancelled]
working:
exits: [completed, failed, pending]
timed: true # Time in this state counts toward time_actual_ms
completed:
exits: []
failed:
exits: [pending]
cancelled:
exits: []
auto_advance:
enabled: true
target_state: ready
状態の定義に関する詳細については、SCHEMA.md を参照してください。
依存関係の構成
依存関係のタイプは、タスク同士の関係を定義します。デフォルトのタイプは blocks、follows、contains、duplicate、see-also、relates-to です。
dependencies:
definitions:
blocks:
display: horizontal # Same-level relationship
blocks: start # Blocks claiming the dependent task
follows:
display: horizontal
blocks: start
contains:
display: vertical # Parent-child relationship
blocks: completion # Blocks completing the parent
duplicate:
display: horizontal
blocks: none # Informational only
see-also:
display: horizontal
blocks: none
relates-to:
display: horizontal
blocks: none
| プロパティ | 値 | 説明 |
|---|---|---|
display | horizontal、vertical | 視覚的な関係(同じレベルか親子か) |
blocks | none、start、completion | 依存関係によってブロックされる対象 |
添付ファイルの構成
事前構成済みの添付ファイルキーを使うと、一般的なコンテンツタイプを添付する際の定型記述を減らし、デフォルトの MIME タイプとモードを指定できます。
attachments:
unknown_key: warn # allow | warn (default) | reject
definitions:
commit:
mime: text/git.hash
mode: append
checkin:
mime: text/p4.changelist
mode: append
meta:
mime: application/json
mode: replace
note:
mime: text/plain
mode: append
| プロパティ | 値 | 説明 |
|---|---|---|
unknown_key | allow、warn、reject | 未定義の添付ファイルキーに対する動作 |
definitions.<key>.mime | MIME タイプの文字列 | このキーのデフォルト MIME タイプ |
definitions.<key>.mode | append、replace | デフォルトのモード(append は既存の内容を保持し、replace は上書きします) |
組み込みのデフォルト:
| キー | MIME タイプ | モード | 用途 |
|---|---|---|---|
commit | text/git.hash | append | Git コミットハッシュ |
checkin | text/p4.changelist | append | Perforce のチェンジリスト |
changelist | text/plain | append | 変更されたファイル |
meta | application/json | replace | 構造化メタデータ |
note | text/plain | append | 一般的なメモ |
log | text/plain | append | ログ出力 |
error | text/plain | append | エラーメッセージ |
output | text/plain | append | コマンド/ツールの出力 |
diff | text/x-diff | append | パッチと差分 |
plan | text/markdown | replace | 計画と仕様 |
result | application/json | replace | 構造化された結果 |
context | text/plain | replace | 現在のコンテキスト/状態 |
使用方法:
# MIME and mode auto-filled from config:
attach(task="123", name="commit", content="abc1234")
# → mime=text/git.hash, mode=append
attach(task="123", name="meta", content='{"v":1}')
# → mime=application/json, mode=replace (overwrites existing meta)
# Explicit values override defaults:
attach(task="123", name="commit", mime="text/plain", content="override")
環境変数:
TASK_GRAPH_CONFIG_PATH:構成ファイルへのパス(.task-graph/config.yamlより優先されます)TASK_GRAPH_DB_PATH:データベースファイルのパス(構成ファイルがない場合のフォールバック)TASK_GRAPH_MEDIA_DIR:ファイル添付用のメディアディレクトリ(構成ファイルがない場合のフォールバック)TASK_GRAPH_LOG_DIR:ログディレクトリのパス(構成ファイルがない場合のフォールバック)
MCP ツール
ワーカー管理
| ツール | 説明 |
|---|---|
connect(worker_id?, tags?, workflow?, force?, db_path?, media_dir?, log_dir?, config_path?, overlays?: str[]) | ワーカーを登録します。任意の workflow で名前付きワークフロー(solo、swarm、relay、hierarchical)を選択します。worker_id と有効な paths を返します。 |
disconnect(worker_id: worker_str, final_status?: status_str = "pending") | ワーカーの登録を解除し、すべてのクレーム/ロックを解放します。 |
list_agents(tags?: str[], file?: filename, task?: task_str, depth?: int, stale_timeout?: int) | フィルターを指定して、接続中のワーカーを一覧表示します。 |
cleanup_stale(timeout?: int, final_status?: status_str) | 古いワーカーを削除し、そのクレームを解放します。 |
add_overlay(worker_id: str, overlay: str) | 接続中のワーカーに動的なワークフローオーバーレイを追加します。 |
remove_overlay(worker_id: str, overlay: str) | 接続中のワーカーからワークフローオーバーレイを削除します。 |
タスクの CRUD
| ツール | 説明 |
|---|---|
create(description: str, id?: task_str, parent?: task_str, priority?: int = 5, points?: int, time_estimate_ms?: int, tags?: str[]) | タスクを作成します。優先度は 0~10 です(数値が高いほど重要です)。 |
create_tree(tree, parent?, child_type?, sibling_type?) | 入れ子のタスクツリーを作成します。child_type(デフォルト:"contains")は親→子の依存関係に、sibling_type は兄弟タスク間の依存関係に使用します。 |
get(task: task_str) | 添付ファイルのメタデータと件数を含め、ID でタスクを取得します。 |
list_tasks(status?: status_str[], ready?: bool, blocked?: bool, claimed?: bool, owner?: worker_str, parent?: task_str, recursive?: bool, agent?: worker_str, tags_any?: str[], tags_all?: str[], sort_by?: str, sort_order?: str, limit?: int, offset?: int) | フィルターを指定してタスクを検索します。着手可能なタスクには ready=true を指定します。 |
update(worker_id: worker_str, task: task_str, status?: status_str, phase?: str, assignee?: worker_str, title?: str, description?: str, priority?: int, points?: int, tags?: str[], needed_tags?: str[], wanted_tags?: str[], time_estimate_ms?: int, reason?: str, force?: bool, attachments?: object[]) | タスクを更新します。ステータスやフェーズの変更に伴い、所有者が自動管理され、プロンプトがトリガーされます。コミットや変更リストを記録するには、attachments を指定します。 |
delete(worker_id: worker_str, task: task_str, cascade?: bool, reason?: str, obliterate?: bool, force?: bool) | タスクを削除します。デフォルトではソフト削除されます。完全に削除するには obliterate=true を指定します。 |
scan(task: task_str, before?: int, after?: int, above?: int, below?: int) | タスクグラフを複数の方向にスキャンします。深さは 0=なし、N=階層数、-1=すべてです。 |
search(query: str, limit?: int = 20, include_attachments?: bool, status_filter?: status_str) | FTS5 検索です。フレーズ、prefix*、AND/OR/NOT、title:word に対応しています。 |
rename(worker_id: worker_str, task: task_str, new_id: task_str) | 参照しているすべてのテーブルで、タスク ID をアトミックに変更します。 |
タスクの取得
| ツール | 説明 |
|---|---|
claim(worker_id: worker_str, task: task_str, force?: bool) | タスクを取得します。依存関係が未解決の場合、上限に達している場合、またはタグが不足している場合は失敗します。横取りするには force を指定します。 |
注:update(status="pending") で解放します。update(status="completed") で完了します。ステータスの変更に伴い、所有者が自動管理されます。
依存関係
| ツール | 説明 |
|---|---|
link(from: task_str|task_str[], to: task_str|task_str[], type?: dep_str = "blocks") | 依存関係を作成します。種類は blocks、follows、contains、duplicate、see-also、relates-to です。 |
unlink(from: task_str|"*", to: task_str|"*", type?: dep_str) | 依存関係を削除します。ワイルドカードとして * を使用します。 |
relink(prev_from: task_str[], prev_to: task_str[], from: task_str[], to: task_str[], type?: dep_str = "contains") | 依存関係をアトミックに移動します(unlink の後に link を実行します)。 |
トラッキング
| ツール | 説明 |
|---|---|
thinking(worker_id: worker_str, thought: str, tasks?: task_str[]) | ステータスをリアルタイムで通知します。他のワーカーからも確認できます。ハートビートを更新します。 |
task_history(task: task_str, states?: status_str[]) | 時間の記録を含むステータス遷移履歴を取得します。 |
project_history(from?: datetime_str, to?: datetime_str, states?: status_str[], limit?: int = 100) | 日付範囲で絞り込んだプロジェクト全体の履歴を取得します。 |
log_metrics(worker_id: worker_str, task: task_str, cost_usd?: float, values?: int[8]) | メトリクスを記録します(集計されます)。 |
get_metrics(task: task_str|task_str[]) | タスクのメトリクスを取得します。 |
give_feedback(message: str, category?: str, sentiment?: str, agent_id?: str, tool_name?: str, task_id?: str) | ツール、ワークフロー、UX に関するフィードバックを記録します。デフォルトで有効です。サイズ上限(デフォルト:1MB)を超える書き込みは拒否されます。 |
list_feedback() | フィードバックの Markdown ファイルを読み込みます。 |
ファイルの調整
| ツール | 説明 |
|---|---|
mark_file(worker_id: worker_str, file: filename|filename[], task?: task_str, reason?: str) | 意図を示すためにファイルにマークを付けます。助言目的であり、処理をブロックしません。 |
unmark_file(worker_id: worker_str, file?: filename|filename[]|"*", task?: task_str, reason?: str) | マークを削除します。すべてのマークを削除するには * を使用します。 |
list_marks(files?: filename[], worker_id?: worker_str, task?: task_str) | 現在のファイルマークを取得します。 |
mark_updates(worker_id: worker_str) | 前回の呼び出し以降のマークの変更を確認します。 |
添付ファイル
| ツール | 説明 |
|---|---|
attach(task: task_str|task_str[], name: str, content?: str, mime?: mime_str, file?: filename, store_as_file?: bool, mode?: str) | 添付ファイルを追加します。参照には file を、メディアの保存には store_as_file を使用します。 |
attachments(task: task_str, name?: str, mime?: mime_str) | 添付ファイルのメタデータを取得します。名前にはグロブパターンを使用できます。 |
detach(worker_id: worker_str, task: task_str, name: str, delete_file?: bool) | 名前を指定して添付ファイルを削除します。 |
詳細
| ツール | 説明 |
|---|---|
check_gates(task: task_str) | ステータス/フェーズを遷移する前に、ゲートの要件を確認します。未達のゲートが、合格/警告/失敗の状態とともに返されます。 |
get_advisory(topic?: str, task?: task_str, worker_id?: worker_str) | ガバナンスに関する助言を取得します。トピックを指定しない場合は、すべてのトピックが一覧表示されます。トピックを指定すると、テンプレートを展開した助言の全文が返されます。 |
query(sql: str, params?: str[], limit?: int = 100, format?: str) | 読み取り専用 SQL を実行します。SELECT のみ使用できます。権限が必要です。 |
get_schema(table?: str, include_sql?: bool) | データベーススキーマを取得します。テーブル名、列、型、外部キーが返されます。 |
get_prompts(status?: str, phase?: str, task?: task_str, worker_id?: worker_str) | ワークフロープロンプトを取得します。パラメーターを指定しない場合は、トリガーが一覧表示されます。ステータス/フェーズを指定すると、その遷移向けに展開されたプロンプトが返されます。 |
list_workflows() | 利用可能なワークフロー設定(solo、swarm、relay、hierarchical など)を一覧表示します。 |
list_skills() | 利用可能な同梱スキルとその説明を一覧表示します。 |
get_skill(name: str) | 同梱スキルの全文を取得します。 |
MCP リソース
| URI | 説明 |
|---|---|
query://tasks/all | 依存関係を含むタスクグラフ全体 |
query://tasks/ready | 取得可能なタスク |
query://tasks/blocked | 依存関係によってブロックされているタスク |
query://tasks/claimed | 取得済みのすべてのタスク |
query://tasks/agent/{id} | エージェントが所有するタスク |
query://tasks/tree/{id} | すべての子孫タスクを含むタスク |
query://files/marks | すべてのファイルマーク |
query://agents/all | 登録済みエージェント |
query://stats/summary | 集計統計 |
config://current | すべての設定をまとめて返します |
config://states | タスクの状態定義 |
config://phases | フェーズの定義 |
config://dependencies | 依存関係の種類の定義 |
config://tags | タグの定義 |
docs://index | 利用可能なドキュメントファイルをすべて一覧表示します |
docs://search/{query} | ドキュメント全体の全文検索 |
docs://skills/list | 利用可能なスキルを一覧表示します |
docs://skills/{name} | 指定したスキルの内容を取得します |
docs://workflows/list | 利用可能なワークフローを一覧表示します |
docs://workflows/{name} | ワークフローの詳細を取得します |
docs://overlays/list | 利用可能なオーバーレイを一覧表示します |
docs://overlays/{name} | オーバーレイの詳細を取得します |
docs://{path} | 指定したドキュメントファイルの内容 |
タスクツリー構造
create_tree を使用して階層型タスクを作成します:
{
"tree": {
"title": "Implement auth",
"children": [
{ "title": "Design schema" },
{ "title": "Write migrations" },
{ "title": "Implement endpoints", "children": [
{ "title": "Login endpoint" },
{ "title": "Logout endpoint" },
{ "title": "Refresh endpoint" }
]},
{ "title": "Write tests" }
]
},
"sibling_type": "follows"
}
ツリーノードのフィールド
| フィールド | 説明 |
|---|---|
title | タスクのタイトル(新しいタスクでは必須) |
description | タスクの説明 |
id | カスタムタスク ID(省略した場合は UUID7 が生成されます) |
ref | ID で既存のタスクを参照します(設定すると他のフィールドは無視されます) |
priority | 優先度 0~10(デフォルトは 5) |
points | ストーリーポイント/複雑さの見積もり |
time_estimate_ms | ミリ秒単位の所要時間の見積もり |
tags | タスクの分類タグ |
needed_tags | タスクを取得するには、エージェントがこれらのタグをすべて持っている必要があります(AND) |
wanted_tags | タスクを取得するには、エージェントがこれらのタグのうち少なくとも 1 つを持っている必要があります(OR) |
children | ネストされた子ノード |
トップレベルのパラメーター
| パラメーター | デフォルト | 説明 |
|---|---|---|
tree | 必須 | タスクツリーのルートノード |
parent | null | ツリーのルートを既存の親タスクに追加します |
child_type | "contains" | 親から子への依存関係の種類 |
sibling_type | null | 兄弟間の依存関係の種類(順次の場合は "follows"、並列の場合は null) |
既存のタスクの参照
ref を使用して、既存のタスクをツリー構造に組み込みます。
{
"tree": {
"title": "Sprint 5",
"children": [
{ "title": "New feature" },
{ "ref": "existing-task-id" },
{ "title": "Another task" }
]
},
"sibling_type": "follows"
}
タグベースの適合性
ワーカーは接続時にタグで能力を宣言します。タスクに特定のタグを要求することで、取得できるワーカーを制御できます。
タグカテゴリーの例:
- モデルの能力:
image-in、audio-out、video-in、code、bulk - アクセスレベル:
prod-access、admin、external - 専門分野:
rust、python、frontend、database
注:コーディネーター/レビュアー/デプロイヤーなどの役割は、フェーズで表すほうが適しています。
タスクの要件:
needed_tags(AND):エージェントはこれらをすべて持っている必要がありますwanted_tags(OR):エージェントはこれらのうち少なくとも 1 つを持っている必要があります
{
"title": "Analyze screenshot and generate code",
"needed_tags": ["image-in", "code"],
"wanted_tags": ["bulk"]
}
{
"title": "Deploy to production",
"phase": "deploy",
"needed_tags": ["prod-access"],
"wanted_tags": ["aws", "gcp"]
}
ワークフローとフェーズ
フェーズ
タスクには、実行する作業の種類を分類する phase を設定できます。
{
"title": "Add authentication",
"phase": "implement"
}
組み込みのフェーズ:explore、implement、review、test、security、deploy、triage、diagnose、design、plan、doc、integrate、monitor、optimize
フェーズにより、次のことが可能になります。
- 遷移時のプロンプト — フェーズへの入退出時に自動でガイダンスを表示します
- ゲート — フェーズ遷移前に満たす必要がある要件です
- 役割ベースのルーティング — リレーワークフローでは、専門家が特定のフェーズを担当します
名前付きワークフロー
あらかじめ構築されたワークフローのトポロジーにより、さまざまな調整パターンに最適化できます。
| ワークフロー | 説明 | 最適な用途 |
|---|---|---|
solo | 単一のエージェントによる完全な自律実行 | シンプルなタスク、プロトタイピング |
swarm | プル型の並列ジェネラリスト | 高スループット、独立したタスク |
relay | 順次処理する専門家による引き継ぎ | 複雑なタスク、ドメインの専門知識 |
hierarchical | リードからワーカーへの委任 | 大規模プロジェクト、チームの調整 |
push | プッシュ型のタスク配分トポロジー | 集中型の割り当て、負荷分散 |
kanban | WIP 制限付きのボード形式のタスク管理 | 継続的なフロー、視覚的な追跡 |
sprint | 期間を定めた反復計画 | スクラムチーム、固定されたサイクル |
接続時にワークフローを選択します。
connect(worker_id="agent-1", workflow="swarm")
各ワークフローには、用途に合わせたプロンプトと調整ガイダンスが用意されています。詳しいパターンについては、WORKFLOW_TOPOLOGIES.md を参照してください。
遷移時のプロンプト
ステータスまたはフェーズが変わると、エージェントに自動でガイダンスが表示されます。
# workflows.yaml
states:
working:
prompts:
enter: |
You are now working on this task.
From {{current_status}} you can transition to: {{valid_exits}}
exit: |
Before leaving:
- [ ] Attach results
- [ ] Log costs
プロンプトでは、テンプレート変数 {{current_status}}、{{valid_exits}}、{{current_phase}}、{{valid_phases}} を使用できます。
ゲート
ゲートは、ステータスまたはフェーズの遷移前に満たす必要がある要件です。
gates:
status:working:
- type: gate/tests
enforcement: warn
description: "Tests must pass"
証拠を添付してゲートを満たします。
attach(task="123", type="gate/tests", content="All tests passing")
適用レベル:allow(助言)、warn(force=true でない限りブロック)、reject(強制ブロック)
ファイルの調整
エージェントは、変更追跡機能付きのアドバイザリーマークを使用して、ファイル編集を調整できます。
Worker A: connect() -> "worker-a"
Worker A: mark_file("worker-a", "src/main.rs", "refactoring")
Worker B: connect() -> "worker-b"
Worker B: mark_updates("worker-b") -> sees worker-a's mark
Worker A: unmark_file("worker-a", "src/main.rs", "ready for review")
Worker B: mark_updates("worker-b") -> sees removal with reason
Worker B: mark_file("worker-b", "src/main.rs", "adding tests")
アーキテクチャ
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Agent A │ │ Agent B │ │ Agent C │
│ (Claude) │ │ (GPT-4) │ │ (Worker) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ stdio │ stdio │ stdio
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ task-graph │ │ task-graph │ │ task-graph │
│ MCP │ │ MCP │ │ MCP │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└───────────────────┼───────────────────┘
▼
┌─────────────────┐
│ SQLite + WAL │
│ .task-graph/ │
│ tasks.db │
└─────────────────┘
- トランスポート:Stdio — 各ワーカーが独自のサーバープロセスを起動します
- データベース:プロセス間の同時アクセスに対応するWALモードのSQLite
- デプロイ:単一のバイナリで、外部依存関係がなく、オフラインで動作します
代替手段との比較
| タスクグラフ | 線形タスクリスト | カスタムデータベース | |
|---|---|---|---|
| ワークフローフェーズ | ✓ プロンプトで標準搭載 | ✗ 手動で追跡 | DIY |
| 品質ゲート | ✓ 設定可能な適用 | ✗ | DIY |
| マルチエージェント対応 | ✓ アトミックな確保、ファイルロック | ✗ 競合状態 | 場合による、DIY |
| 依存関係の追跡 | ✓ サイクル検出機能付きDAG | ✗ 手動で順序付け | DIY |
| MCP ネイティブ | ✓ ネイティブ対応 | ✗ ラッパーが必要 | ✗ ラッパーが必要 |
| トークンの計上 | ✓ 標準搭載 | ✗ | DIY |
| セットアップ | 不要 | 不要 | データベースサーバー |
ドキュメント
| ドキュメント | 説明 |
|---|---|
| CONFIGURATION.md | 設定リファレンス全般(config.yaml、ワークフロー、プロンプト、ゲート、タグ) |
| SCHEMA.md | データベーススキーマとステートマシンのドキュメント |
| DESIGN.md | アーキテクチャと設計上の判断 |
| WORKFLOW_TOPOLOGIES.md | マルチエージェントのワークフローパターン(単独、スウォーム、リレー、階層型) |
| EXPORT_IMPORT.md | データのエクスポートおよびインポート機能 |
| PROCESSES.md | リリースプロセス、変更履歴の管理 |
| GATES.md | ワークフローのゲート条件と適用 |
| METRICS.md | 実験メトリクスの定義とSQLの例 |
ライセンス
Apache 2.0
構造化されたワークフローと信頼性の高い連携を必要とするAIエージェントのために構築されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。