swain-dispatch について
swain-designの成果物をGitHub IssuesとGitHub Actions経由でバックグラウンドエージェントに渡す、非推奨のスキルです。Claude GitHub App、ワークフロー、従量課金の`ANTHROPIC_API_KEY`が必要です。
主な機能
- 01成果物の検索と読み込み
- 02swain.settings.jsonの設定読み取り
- 03GitHub Issueの作成
- 04ディスパッチ状況の確認
活用シーン
- 01設計成果物をバックグラウンドエージェントに渡す
- 02未完了のディスパッチIssueと更新を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cristoslc/ swain --skill swain-dispatchインストール後、Claude Code で/swain-dispatchを入力して読み込まれたか確認します。
詳細
エージェントのディスパッチ(非推奨)
このスキルは非推奨です。 トークンごとの API 課金が必要な
ANTHROPIC_API_KEYを使用するため、Max/Pro サブスクリプションとは互換性がありません。代わりに、セッション内でエージェントを並列実行するか、手動でスパイクを実行してください。
GitHub Issues を介して swain-design の成果物をバックグラウンドエージェントにディスパッチします。エージェントは GitHub Actions ランナー上で anthropics/claude-code-action@v1 を使用して自律的に実行されます。
注: トランク+リリースブランチモデル(ADR-013)を使用するプロジェクトでは、ディスパッチされた作業の対象は
release(配布ブランチ)ではなく、trunk(開発ブランチ)です。
前提条件
ディスパッチを機能させるには、事前に次の3つを用意する必要があります。
- Claude GitHub App — https://github.com/apps/claude からリポジトリにインストールします(Contents、Issues、Pull Requests の読み書き権限を付与します)
- ワークフローファイル —
claude-code-actionステップを含む.github/workflows/claude.yml(またはagent-dispatch.yml) ANTHROPIC_API_KEYリポジトリシークレット — API キー(Max/Pro サブスクリプションではなく、トークンごとの課金が必要です)
ステップ 0 — 事前チェック
ディスパッチする前に毎回実行してください。いずれかのチェックに失敗した場合は停止し、セットアップ手順を表示します。
# 1. Check gh auth
gh auth status 2>/dev/null || { echo "FAIL: gh not authenticated"; exit 1; }
# 2. Check workflow file
WORKFLOW_FILE=""
for f in .github/workflows/claude.yml .github/workflows/agent-dispatch.yml; do
[[ -f "$f" ]] && WORKFLOW_FILE="$f" && break
done
# 3. Check API key secret
OWNER_REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)"
HAS_KEY=$(gh api "repos/${OWNER_REPO}/actions/secrets" --jq '.secrets[].name' 2>/dev/null | grep -c ANTHROPIC_API_KEY || true)
ワークフローファイルが見つからない場合は、次の内容を表示します:
ディスパッチのセットアップが必要です。 ワークフローファイルが見つかりません。
.github/workflows/claude.ymlを作成してください:name: Claude Code on: repository_dispatch: types: [agent-dispatch] issue_comment: types: [created] pull_request_review_comment: types: [created] issues: types: [opened, assigned] jobs: claude: if: | (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) runs-on: ubuntu-latest permissions: contents: write issues: write pull-requests: write id-token: write steps: - uses: actions/checkout@v4 - uses: anthropics/claude-code-action@v1 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}ディスパッチを再試行する前に、コミットしてプッシュしてください。
API キーのシークレットが見つからない場合は、次の内容を表示します:
ANTHROPIC_API_KEYリポジトリシークレットがありません。次のコマンドで設定してください:
gh secret set ANTHROPIC_API_KEY --repo {owner}/{repo}注:これは API キー(トークンごとの課金)である必要があり、Max/Pro サブスクリプショントークンは使用できません。
ディスパッチのワークフロー
ステップ 1 — 成果物を特定する
ユーザーのリクエストを解析して、成果物 ID を特定します(例:SPEC-025、SPIKE-007)。
ARTIFACT_ID="SPEC-025" # from user input
ARTIFACT_PATH="$(find docs/ -path "*${ARTIFACT_ID}*" -name "*.md" -print -quit)"
見つからない場合は、エラーを報告して停止します。
ステップ 2 — 成果物を読む
成果物の内容全体を読み取ります。これを Issue の本文にします。
ステップ 3 — ディスパッチ設定を読む
ディスパッチ設定について、swain.settings.json を確認します:
jq -r '.dispatch // {}' swain.settings.json 2>/dev/null
デフォルト:
model:claude-sonnet-4-6maxTurns:15labels:["agent-dispatch", "swain"]autoTrigger:true
ステップ 4 — GitHub Issue を作成する
gh issue create \
--title "[dispatch] ${ARTIFACT_TITLE}" \
--body "$(cat <<EOF
## Dispatched Artifact: ${ARTIFACT_ID}
This issue was created by `swain-dispatch` for background agent execution.
### Instructions
Implement the artifact below. Follow the acceptance criteria. Create a PR when done.
---
${ARTIFACT_CONTENT}
EOF
)" \
--label "agent-dispatch" --label "swain"
出力から Issue 番号を取得します。
ステップ 5 — ワークフローをトリガーする
autoTrigger が true(デフォルト)の場合:
OWNER_REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)"
gh api "repos/${OWNER_REPO}/dispatches" \
-f event_type="agent-dispatch" \
-f client_payload[artifact]="${ARTIFACT_ID}" \
-f client_payload[issue_number]="${ISSUE_NUMBER}" \
-f client_payload[model]="${MODEL}" \
-f client_payload[max_turns]="${MAX_TURNS}"
ステップ 6 — 報告する
ユーザーに次のように伝えます:
${ARTIFACT_ID} をバックグラウンドエージェントにディスパッチしました。 Issue:${ISSUE_URL} ワークフローは、次に利用可能なランナーで実行されます。 Issue のコメントで進行状況を確認してください。
手動ディスパッチ
ユーザーが手動でのディスパッチを希望する場合(または autoTrigger が false の場合)は、ステップ 5 を省略し、次のように伝えます:
Issue を作成しました:${ISSUE_URL} エージェントをトリガーするには、Issue に
@claudeとコメントしてください。
ディスパッチ状況の確認
ユーザーからディスパッチ状況を尋ねられた場合:
gh issue list --label agent-dispatch --state open --json number,title,updatedAt
未解決のディスパッチ Issue を、最終更新時刻とともに表示します。
トリガーのタイミング
Claude Code Action のワークフローは、@claude のメンション方法に応じて異なる GitHub イベントで実行されます。
| メンションの場所 | イベント | 実行されるタイミング |
|---|---|---|
| 作成時の Issue 本文 | issues.opened | Issue の作成直後 |
| 既存の Issue へのコメント | issue_comment.created | コメントの投稿時 |
注意点: Issue の作成時にワークフローファイルが存在していなかった場合、issues.opened イベントは見逃されています。その場合は、@claude を含むフォローアップコメントを追加して、代わりに issue_comment.created でトリガーしてください。
デフォルトのディスパッチワークフロー(Step 4 + Step 5)では repository_dispatch を使用しており、@claude のメンションとは無関係です。タイミングに関する注意点が当てはまるのは、次の場合のみです。
- 手動ディスパッチを使用する場合(Step 5 をスキップ)
- ワークフローが
issues.openedまたはissue_comment.createdイベントに依存している場合