Gensuiは、複数のAIコーディングエージェントを同時に扱うためのTUI(Text User Interface)ベースのマルチワーカー管理ツールです。Issue対応のばらつきやコンテキストスイッチの負担を減らし、定義済みワークフローに沿った自動処理で品質と速度を両立します。
- 複数Issueを並行していると進捗が散逸しやすい
- ブラウザやターミナルのタブが増え、現在地が分からなくなる
- コマンド操作を毎回手で行うのは煩雑
- 担当者によって対応手順が異なり品質が揺らぐ
- k9s風キーバインドを備えたTUIダッシュボード
- 各ワーカーを独立した
git worktree上で稼働させてコンフリクトを回避 - Claude Code / Codex / Cursor / Aiderなど、複数エージェントを並列実行
- ワークフロー定義に従い、分析→実装→テストといったステップを順番に遂行
- リアルタイムでステータス・編集中ファイル・トークン使用量・ログを可視化
- 複数Issueの同時進行: Issueごとにワーカーを割り当て、進捗を一覧で管理
- アプローチ比較実験: 同一Issueを複数エージェントで試行しアウトプットを比較
- チーム開発の標準化: 担当者ごとの作業をワークフローで統一し品質を平準化
対応エージェント例: Claude Code、OpenAI Codex、Cursor、Aider など。
┌─ Gensui [workers] ─────────────────────────────────────────┐
│ NAME STATUS ISSUE AGENT WORKTREE BRANCH │
│ worker-1 Running #123 Claude Code .wt/wt-1 fix123 │
│ worker-2 Paused #456 Codex .wt/wt-2 feat │
│ ... ... │
├────────────────────────────────────────────────────────────┤
│ <0> all <1> running <2> paused <3> failed <4> idle │
│ <enter> view <d> delete <l> logs <p> pause <r> restart <:> │
└────────────────────────────────────────────────────────────┘
- メインビュー: ワーカーの一覧・フィルタ・ソート・カラーコード(緑=Running, 黄=Paused, 赤=Failed, 灰=Idle)
- 詳細ビュー: Issue情報、ブランチ、実行中ステップ、セッションIDなどを表示
- ログビュー:
follow/wrapを備えたリアルタイムログモニタ - キーバインド:
Enter詳細、n新規、p一時停止、lログ、:コマンドモード、/フィルタ、q終了
- Issue番号を指定し、GitHub等からメタ情報を取得
git worktree add .worktrees/wt-{id} -b feature/issue-{number}で専用環境を生成- ベースブランチから新規ブランチを作成してチェックアウト
- 選択したエージェントをworktree内でHeadless起動し、Issueテンプレートをプロンプトとして投入
- 定義済みワークフローを順次実行し、各ステップの結果をTUIへストリーミング
- 正常終了時はworktreeの削除/保持を選択、異常終了時はworktreeを保持してデバッグに備える
| アプローチ | 概要 | 長所 | 短所 | 用途 |
|---|---|---|---|---|
| Headless CLI (推奨) | npx @anthropic-ai/claude-code@latest --output-format stream-jsonなどを外部プロセスとして起動 |
並行実行とリアルタイム監視に最適、言語自由度が高い | プロセス管理とエラーハンドリングが複雑 | Gensui本体実装 |
| Agent SDK | @anthropic-ai/claude-agent-sdk等でAsyncIteratorを利用 |
型安全・公式サポート | Node.js依存、カスタマイズ性やや低い | 追加オプションとして |
| MCP Server | Claude Code内のプラグインとして提供 | セットアップ簡単、エディタ統合が容易 | 独立TUIには不向き、並列性が低い | Claude Code拡張用途 |
GensuiではHeadless CLI方式を標準とし、command-groupでプロセスグルーピング、JSON Lines出力のパース、ANSI除去等でTUIに連携します。
- 基本ポリシー:
--allowedTools "Read,Write,Edit,Bash,Grep" --permission-mode acceptEdits - Sandboxモード: デフォルトで有効。Claude Codeのファイルシステムアクセスをworktree内に制限し、システム全体への予期しない変更を防止
- 設定方法:
.claude/settings.jsonで制御(プロジェクトルートに配置) - デフォルト設定:
{ "sandbox": { "enabled": true, "autoAllowBashIfSandboxed": true } } - セキュリティ優先の設計により、デフォルトでsandboxは常に有効
- 無効化する場合は
.claude/settings.local.jsonで"enabled": falseを設定(非推奨)
- 設定方法:
.claude/settings.jsonでプロジェクト固有ルールをホワイトリスト/ブラックリスト管理- 機密ファイル (
.env,secrets/**) へのアクセスは明示的に拒否 - 危険コマンド (
rm,curlなど) は許可制。実行前に差分やコマンドを確認するガードを実装 - Enterprise → プロジェクト共有 → ローカル → ユーザー設定の優先順位で適用
- Claude Codeからツール使用権限が要求されるたびにTUI上へモーダルを表示し、
←/→で選択・Enter/Yで許可・Esc/Nで拒否できるフローを実装。応答内容はワーカーログとアクションログに記録されます。
- セッション履歴の自動記録: Claude Code実行時のすべてのイベント(ツール使用、メッセージ、思考プロセス、結果)を構造化して保存
- セッションIDの管理:
session_idを自動取得・保存し、--continueで同一セッションを継続 - 詳細な履歴追跡:
- ツール使用履歴(Read/Write/Edit/Bashなど)
- 編集されたファイル一覧
- Claudeの思考プロセス(Thinking Blocks)
- エラーと結果の完全な記録
- 永続化:
.gensui/state/workers/*.jsonにセッション履歴を保存し、再起動後も復元 - worktreeごとに
.sessionとCLAUDE.mdを配置し、永続コンテキストとターン数を追跡 - ターン数やトークン使用量が閾値を超えたら警告し、
/compactなどの圧縮コマンドを推奨
- 言語: RustまたはGo(並行処理とパフォーマンス重視)
- TUI: Rustなら
ratatui、Goならtview/bubbletea - Git操作:
git2クレート/gitCLIラッパ - 非同期I/O: Rust
tokio、Gogoroutine - 設定: YAML/TOMLでワークフロー定義、
.claudeディレクトリにセッション情報を保存
- Phase 1 (MVP): メインTUI、ワーカー作成/削除、worktree自動化、Claude Code対応
- Phase 2: 詳細/ログビュー、複数エージェント対応、ワークフロー定義、検索・フィルタ機能
- Phase 3: CPU/メモリ/トークン監視、自動リトライ、メトリクス分析、プラグイン拡張
- Vibe Kanban (Rust + React):
command-groupによるプロセス制御、非同期ストリーム処理、エージェントプロファイル管理、git自動化 - Claude Task Master (TypeScript): Agent SDK + MCP統合、PRD解析によるタスク自動生成、マルチプロバイダー抽象化
これらのベストプラクティスを取り込みつつ、GensuiはTUI特化・git worktree連携・リアルタイム監視で差別化を図ります。
- Rust +
ratatuiでのプロトタイプ実装 - worktree管理ライブラリ/ラッパの整備
- Claude Code Headless制御用モジュール作成
- 基本ワークフロー(分析→実装→テスト)をテンプレート化
- 早期ユーザーフィードバックの収集と設計改善
Gensuiによって、AIエージェントを活用したマルチIssue処理を安全かつ効率的に進めましょう。
開発用の最小構成TUIを用意しました。cargo runで起動すると、実際にgit worktreeを作成/削除しながら、簡易的なエージェント処理(シミュレーション)とログストリームを確認できます。
cargo run
q: アプリケーション終了c: 新しいワーカーのプロビジョンを実行(git worktree追加+エージェント起動)d: 選択中のワーカーを削除r: 選択中ワーカーを再起動(ワークフローを再実行)a: ステータスフィルタを循環(All → Running → Paused → Failed → Idle → All)w: 利用するワークフローを切り替え(workflows.jsonで定義)i: 自由指示を入力し、そのままClaudeに送信j/kまたは↑/↓: 行の移動l: アクションログのモーダル表示切り替えh: ヘルプモーダル表示切り替えShift+C: ログを圧縮(古いログを上限4件まで削除)
リポジトリ直下のworkflows.jsonからワークフローを読み込みます。ファイルが存在しない・空の場合はデフォルトの3ステップ(分析→実装→テスト)が自動挿入されます。
{
"default_workflow": "default",
"workflows": [
{
"name": "default",
"description": "分析→実装→テストの標準フロー",
"steps": [
{ "name": "分析", "command": "echo '[分析] Issueを解析しています'" },
{ "name": "実装", "command": "echo '[実装] 変更を適用中'" },
{ "name": "テスト", "command": "echo '[テスト] テストを実行中'" }
]
}
]
}ヘッダ/フッタに現在選択中のワークフロー名が表示され、wキーで順次切り替え可能です。ワーカー作成時には選択中のワークフローが適用され、各ステップのコマンド実行ログがLogsモーダルから確認できます。
ステップにclaudeブロックを定義すると、Claude Code CLIをheadless実行します。CLIへのパスは環境変数GENSUI_CLAUDE_BIN(デフォルト: claude)で指定します。例:
{
"name": "Claude分析",
"description": "Claude CodeにIssueの影響範囲をまとめさせる",
"claude": {
"prompt": "Issue {{issue}} について、影響範囲と懸念点を3点以内でまとめてください。",
"model": "sonnet",
"permission_mode": "plan",
"allowed_tools": [],
"extra_args": ["--max-output-tokens", "800"]
}
}デフォルトではすべてのClaude Codeステップでsandboxモードが有効です。Sandboxingは.claude/settings.jsonで制御します。
プロジェクトルートに.claude/settings.jsonを配置することで、すべてのClaude Code実行に適用されます:
{
"sandbox": {
"enabled": true,
"autoAllowBashIfSandboxed": true
}
}Sandboxを無効化する必要がある場合(非推奨)、.claude/settings.local.jsonで上書きできます:
{
"sandbox": {
"enabled": false
}
}注意: .claude/settings.local.jsonは個人用設定ファイルで、gitにコミットされません。チーム全体のセキュリティポリシーは.claude/settings.jsonで管理してください。
テンプレートでは{{issue}}、{{branch}}、{{worktree}}、{{worker}}が利用できます。extra_argsはCLI引数をそのまま追加し、{{prompt}}や{{workdir}}プレースホルダを埋め込みます。
⚠️ Claude CLIのバージョンによりフラグ名が異なる場合があります。必要に応じてextra_args側でフル引数を指定してください。非ゼロ終了の場合はステップがFailedとなり、stderr/stdoutをログに記録します。
ℹ️
.gensui/state/以下にワーカー状態とアクションログをJSONで保存します。再起動すると直近64件のアクションログと各ワーカーのステップ履歴が復元されます。
App::on_tick内で実ワーカーのポーリングと状態更新を実装- 実エージェント(Claude Code等)の出力をストリーミングし、ログビューに反映
- Action Logを永続化し、セッション再開時の履歴を復元
- ワークフロー定義に応じた前後処理(例: Issueメタ情報の取得、テストカバレッジ収集)