mcpField
S
swain-dispatch

swain-dispatch

github.com/cristoslcエージェントワークフロー237 回インストール25 週間前に更新
リポジトリ

swain-dispatch について

swain-designの成果物をGitHub IssuesとGitHub Actions経由でバックグラウンドエージェントに渡す、非推奨のスキルです。Claude GitHub App、ワークフロー、従量課金の`ANTHROPIC_API_KEY`が必要です。

主な機能

  1. 01成果物の検索と読み込み
  2. 02swain.settings.jsonの設定読み取り
  3. 03GitHub Issueの作成
  4. 04ディスパッチ状況の確認

活用シーン

  1. 01設計成果物をバックグラウンドエージェントに渡す
  2. 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つを用意する必要があります。

  1. Claude GitHub App — https://github.com/apps/claude からリポジトリにインストールします(Contents、Issues、Pull Requests の読み書き権限を付与します)
  2. ワークフローファイル — claude-code-action ステップを含む .github/workflows/claude.yml(または agent-dispatch.yml)
  3. 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-6
  • maxTurns:15
  • labels:["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.openedIssue の作成直後
既存の 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 イベントに依存している場合

コメント