Drop-in Symphony for Claude Code. OpenAI Symphony 相当のエージェント オーケストレーションを Claude Code + GitHub Actions + GitHub Issues で再現する。
GitHub Issues をコントロールプレーンとして、Issue が opened された瞬間から Triage → 実装 / 調査 → ADR → 実装チケット分解 までを自動化します。
| あなたがやること | システムが自動でやること |
|---|---|
| Issue を立てる | LLM が内容を分析して 3 ルートに振り分け (Triage) |
claude-task ラベル付与 |
エージェントが調査・実装・テスト・PR 作成 |
investigation ラベル付与 |
エージェントが調査して ADR draft PR を作成 |
| ADR PR を approve & merge | ADR の「実装チケットへの分解」をパースして子 Issue を自動生成 |
@claude でメンション |
対話的に追加修正・質問対応 |
| (放置) | 2 時間以上停滞した Issue は claude-failed に自動遷移 |
Issue opened
│
▼
[symphony-triage.yml] LLM が 3 ルートに自動振り分け
│
├─ triage-A → 人間が claude-task ラベル付与
│ [symphony-dispatch.yml] → 実装 PR 作成 → 1 approve → merge
│
├─ triage-B → 人間が investigation ラベル付与
│ [symphony-investigate.yml] → ADR draft PR 作成
│ → 人間が ADR を編集・approve・merge
│ [symphony-decompose.yml] → 実装チケット自動生成
│ (Route A → symphony-dispatch.yml を workflow_dispatch で起動)
│ (Route C → triage-C 付与 → 人間対応キューへ)
│
└─ triage-C → 人間がアサイン・対応 (エージェントは関与しない)
[symphony-interactive.yml] @claude メンションで対話モード (任意のタイミング)
[symphony-cleanup.yml] 停滞 Issue を毎時クリーンアップ
詳細は以下を参照:
- DESIGN.md — 設計詳細
- docs/ARCHITECTURE_REVIEW.md — 網羅的アーキテクチャ レビュー資料 (v0.2.1 時点の全体像、設計判断、セキュリティ、既知課題、レビューチェックリスト)
導入形態は 2 つから選べます。新規リポジトリは A、既存リポジトリは C を推奨。
- このリポジトリの 「Use this template」 ボタンをクリック
- 自分の Organization / アカウント配下に新リポジトリを作成
- 初期セットアップ に進む
Note: テンプレートとして公開する側で、リポジトリ Settings → General → "Template repository" を有効化してください。
既存の git リポジトリのルートで以下を実行:
curl -fsSL https://raw.githubusercontent.com/Islanders-Treasure0969/claude-conductor/main/install.sh | bashオプション (環境変数で挙動を変更):
| 変数 | デフォルト | 用途 |
|---|---|---|
SYMPHONY_REF |
main |
取得するブランチ・タグ・commit hash |
SYMPHONY_REPO |
Islanders-Treasure0969/claude-conductor |
フォークから取得する場合 |
SYMPHONY_TARGET |
. |
インストール先ディレクトリ |
SYMPHONY_FORCE |
0 |
既存ファイルを上書き (1 で有効、自動で .bak を作成) |
例: 特定タグから取得・既存ファイルを上書き:
SYMPHONY_REF=v0.2.1 SYMPHONY_FORCE=1 \
bash <(curl -fsSL https://raw.githubusercontent.com/Islanders-Treasure0969/claude-conductor/main/install.sh)Note:
v0.1.0には install.sh のバグがあるためv0.1.1以上を指定してください (CHANGELOG の v0.1.1 を参照)。安定版は Releases ページから最新を確認してください。
導入形態 A / C どちらの場合も、以下の 3 ステップ を行ってください。
リポジトリ直下の CLAUDE.md に TODO: プレースホルダがあります。これがエージェントの
判断軸になるため、必ず埋めてください。
- プロジェクト概要 (技術スタック・主要ドメイン)
- ディレクトリ構成
- テストコマンド (例:
npm test/pytest/dbt test)
GitHub リポジトリの Settings → Secrets and variables → Actions で:
ANTHROPIC_API_KEYを追加 (API Key 取得)
# 要件: gh CLI (auth 済み) + yq v4+
brew install gh yq
gh auth login
./scripts/setup-labels.sh # カレントリポ
./scripts/setup-labels.sh owner/your-repo # 明示指定10 個のラベルが作成されます (triage-pending / triage-A / triage-B / triage-C /
claude-task / claude-in-progress / claude-review / claude-failed /
investigation / adr-draft)。
main ブランチに以下を設定することを強く推奨します:
- Require a pull request before merging
- Require approvals: 1 (エージェント PR も含めて全 PR に 1 approve 必須)
- Require status checks to pass before merging
Note (個人開発の場合): 同一アカウントから PR を作る solo dev では GitHub の self-approval ブロックで詰むため、
Require approvals: 0を推奨します (Symphony の「人間ゲート」は label 昇格と手動 merge の 2 アクションで実質的に 維持されます)。チーム開発では 1 以上を維持してください。
🔧 実装依頼 (Route A)テンプレートで Issue を作成- Actions タブで
Symphony Triageが起動することを確認 - Triage 結果コメントが Issue に投稿される (Route A/B/C のいずれか)
- Route A なら
claude-taskラベルを付与 →Symphony Dispatchが起動 - 成功すれば
claude-reviewラベル + PR 作成、失敗すればclaude-failed
| パス | 役割 |
|---|---|
.github/workflows/symphony-triage.yml |
① Issue opened → 3 ルート自動振り分け |
.github/workflows/symphony-dispatch.yml |
② claude-task → 実装エージェント |
.github/workflows/symphony-investigate.yml |
③ investigation → 調査エージェント (ADR draft) |
.github/workflows/symphony-decompose.yml |
④ ADR merge → 実装チケット自動生成 |
.github/workflows/symphony-interactive.yml |
⑤ @claude メンション対応 |
.github/workflows/symphony-cleanup.yml |
⑥ 停滞 Issue のタイムアウト処理 (毎時 cron) |
.github/ISSUE_TEMPLATE/claude-task.md |
Route A (実装依頼) 用 Issue テンプレート |
.github/ISSUE_TEMPLATE/investigation.md |
Route B (調査・設計依頼) 用 Issue テンプレート |
.github/labels.yml |
Symphony ステートマシン用ラベル定義 |
docs/adr/ADR-000-template.md |
ADR テンプレート (decompose のパース対象) |
scripts/setup-labels.sh |
ラベル一括作成・同期スクリプト |
templates/CLAUDE.md |
導入先リポジトリ用 CLAUDE.md テンプレート |
CLAUDE.md |
本リポジトリ自身の開発ルール |
DESIGN.md |
アーキテクチャ設計資料 |
SECURITY.md |
セキュリティポリシー・脆弱性報告先 |
CONTRIBUTING.md |
貢献ガイド |
install.sh |
既存リポへの後付けインストーラ (C モデル) |
- Issue title / body は
env:経由でpromptに渡す (コマンドインジェクション対策) --allowedToolsで Claude が利用できるツールを明示的に最小限に制限permissions:は各 workflow で必要最小限のみ宣言ANTHROPIC_API_KEYは GitHub Secrets のみ。コード直書き禁止GITHUB_TOKEN(短命) のみ利用、PAT は使わない@claudeメンションは write 権限ユーザーのみトリガー可 (claude-code-action のデフォルト動作)
詳細なセキュリティ方針・脆弱性報告先は SECURITY.md を参照。
github-actionsユーザーのコメント・コミットは後続 GHA をトリガーしない (無限ループ防止の GitHub 仕様)- ただし
gh issue create+ ラベル付与は別アクター扱いとなり、claude-task付与でsymphony-dispatch.ymlが正常にトリガーされる - 1 つの Issue に複数回
claude-taskを付けると複数エージェントが起動する (べき等性は別途対応が必要) --max-turns 30超過時はエージェントが途中停止して Issue にコメントを残す- GHA タイムアウトは各 workflow で個別設定 (
symphony-dispatch.yml/symphony-investigate.ymlは 60 分、symphony-triage.ymlは 15 分) symphony-decompose.ymlは ADR の markdown フォーマットに強く依存。docs/adr/ADR-000-template.mdの見出し構造を変更する場合は workflow も合わせて修正
workflow YAML 構文チェック:
python3 -c "import yaml,glob; [yaml.safe_load(open(p)) for p in glob.glob('.github/workflows/*.yml')]" \
&& echo OKGHA 固有の検証は actionlint を推奨:
brew install actionlint
actionlint .github/workflows/*.ymlApache License 2.0. 詳細は LICENSE を参照。
OpenAI Symphony と同じライセンスを採用しています。
| リソース | URL |
|---|---|
| OpenAI Symphony | https://github.com/openai/symphony |
| anthropics/claude-code-action | https://github.com/anthropics/claude-code-action |
| Claude Code GitHub Actions ドキュメント | https://docs.anthropic.com/ja/docs/claude-code/github-actions |