AgentTakt
AI エージェント(Executor)が生成したタスク実行計画(Plan)を、人間がターミナル上で視覚的にレビュー・編集・承認するための MCP(Model Context Protocol)サーバー兼 TUI ツール。
Claude Code 等の Executor が MCP 経由で送ってきた計画 JSON を、ComfyUI 風のビジュアルノードエディタとしてターミナルに描画する。人間はマウスとキーボードでノードの移動・追加・削除、依存関係(エッジ)の線引き、パラメータ編集を行い、「Approve」すると編集後の JSON が Executor に返って実行が始まる。
Claude Code (Executor)
│ stdio (MCP) 人間の別ターミナル
▼ │
[agenttakt serve] ── Unix domain socket ──▶ [agenttakt (TUI 常駐)]
MCP サーバー レビュー / 編集 / 承認
特徴
- ターミナル完結: Web UI を使わず、ターミナル環境のみで動作する
- ビジュアルノードエディタ: Textual による角丸ノード・依存関係の接続線・type 別色分け
- マウス中心の直感操作: ノードドラッグ、ポート間の線引き(ラバーバンド)、クリック選択・削除
- 安全な承認ループ: サイクル検出(DAG 保証)等のバリデーションを入口で行い、エージェントが自己修正できるエラーを返す
必要環境
- Python 3.10+(推奨: uv)
- マウスレポート対応のターミナルエミュレータ(iTerm2, WezTerm, kitty, Ghostty 等)
インストール
uv があればインストール不要で、uvx agenttakt で直接実行できる。常用する場合は以下のいずれかでインストールする。
uv tool install agenttakt # uv の場合
pipx install agenttakt # pipx の場合
ソースから開発する場合は clone して uv sync(開発 参照)。
クイックスタート
1. TUI を起動する(人間側・別ターミナル)
uvx agenttakt # インストール済みなら: agenttakt(短縮 alias: at)
待機画面が表示され、Executor からの計画到着を待つ。
2. Executor(Claude Code)に MCP サーバーを登録する
プロジェクトの .mcp.json に以下を追加する。
{
"mcpServers": {
"agenttakt": {
"command": "uvx",
"args": ["agenttakt", "serve"],
"timeout": 1800000
}
}
}
[!IMPORTANT]
timeout(ミリ秒)の明示設定は必須。request_approvalツールは人間がレビューを終えるまでブロックする。MCP の progress notification ではクライアント側タイムアウトは延長されないため、既定のままだと承認前に打ち切られる。上記例は 30 分(1800000)。
3. Executor から承認を依頼する
Executor が MCP ツール request_approval(plan, summary) を呼ぶと、TUI に計画がノードグラフとして表示される。人間が編集して承認/却下すると、結果が以下の形で返る。
{ "status": "approved", "plan": { "...編集後の計画..." }, "reason": null }
計画 JSON の形式は docs/schema.md を参照。
デバッグモード(MCP なしで試す)
uvx agenttakt open examples/sample_plan.json --out edited.json
ファイルから計画を読み込んでエディタを開き、承認結果を --out に書き出す。
キー操作
| キー | 動作 |
|---|---|
a |
プラン承認(確認ダイアログ) |
r |
プラン却下(理由入力) |
n |
ノード追加 |
d / Delete |
選択中のノード/エッジを削除 |
u / U |
Undo / Redo |
| 矢印 | 選択ノードを 1 セル移動(マウスの微調整) |
Escape |
選択解除 |
p |
パラメータパネルの表示切替 |
? |
ヘルプ(操作一覧と type / data の書き方) |
q |
終了 |
マウス: ノードをドラッグで移動、ノード右辺(出力ポート ●)からドラッグして相手ノードで離すとエッジ作成。
エッジは既定で braille による Bezier 風曲線で描画される。環境で表示が崩れる場合は --edges orthogonal で角丸直角線に切り替えられる。
ノードの各項目
- id — ノードを区別するための識別子(変更不可)
- type — 作業の種類。ノードの色分けに使われる。例:
grep(検索)、read(読解)、edit(編集)、test(テスト) - title — ノードの見出し(短い説明)
- data — 作業の具体的な指示(キーと値の組)
type / data には何を書けばよいか
書いた内容は、そのまま AI エージェント(Claude Code など)への指示になる。AgentTakt が中身を検査することはないため、AI に伝わる言葉なら何でも構わない(日本語の文章でも可)。
例:
grepならpattern(検索する語)とfiles(対象ファイル)editならfile(編集するファイル)とstrategy(編集方針)testならcommand(実行するコマンド)
ドキュメント
- アーキテクチャ — 2 プロセス構成の理由と承認フロー
- Plan JSON スキーマ — データモデルとバリデーション規則
- ブリッジプロトコル — MCP サーバー ⇔ TUI 間の socket プロトコル
開発
git clone https://github.com/ryoohshima/AgentTakt.git
cd AgentTakt
uv sync # 依存関係のインストール(dev 含む)
uv run pytest # テスト
uv run textual console # 開発コンソール(別ターミナル)
uv run textual run --dev src/agenttakt/tui/app.py
実装の進捗は 親 issue #3 と tasks/todo.md を参照。
ステータス
MVP 開発中。マイルストーン: M0 足場 → M1 静的描画 → M2 マウス編集 → M3 MCP 連携 → M4 磨き込み(braille 曲線ほか)。
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agenttakt-0.1.0.tar.gz.
File metadata
- Download URL: agenttakt-0.1.0.tar.gz
- Upload date:
- Size: 191.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8f0e30eee8a279e59a3e9ce1c50ad77244c8bee67b319bf6aacaef2b1a5af01
|
|
| MD5 |
564867e322fe04bdb5b25a58187457b5
|
|
| BLAKE2b-256 |
201b7fe4a80d421c0aa01e74f0da2637b8d60ef53255c5c830bc7a1fd775f69d
|
Provenance
The following attestation bundles were made for agenttakt-0.1.0.tar.gz:
Publisher:
release.yml on ryoohshima/AgentTakt
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agenttakt-0.1.0.tar.gz -
Subject digest:
a8f0e30eee8a279e59a3e9ce1c50ad77244c8bee67b319bf6aacaef2b1a5af01 - Sigstore transparency entry: 2339235116
- Sigstore integration time:
-
Permalink:
ryoohshima/AgentTakt@94454bb8ff98092bdfbf0bd38b08ca17f837dc29 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ryoohshima
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@94454bb8ff98092bdfbf0bd38b08ca17f837dc29 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agenttakt-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agenttakt-0.1.0-py3-none-any.whl
- Upload date:
- Size: 36.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b95aaddab7ce47d189a1e16d220184c9576f45053bc025f777b67b34ff6f84e
|
|
| MD5 |
27142ea68af961f3f6c6a38e84771b5e
|
|
| BLAKE2b-256 |
b9ef7a32be66e1cd1132f02fa9d101c300b0a4a92254c2dce3f0bff449c72dcc
|
Provenance
The following attestation bundles were made for agenttakt-0.1.0-py3-none-any.whl:
Publisher:
release.yml on ryoohshima/AgentTakt
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agenttakt-0.1.0-py3-none-any.whl -
Subject digest:
1b95aaddab7ce47d189a1e16d220184c9576f45053bc025f777b67b34ff6f84e - Sigstore transparency entry: 2339235134
- Sigstore integration time:
-
Permalink:
ryoohshima/AgentTakt@94454bb8ff98092bdfbf0bd38b08ca17f837dc29 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ryoohshima
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@94454bb8ff98092bdfbf0bd38b08ca17f837dc29 -
Trigger Event:
push
-
Statement type: