Temporal.io + Claude Agent SDK によるマルチエージェント ワークフローエンジン。
1つのプロンプトから6種の専門エージェントがパイプライン処理し、品質レビュー付きの最終回答を生成します。
Prompt
└─ Planner ──► Validator
│
▼
┌───────────────┐
│ 並列実行 │
│ Executor₁→Rev₁ │
│ Executor₂→Rev₂ │
│ Executor₃→Rev₃ │
└───────┬───────┘
▼
Integrator ──► Integration Reviewer ──► Final Response
最もシンプルな方法。Temporal, Worker, Web UI を一発で起動します。
コンテナは Claude Code CLI の OAuth セッションをホストから引き継ぎます。 まだ認証していない場合は、ローカルで一度実行してください:
# Claude Code CLI をインストール (まだの場合)
npm install -g @anthropic-ai/claude-code
# 認証 (ブラウザが開きます)
claude auth login
macOS の場合: Claude Code v2.1+ は認証情報を macOS キーチェーンに保存します。 Docker コンテナはキーチェーンにアクセスできないため、起動スクリプトが自動的にキーチェーンからファイルに同期します。
git clone https://github.com/skmtkytr/agentic.git
cd agentic
npm install
# キーチェーン同期 + Docker 起動を一発で
npm run docker:up
または手動で:
# キーチェーンから認証情報を同期 (macOS)
bash scripts/sync-credentials.sh
# Docker 起動
docker compose up --build
| サービス | URL | 説明 |
|---|---|---|
| Web UI | http://localhost:3001 | メインのダッシュボード |
| Temporal UI | http://localhost:8080 | ワークフロー管理コンソール |
docker compose down
デフォルトでは ~/.claude をマウントします。別の場所にある場合:
CLAUDE_CONFIG_DIR=/path/to/.claude docker compose up --build
認証エラー (OAuth token has expired)
Claude Code v2.1+ は認証情報を macOS キーチェーンに保存するため、Docker コンテナからは直接参照できません。
# 1. キーチェーンから認証情報を再同期
bash scripts/sync-credentials.sh
# 2. コンテナを再起動
docker compose restart worker server
トークンが完全に失効している場合:
claude auth login
bash scripts/sync-credentials.sh
docker compose restart worker server
Temporal 接続エラー
Temporal の起動に数秒かかります。Worker/Server が先に起動してエラーになる場合は少し待って:
docker compose restart worker server
Docker を使わず、各コンポーネントを個別に起動する方法。
brew install temporal or 公式ドキュメント)git clone https://github.com/skmtkytr/agentic.git
cd agentic
npm install
cd web && npm install && cd ..
# ターミナル 1: Temporal Server
temporal server start-dev
# ターミナル 2: Worker
npm run worker
# ターミナル 3: API Server + Web UI
npm run server
# → http://localhost:3001
# ターミナル 4 (オプション): Vite dev server
npm run web:dev
# → http://localhost:5173 (API は 3001 にプロキシ)
npm start "TypeScriptでRESTful APIを設計してください"
┌─────────────────────────────────────────────────┐
│ Web UI │
│ (Svelte + Vite) │
│ http://localhost:3001 │
└─────────────┬───────────────────────────────────┘
│ SSE / REST API
┌─────────────▼───────────────────────────────────┐
│ Express Server │
│ (src/server/app.ts) │
│ POST /api/run GET /api/status/:id (SSE) │
│ GET /api/workflows GET /api/result/:id │
└─────────────┬───────────────────────────────────┘
│ Temporal Client
┌─────────────▼───────────────────────────────────┐
│ Temporal Server │
│ (Workflow Orchestration) │
│ Retry, Timeout, Signal, Query, History │
└─────────────┬───────────────────────────────────┘
│ Activity Execution
┌─────────────▼───────────────────────────────────┐
│ Worker │
│ (src/worker.ts) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Planner │ │Validator │ │ Executor×N │ │
│ │ │ │ │ │ → Reviewer×N │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────────────┐ ┌────────────────────────┐ │
│ │ Integrator │ │ Integration Reviewer │ │
│ └──────────────────┘ └────────────────────────┘ │
│ │
│ Claude Agent SDK (query()) │
│ └─ claude CLI subprocess │
└───────────────────────────────────────────────────┘
| エージェント | 役割 | 入力 | 出力 |
|---|---|---|---|
| Planner | プロンプトを DAG タスクに分解 | prompt | TaskPlan (tasks + planSummary) |
| Validator | DAG の妥当性検証 | plan | valid/issues/revisedPlan |
| Executor | 個別タスクを実行 (ツール使用可) | task + context + allowedTools | result + toolUsage |
| Reviewer | タスク結果の品質レビュー | result + toolUsage | passed/notes/revisedResult |
| Integrator | レビュー済みタスクを統合 | reviewedTasks | integratedResponse |
| Integration Reviewer | 最終 QA | integratedResponse + toolEvidence | passed/notes/revisedResponse |
UI から Executor に許可するツールを選択できます:
| ツール | 説明 |
|---|---|
| Read | ファイル読み取り |
| Write | ファイル書き込み |
| Edit | ファイル編集 |
| Bash | シェルコマンド実行 |
| Glob | ファイルパターン検索 |
| Grep | ファイル内容検索 |
| WebFetch | URL からデータ取得 |
| WebSearch | Web 検索 |
| NotebookEdit | Jupyter ノートブック編集 |
| Task | サブタスク委譲 |
| ToolSearch | 利用可能ツール検索 |
npm test
111 テスト:
| 変数 | デフォルト | 説明 |
|---|---|---|
TEMPORAL_ADDRESS |
localhost:7233 |
Temporal Server のアドレス |
TEMPORAL_NAMESPACE |
default |
Temporal の namespace |
CLAUDE_MODEL |
claude-opus-4-6 |
デフォルトモデル |
PORT |
3001 |
Express サーバーのポート |
CLAUDE_CONFIG_DIR |
~/.claude |
Claude Code 認証ディレクトリ (Docker 用) |
ANTHROPIC_API_KEYは不要です。Claude Agent SDK が Claude Code CLI の OAuth セッションを使用します。
MIT