407 lines
15 KiB
Markdown
407 lines
15 KiB
Markdown
# TAKT
|
||
|
||
**T**ask **A**gent **K**oordination **T**ool - Claude CodeとOpenAI Codex向けのマルチエージェントオーケストレーションシステム
|
||
|
||
> **Note**: このプロジェクトは個人のペースで開発されています。詳細は[免責事項](#免責事項)をご覧ください。
|
||
|
||
## 必要条件
|
||
|
||
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) または Codex がインストール・設定済みであること
|
||
|
||
TAKTはClaude CodeとCodexの両方をプロバイダーとしてサポートしています。セットアップ時にプロバイダーを選択できます。
|
||
|
||
## インストール
|
||
|
||
```bash
|
||
npm install -g takt
|
||
```
|
||
|
||
## クイックスタート
|
||
|
||
```bash
|
||
# タスクを実行(ワークフロー選択プロンプトが表示されます)
|
||
takt "ログイン機能を追加して"
|
||
|
||
# タスクをキューに追加
|
||
takt /add-task "ログインのバグを修正"
|
||
|
||
# 保留中のタスクをすべて実行
|
||
takt /run-tasks
|
||
|
||
# タスクを監視して自動実行
|
||
takt /watch
|
||
|
||
# ワークフローを切り替え
|
||
takt /switch
|
||
```
|
||
|
||
## コマンド一覧
|
||
|
||
| コマンド | 説明 |
|
||
|---------|------|
|
||
| `takt "タスク"` | 現在のワークフローでタスクを実行(セッション継続) |
|
||
| `takt -r "タスク"` | 前回のセッションを再開してタスクを実行 |
|
||
| `takt /run-tasks` | `.takt/tasks/` の保留中タスクをすべて実行 |
|
||
| `takt /watch` | `.takt/tasks/` を監視してタスクを自動実行(常駐プロセス) |
|
||
| `takt /add-task` | 新しいタスクを対話的に追加(YAML形式) |
|
||
| `takt /switch` | ワークフローを対話的に切り替え |
|
||
| `takt /clear` | エージェントの会話セッションをクリア |
|
||
| `takt /refresh-builtin` | ビルトインのエージェント/ワークフローを最新版に更新 |
|
||
| `takt /config` | 現在の設定を表示 |
|
||
| `takt /help` | ヘルプを表示 |
|
||
|
||
## 実践的な使い方ガイド
|
||
|
||
### `-r` でセッションを再開する
|
||
|
||
TAKTの実行中にエージェントから追加の情報を求められた場合(例:「詳細を教えてください」)、`-r`フラグを使って会話を継続できます:
|
||
|
||
```bash
|
||
# 最初の実行 - エージェントが確認を求めることがある
|
||
takt "ログインのバグを直して"
|
||
|
||
# 同じセッションを再開して要求された情報を提供
|
||
takt -r "パスワードに特殊文字が含まれているとバグが発生します"
|
||
```
|
||
|
||
`-r`フラグはエージェントの会話履歴を保持し、自然なやり取りを可能にします。
|
||
|
||
### タスク管理
|
||
|
||
TAKTは`.takt/tasks/`内のタスクファイルによるバッチ処理をサポートしています。`.yaml`/`.yml`と`.md`の両方のファイル形式に対応しています。
|
||
|
||
#### `/add-task` でタスクを追加
|
||
|
||
```bash
|
||
# クイック追加(worktreeなし)
|
||
takt /add-task "認証機能を追加"
|
||
|
||
# 対話モード(worktree、ブランチ、ワークフローオプションを指定可能)
|
||
takt /add-task
|
||
```
|
||
|
||
#### タスクファイルの形式
|
||
|
||
**YAML形式**(推奨、worktree/branch/workflowオプション対応):
|
||
|
||
```yaml
|
||
# .takt/tasks/add-auth.yaml
|
||
task: "認証機能を追加する"
|
||
worktree: true # 隔離されたgit worktreeで実行
|
||
branch: "feat/add-auth" # ブランチ名(省略時は自動生成)
|
||
workflow: "default" # ワークフロー指定(省略時は現在のもの)
|
||
```
|
||
|
||
**Markdown形式**(シンプル、後方互換):
|
||
|
||
```markdown
|
||
# .takt/tasks/add-login-feature.md
|
||
|
||
アプリケーションにログイン機能を追加する。
|
||
|
||
要件:
|
||
- ユーザー名とパスワードフィールド
|
||
- フォームバリデーション
|
||
- 失敗時のエラーハンドリング
|
||
```
|
||
|
||
#### Git Worktree による隔離実行
|
||
|
||
YAMLタスクファイルで`worktree`を指定すると、各タスクを隔離されたgit worktreeで実行し、メインの作業ディレクトリをクリーンに保てます:
|
||
|
||
- `worktree: true` - `.takt/worktrees/{timestamp}-{task-slug}/`に自動作成
|
||
- `worktree: "/path/to/dir"` - 指定パスに作成
|
||
- `branch: "feat/xxx"` - 指定ブランチを使用(省略時は`takt/{timestamp}-{slug}`で自動生成)
|
||
- `worktree`省略 - カレントディレクトリで実行(デフォルト)
|
||
|
||
#### `/run-tasks` でタスクを実行
|
||
|
||
```bash
|
||
takt /run-tasks
|
||
```
|
||
|
||
- タスクはアルファベット順に実行されます(`001-`、`002-`のようなプレフィックスで順序を制御)
|
||
- 完了したタスクは実行レポートとともに`.takt/completed/`に移動されます
|
||
- 実行中に追加された新しいタスクも動的に取得されます
|
||
|
||
#### `/watch` でタスクを監視
|
||
|
||
```bash
|
||
takt /watch
|
||
```
|
||
|
||
ウォッチモードは`.takt/tasks/`をポーリングし、新しいタスクファイルが現れると自動実行します。`Ctrl+C`で停止する常駐プロセスです。以下のような場合に便利です:
|
||
- タスクファイルを生成するCI/CDパイプライン
|
||
- 外部プロセスがタスクを追加する自動化ワークフロー
|
||
- タスクを順次キューイングする長時間の開発セッション
|
||
|
||
### カスタムワークフローの追加
|
||
|
||
`~/.takt/workflows/`にYAMLファイルを追加して独自のワークフローを作成できます:
|
||
|
||
```yaml
|
||
# ~/.takt/workflows/my-workflow.yaml
|
||
name: my-workflow
|
||
description: カスタムワークフロー
|
||
|
||
max_iterations: 5
|
||
|
||
steps:
|
||
- name: analyze
|
||
agent: ~/.takt/agents/my-agents/analyzer.md
|
||
instruction_template: |
|
||
このリクエストを分析してください: {task}
|
||
transitions:
|
||
- condition: done
|
||
next_step: implement
|
||
|
||
- name: implement
|
||
agent: ~/.takt/agents/default/coder.md
|
||
instruction_template: |
|
||
分析に基づいて実装してください: {previous_response}
|
||
pass_previous_response: true
|
||
transitions:
|
||
- condition: done
|
||
next_step: COMPLETE
|
||
```
|
||
|
||
### エージェントをパスで指定する
|
||
|
||
ワークフロー定義ではファイルパスを使ってエージェントを指定します:
|
||
|
||
```yaml
|
||
# ビルトインエージェントを使用
|
||
agent: ~/.takt/agents/default/coder.md
|
||
agent: ~/.takt/agents/magi/melchior.md
|
||
|
||
# プロジェクトローカルのエージェントを使用
|
||
agent: ./.takt/agents/my-reviewer.md
|
||
|
||
# 絶対パスを使用
|
||
agent: /path/to/custom/agent.md
|
||
```
|
||
|
||
カスタムエージェントプロンプトをMarkdownファイルとして作成:
|
||
|
||
```markdown
|
||
# ~/.takt/agents/my-agents/reviewer.md
|
||
|
||
あなたはセキュリティに特化したコードレビュアーです。
|
||
|
||
## 役割
|
||
- セキュリティ脆弱性をチェック
|
||
- 入力バリデーションを検証
|
||
- 認証ロジックをレビュー
|
||
|
||
## 出力形式
|
||
- [REVIEWER:APPROVE] コードが安全な場合
|
||
- [REVIEWER:REJECT] 問題が見つかった場合(問題点をリストアップ)
|
||
```
|
||
|
||
### ワークフロー変数
|
||
|
||
`instruction_template`で使用可能な変数:
|
||
|
||
| 変数 | 説明 |
|
||
|------|------|
|
||
| `{task}` | 元のユーザーリクエスト |
|
||
| `{iteration}` | ワークフロー全体のターン数(実行された全ステップ数) |
|
||
| `{max_iterations}` | 最大イテレーション数 |
|
||
| `{step_iteration}` | ステップごとのイテレーション数(このステップが実行された回数) |
|
||
| `{previous_response}` | 前のステップの出力(`pass_previous_response: true`が必要) |
|
||
| `{user_inputs}` | ワークフロー中の追加ユーザー入力 |
|
||
| `{git_diff}` | 現在のgit diff(コミットされていない変更) |
|
||
| `{report_dir}` | レポートディレクトリ名(例:`20250126-143052-task-summary`) |
|
||
|
||
### ワークフローの設計
|
||
|
||
各ワークフローステップには3つの重要な要素が必要です。
|
||
|
||
**1. エージェント** - システムプロンプトを含むMarkdownファイル:
|
||
|
||
```yaml
|
||
agent: ~/.takt/agents/default/coder.md # エージェントプロンプトファイルのパス
|
||
agent_name: coder # 表示名(オプション)
|
||
```
|
||
|
||
**2. ステータスルール** - エージェントが完了を通知する方法を定義。エージェントは`[CODER:DONE]`や`[ARCHITECT:REJECT]`のようなステータスマーカーを出力し、TAKTがそれを検出して遷移を駆動します:
|
||
|
||
```yaml
|
||
status_rules_prompt: |
|
||
最終出力には必ずステータスタグを含めてください:
|
||
- `[CODER:DONE]` 実装が完了した場合
|
||
- `[CODER:BLOCKED]` 進行できない場合
|
||
```
|
||
|
||
**3. 遷移** - ステータスに基づいて次のステップにルーティング:
|
||
|
||
```yaml
|
||
transitions:
|
||
- condition: done # ステータスタグDONEに対応
|
||
next_step: review # reviewステップへ遷移
|
||
- condition: blocked # ステータスタグBLOCKEDに対応
|
||
next_step: ABORT # ワークフローを失敗終了
|
||
```
|
||
|
||
使用可能な遷移条件:`done`、`blocked`、`approved`、`rejected`、`improve`、`always`
|
||
特殊なnext_step値:`COMPLETE`(成功)、`ABORT`(失敗)
|
||
|
||
**ステップオプション:**
|
||
|
||
| オプション | デフォルト | 説明 |
|
||
|-----------|-----------|------|
|
||
| `pass_previous_response` | `true` | 前のステップの出力を`{previous_response}`に渡す |
|
||
| `on_no_status` | - | ステータス未検出時の動作:`complete`、`continue`、`stay` |
|
||
| `allowed_tools` | - | エージェントが使用できるツール一覧(Read, Glob, Grep, Edit, Write, Bash等) |
|
||
| `provider` | - | このステップのプロバイダーを上書き(`claude`または`codex`) |
|
||
| `model` | - | このステップのモデルを上書き |
|
||
|
||
## ワークフロー
|
||
|
||
TAKTはYAMLベースのワークフロー定義を使用します。以下に配置してください:
|
||
- `~/.takt/workflows/*.yaml`
|
||
|
||
### ワークフローの例
|
||
|
||
```yaml
|
||
name: default
|
||
max_iterations: 10
|
||
|
||
steps:
|
||
- name: implement
|
||
agent: coder
|
||
instruction_template: |
|
||
{task}
|
||
transitions:
|
||
- condition: done
|
||
next_step: review
|
||
- condition: blocked
|
||
next_step: ABORT
|
||
|
||
- name: review
|
||
agent: architect
|
||
transitions:
|
||
- condition: approved
|
||
next_step: COMPLETE
|
||
- condition: rejected
|
||
next_step: implement
|
||
```
|
||
|
||
## ビルトインワークフロー
|
||
|
||
TAKTには複数のビルトインワークフローが同梱されています:
|
||
|
||
| ワークフロー | 説明 |
|
||
|------------|------|
|
||
| `default` | フル開発ワークフロー:計画 → 実装 → アーキテクトレビュー → AIレビュー → セキュリティレビュー → スーパーバイザー承認。各レビュー段階に修正ループあり。 |
|
||
| `simple` | defaultの簡略版:計画 → 実装 → アーキテクトレビュー → AIレビュー → スーパーバイザー。中間の修正ステップなし。 |
|
||
| `research` | リサーチワークフロー:プランナー → ディガー → スーパーバイザー。質問せずに自律的にリサーチを実行。 |
|
||
| `expert-review` | ドメインエキスパートによる包括的レビュー:CQRS+ES、フロントエンド、AI、セキュリティ、QAレビューと修正ループ。 |
|
||
| `magi` | エヴァンゲリオンにインスパイアされた審議システム。3つのAIペルソナ(MELCHIOR、BALTHASAR、CASPER)が分析し投票。 |
|
||
|
||
`takt /switch` でワークフローを切り替えられます。
|
||
|
||
## ビルトインエージェント
|
||
|
||
- **coder** - 機能を実装しバグを修正
|
||
- **architect** - コードをレビューしフィードバックを提供
|
||
- **supervisor** - 最終検証と承認
|
||
- **planner** - タスク分析と実装計画
|
||
- **ai-reviewer** - AI生成コードの品質レビュー
|
||
- **security** - セキュリティ脆弱性の評価
|
||
|
||
## カスタムエージェント
|
||
|
||
`.takt/agents.yaml`でカスタムエージェントを定義:
|
||
|
||
```yaml
|
||
agents:
|
||
- name: my-reviewer
|
||
prompt_file: .takt/prompts/reviewer.md
|
||
allowed_tools: [Read, Glob, Grep]
|
||
provider: claude # オプション:claude または codex
|
||
model: opus # Claude: opus/sonnet/haiku、Codex: gpt-5.2-codex 等
|
||
status_patterns:
|
||
approved: "\\[APPROVE\\]"
|
||
rejected: "\\[REJECT\\]"
|
||
```
|
||
|
||
## プロジェクト構造
|
||
|
||
```
|
||
~/.takt/
|
||
├── config.yaml # グローバル設定(プロバイダー、モデル、ワークフロー等)
|
||
├── workflows/ # ワークフロー定義
|
||
└── agents/ # エージェントプロンプトファイル
|
||
|
||
.takt/ # プロジェクトレベルの設定
|
||
├── agents.yaml # カスタムエージェント定義
|
||
├── tasks/ # 保留中のタスクファイル(.yaml, .md)
|
||
├── completed/ # 完了したタスクとレポート
|
||
├── worktrees/ # タスク隔離実行用のgit worktree
|
||
├── reports/ # 実行レポート(自動生成)
|
||
└── logs/ # セッションログ
|
||
```
|
||
|
||
## API使用例
|
||
|
||
```typescript
|
||
import { WorkflowEngine, loadWorkflow } from 'takt'; // npm install takt
|
||
|
||
const config = loadWorkflow('default');
|
||
if (!config) {
|
||
throw new Error('Workflow not found');
|
||
}
|
||
const engine = new WorkflowEngine(config, process.cwd(), 'My task');
|
||
|
||
engine.on('step:complete', (step, response) => {
|
||
console.log(`${step.name}: ${response.status}`);
|
||
});
|
||
|
||
await engine.run();
|
||
```
|
||
|
||
## 免責事項
|
||
|
||
このプロジェクトは個人プロジェクトであり、私自身のペースで開発されています。
|
||
|
||
- **レスポンス時間**: イシューにすぐに対応できない場合があります
|
||
- **開発スタイル**: このプロジェクトは主に「バイブコーディング」(AI支援開発)で開発されています - **自己責任でお使いください**
|
||
- **プルリクエスト**:
|
||
- 小さく焦点を絞ったPR(バグ修正、タイポ、ドキュメント)は歓迎します
|
||
- 大きなPR、特にAI生成の一括変更はレビューが困難です
|
||
|
||
詳細は[CONTRIBUTING.md](../CONTRIBUTING.md)をご覧ください。
|
||
|
||
## Docker サポート
|
||
|
||
他の環境でのテスト用にDocker環境が提供されています:
|
||
|
||
```bash
|
||
# Dockerイメージをビルド
|
||
docker compose build
|
||
|
||
# コンテナでテストを実行
|
||
docker compose run --rm test
|
||
|
||
# コンテナでlintを実行
|
||
docker compose run --rm lint
|
||
|
||
# ビルドのみ(テストをスキップ)
|
||
docker compose run --rm build
|
||
```
|
||
|
||
これにより、クリーンなNode.js 20環境でプロジェクトが正しく動作することが保証されます。
|
||
|
||
## ドキュメント
|
||
|
||
- [Workflow Guide](./workflows.md) - ワークフローの作成とカスタマイズ
|
||
- [Agent Guide](./agents.md) - カスタムエージェントの設定
|
||
- [Changelog](../CHANGELOG.md) - バージョン履歴
|
||
- [Security Policy](../SECURITY.md) - 脆弱性報告
|
||
- [ブログ:TAKT - AIエージェントオーケストレーション](https://zenn.dev/nrs/articles/c6842288a526d7) - 設計思想と実践的な使い方ガイド
|
||
|
||
## ライセンス
|
||
|
||
MIT - 詳細は[LICENSE](../LICENSE)をご覧ください。
|