PluginWorld
Cl

claude-task-worker

Claude Code✓ SPEC VERIFIED

CLI tool that polls GitHub Issues/PRs and delegates work to Claude CLI

@getty104 · MIT · updated yesterday

SECURITY

B

SCORE

74

INSTALLS

13.5K

PLUG IN

/plugin marketplace add getty104/claude-task-worker

Then run /plugin install <name> for any plugin it lists

README

claude-task-worker

GitHub Issues/PRを定期ポーリングし、Claude Codeに処理を委譲するCLIツール。

同梱の claude-task-worker Claude Code プラグイン(plugin/)と組み合わせることで、Issue の実装からPRのレビュー対応、Dependabot PR の対応までを自動化する。CLI 本体(npm パッケージ)とプラグイン(Claude Code マーケットプレイス)は同じリポジトリ・同じ名前で提供される。

アーキテクチャ

CLI が GitHub ラベルを検知してタスクを起動し、プラグインのスキルが実際の処理を担う。

   GitHub (Issue / PR + ラベル)
              │ poll
              ▼
     claude-task-worker
              │ invoke
              ▼
       Claude Code CLI
   + claude-task-worker plugin

Worker とスキルの対応

Worker トリガー 呼び出すスキル 間隔
exec-issue cc-exec-issue (Issue) /claude-task-worker:exec-issue 1分
create-issue cc-triage-scope (Issue) /claude-task-worker:create-issue-from-issue-number 1分
update-issue cc-update-issue /claude-task-worker:update-issue 1分
answer-issue-questions cc-answer-issue-questions /claude-task-worker:answer-issue-questions 1分
triage-created-issue cc-issue-created + cc-triage-scope (Issue) /claude-task-worker:triage-created-issue 1分
epic-issue cc-epic-issue (Issue, sub-issues が全て Close) /claude-task-worker:create-epic-pr 5分
create-ui-design cc-create-ui-design (Issue) /claude-task-worker:create-ui-design 1分
apply-ui-design cc-ui-design-pr-created (Issue) /claude-task-worker:apply-ui-design 5分
fix-review-point cc-fix-onetime (PR) /claude-task-worker:fix-review-point 1分
triage-pr cc-triage-scope (PR) /claude-task-worker:triage-pr 1分
resolve-conflict cc-resolve-conflict (PR) /claude-task-worker:resolve-pr-conflict 1分
check-dependabot dependencies (PR) /claude-task-worker:check-dependabot 1時間

共通の挙動:

  • 処理中は cc-in-progress を付与し、同一 Issue/PR の重複実行を防ぐ
  • cc-need-human-check が付いた Issue は全ワーカーの対象外
  • Issue 系ワーカーは -is:blocked 検索 qualifier で絞り込むため、未解決の blockedBy を持つ Issue は対象外
  • 完了時にトリガーラベルを除去し、次のワーカーへ引き継ぐラベルを付与する
  • create-ui-design / apply-ui-designuiDesign.enabledtrue のときだけ起動する(既定 false

プラグインの構成

ディレクトリ 内容
plugin/skills/ ワーカーが呼ぶスキル群と、対話セッション用の補助スキル(commit-push / create-pr / breakdown-issues / edit-pencil-design など)
plugin/agents/ サブエージェント定義(explore-agent / frontend-implementer / general-purpose-assistant / lightweight-assistant / pencil-design-updater / requirement-todo-organizer
plugin/hooks/ SessionStart(worktree セットアップ)と UserPromptSubmitcodegraph prompt-hook)のフック定義
plugin/scripts/ フックから呼ばれるスクリプト(setup-worktree.sh / stop-servers.mjs
plugin/.mcp.json MCP サーバー定義(codegraph / context7 / next-devtools / shadcn

セットアップ

前提条件

名前 用途
Node.js >= 22.6.0 CLI の実行ランタイム
GitHub CLI (gh) 全 GitHub 操作(認証済みであること)
Claude Code (claude) タスク実行エンジン
Git worktree の作成・ブランチ操作
jq プラグインスキル内での JSON 加工
CodeGraph コード探索用インデックス。任意(未導入でも探索がテキスト検索に落ちるだけ)
Pen CLI .pen デザインファイルの編集・参照。UIデザイン先行ワークフロー使用時のみ(要ログイン。呼び出しは claude-task-worker pencil 経由)
herdr --project / mode: "herdr" 使用時のみ

CLI 本体に npm の実行時依存はない(esbuild で dist/index.js に単一バンドルされ、Node.js 標準モジュールのみで動作する)。

インストール

npx claude-task-worker install

マーケットプレイスの追加・プラグインのインストール・CLI 本体のグローバルインストール・CodeGraph CLI のインストールを一括で行う。いずれかが失敗しても処理は継続し、[install] プレフィックス付きでログ出力される(失敗時の終了コードは 1)。インストール後、Claude Code のセッションを再起動するとプラグインが有効になる。

個別にやる場合:

npm install -g claude-task-worker
claude plugin marketplace add getty104/claude-task-worker
claude plugin install claude-task-worker@claude-task-worker

herdr が必要な場合は curl -fsSL https://herdr.dev/install.sh | sh または brew install herdrドキュメント)。

Pen CLI のログイン

.pen を扱うスキル(edit-pencil-design / inspect-pencil-node / resolve-pencil-conflict)は Pen CLI の認証を必要とする。未ログインだと .pen の読み書きが失敗するため、UIデザイン先行ワークフローを使うならインストール後に一度ログインしておく.pen を触らないので claude-task-worker pencil ラッパー経由でなくてよい)。

pencil login    # メールアドレス + パスワード、またはメールアドレス + OTP コード
pencil status   # 認証状態の確認

セッショントークンは ~/.pencil/session-cli.json に保存され、以降のコマンドで再利用される。

CI やワーカーを実行するマシンなど対話ログインできない環境では、環境変数 PEN_CLI_KEY(pen.dev の組織設定 > Developer Keys で発行)を使う。保存済みトークンより優先される。

export PEN_CLI_KEY=pencil_cli_...

詳細は Pen CLI のドキュメントを参照。

更新

claude-task-worker update

マーケットプレイス・プラグイン・CLI 本体・CodeGraph CLI をまとめて更新する。プラグインの反映にはセッション再起動が必要。

初期化

対象リポジトリで実行すると、GitHub ラベル・Issue テンプレート・GitHub Actions ワークフロー・設定ファイルが作成され、CodeGraph のインデックスが構築される。

claude-task-worker init           # 既存ファイルは保護
claude-task-worker init --force   # 強制上書き

作成されるラベル:

ラベル 用途
cc-triage-scope トリアージ対象マーク(Issue/PR)
cc-issue-created create-issue 由来の Issue マーク(triage-created-issue のトリガー)
cc-update-issue Issue 更新トリガー
cc-answer-issue-questions Issue 確認事項への回答トリガー
cc-exec-issue Issue 実行トリガー
cc-fix-onetime PR 修正トリガー(1回)
cc-resolve-conflict PR コンフリクト解消トリガー
cc-in-progress 処理中ステータス
cc-need-human-check 人間の確認が必要(付与中は Issue ワーカーの対象外)
cc-pr-created PR 作成完了マーク
cc-epic-issue エピックマーク(Issue: サブ全 Close で epic-issue 起動 / PR: リリースゲート対象)
cc-release-ready エピックPRがリリース可能と判定されたマーク(実際のマージは人間が実施)
cc-create-ui-design UIデザイン作成トリガー
cc-ui-design-pr-created デザインPR作成済み・マージ待ちマーク
cc-ui-design-ready デザイン反映済みマーク(再デザイン抑止)
cc-ui-design デザインPRのマーカー(triage-pr のレビュー観点切り替え用)

作成されるファイル:

  • .github/ISSUE_TEMPLATE/cc-triage-scope.ymlcc-triage-scope 付き Issue 作成用テンプレート
  • .github/workflows/assign-creator-on-cc-triage-scope.yml — Issue 作成者の自動アサイン
  • claude-task-worker.json — 設定ファイル。ワーカーごとの既定値は書き出さない(写経するとプラグイン更新で既定が変わっても古い値に固定されるため)。上書きしたいワーカーだけ手で追記する

CodeGraph のセットアップとして、グローバル gitignore(~/.config/git/ignore)へ .codegraph/ を冪等に追記し、codegraph init を実行する。CodeGraph 未インストールでも init 全体は失敗しない。

コマンド

claude-task-worker <command> [--epic <issue-number>]... [--label <label>]... [--project <name>]...
コマンド 内容
各ワーカー名 単一ワーカーを起動(exec-issue / triage-pr など。上記 Worker 表を参照)
all 通常ワーカー9つを同時にポーリング(トリアージ系3つを除く)
yolo 全ワーカーを同時にポーリング(all + triage-created-issue + triage-pr + check-dependabot
init ラベル・テンプレート・設定ファイルの作成と CodeGraph セットアップ
install / update 上記「セットアップ」を参照
usage Claude API 使用状況(5時間/7日間の利用率とリセット時刻)を表示し、Slack にも通知
pencil <args...> Pencil CLI をアセット URI 修正パッチ付きで実行するラッパー(下記参照)
version CLI のバージョンを表示(--version / -v も可)

pencil <args...>

@pen.dev/clipencil)にはアセットのベース URI を絶対 URI として解決できないバグがあり、.pen を開くと Base URI must be absolute! で失敗する。本コマンドはその修正を Node の loader hook(dist/pen-baseuri-fix.mjs)として NODE_OPTIONS 経由で注入したうえで pencil を実行するラッパー。

claude-task-worker pencil version
claude-task-worker pencil interactive -i designs/login.pen -o designs/login.pen <<'EOF'
...
EOF

引数・stdin・stdout・stderr・終了コードはすべて素通しするため、使い方は pencil と同じ。.pen を扱うスキル・エージェント(edit-pencil-design / inspect-pencil-node / resolve-pencil-conflict / pencil-design-updater など)はすべてこのラッパー経由で pencil を呼ぶ。

--epic <issue-number>

指定したエピック Issue のサブ Issue のみを処理対象に絞る。all / yolo と Issue 系ワーカーで有効。複数指定するといずれかのエピックを親に持つサブ Issue が対象になる(OR)。

claude-task-worker all --epic 100 --epic 200

epic-issue ワーカーだけはエピック Issue 自体が処理対象なので、指定番号は「エピック Issue 自身の番号」として照合される。

--label <label>

トリガーラベルに加えて指定ラベルが付いた Issue のみに絞る。複数指定すると全ラベルの AND。--epic と併用可能。ユーザーのスコープ指定なので、タスク完了時にワーカーが除去することはない。

claude-task-worker all --label priority-high --label needs-design

--project <name>

指定したプロジェクト(またはグループ、all)へ herdr 経由でコマンドをディスパッチする。指定するとCLIはワーカーを直接実行せず、対象プロジェクトごとに独立した herdr ワークスペースを作ってそこでコマンドを実行する。

claude-task-worker all --project all
claude-task-worker all --project frontend
claude-task-worker exec-issue --project app-a --epic 100 --label priority-high

プロジェクト名・グループ名は $XDG_CONFIG_HOME/claude-task-worker/config.json(未設定なら ~/.config/claude-task-worker/config.json)で定義する。all は全プロジェクトを指す予約語。

{
  "mode": "default",
  "advisor": false,
  "permission": "bypassPermissions",
  "projects": {
    "app-a": "/Users/me/repos/app-a",
    "app-b": "/Users/me/repos/app-b"
  },
  "projectGroups": {
    "frontend": ["app-a", "app-b"]
  }
}

ディスパッチャーの機能:

  • 一斉起動: プロジェクトごとに ctw:<プロジェクト名> ラベルのワークスペースを作り、そこで(--project を除いた)同じコマンドを実行する。ワーカーが実際に起動したかを確認し、起動しなければ再送・失敗判定する
  • 稼働一覧: プロジェクト名・ワークスペースID・ペインID・ステータス・稼働時間をステータステーブルに描画する
  • 一括停止: SIGTERM/SIGINT で全セッションへ ctrl-c を送り、終了を待ってワークスペースを閉じる。もう一度送ると強制終了

--project と併用できないコマンド: init / install / update / usage / version

設定ファイル

グローバル設定は config.json(上記)、リポジトリ設定は実行ディレクトリ直下の claude-task-worker.json

config.json(グローバル)

キー 既定 説明
projects - プロジェクト名 → 絶対パス
projectGroups {} グループ名 → プロジェクト名配列
mode "default" タスクの実行形態(下記)
advisor false --advisor を渡すか(下記)
permission "bypassPermissions" Claude CLI の権限モード(下記)

mode(タスクの実行形態)

全ワーカー・全プロジェクトに一括適用される(個別指定は不可)。

mode 挙動
"default" タスクを claude -p(非対話 print モード)の子プロセスとして実行
"herdr" タスクを herdr のタブ内で TUI セッションとして実行。実行中の様子を herdr で覗ける

"herdr" では、worktree 作成後に ctw:<プロジェクト名>:#<番号> ラベルのタブを作り、そのルートペインで claude を TUI 起動する。agent ステータスを監視して完了を検知し、セッション transcript から最終レポートを回収して通知に使う。blocked(claude が入力待ち)になっても自動失敗にせず待機し、ステータステーブルに running:blocked と表示するので herdr のタブを開いて直接対応できる。herdr が未インストール・未起動なら起動時にエラー終了する("default" へフォールバックしない)。

ℹ️ タスク完了時の通知音はワーカー側から止められない(音を鳴らすのは herdr サーバープロセスで、HERDR_DISABLE_SOUND もそのプロセスの環境変数として読まれるため)。無音にするには ~/.config/herdr/config.toml[ui.sound] enabled = false を書いて herdr server reload-config する。ただし herdr サーバー全体に効くため、対話セッションの完了音も鳴らなくなる。

advisor(アドバイザーモデル)

true にすると、タスク起動時に Claude CLI へ --advisor <model> を渡す。渡すモデルは claude-task-worker.jsonworkers.<名前>.advisorModelmode と同じくトップレベル一括で、プロジェクト単位・ワーカー単位のオン/オフはできない。空文字が指定されたワーカーには渡さない。

advisor は main モデル以上の能力が必要(Claude CLI の制約)。全ワーカーの既定 modelopus なので、advisorModel の既定値はすべて空文字(advisor なし)。modelsonnet 等へ下げたワーカーには advisorModel: "opus" を指定できる。

permission(権限モード)

タスク起動時に Claude CLI へ渡す権限モードmode / advisor と同じくトップレベル一括で、プロジェクト単位・ワーカー単位の指定はできない。

permission 挙動
"bypassPermissions"(既定) 全許可。承認するユーザーが常駐しない自律実行のため既定
"dontAsk" 許可されていない操作は確認せずスキップする
"auto" 安全な操作は自動承認、危険な操作のみ確認
"acceptEdits" ファイル編集は自動承認、それ以外は都度確認
"manual" 標準の権限確認
"plan" 読み取りのみ。変更は行わない

値は Claude CLI の --permission-mode にそのまま渡される(choices と同じ綴り)。ワーカーには承認するユーザーがいないため、bypassPermissions / dontAsk 以外ではタスクが承認待ちで止まりうる(mode: "herdr" なら herdr のタブを開いて手動で承認できる)。

claude-task-worker.json(リポジトリ)

キー 既定 説明
fixReviewPointCallbackCommentMessage string - fix-review-point 完了時に PR へ投稿するコメント(未設定なら投稿しない)
uiDesign object { "enabled": false, "designDir": "designs", "yolo": false } UIデザイン先行ワークフロー(下記)
workers object {} ワーカーごとの上書き設定(下記)

ワーカーごとの設定

未指定のワーカー・フィールドは既定値にフォールバックする。

フィールド 説明
skill string Claude CLI の -p に渡すスラッシュコマンド。"<skill> <番号>" の形で起動される
model string --model の値(sonnet / opus / haiku
advisorModel string --advisor の値。空文字なら advisor なし。config.jsonadvisor: true のときだけ参照される
effort string --effort の値(high / medium / low
pollingIntervalSeconds number ポーリング間隔(秒)
cooldownSeconds number タスク完了後にポーリングを止める時間(秒)。0 でなし
maxConcurrentTasks number 同時実行できるタスクの最大数

既定値(skill は「Worker とスキルの対応」を参照。effort は全て highcooldownSeconds0maxConcurrentTasks1):

ワーカー model advisorModel pollingIntervalSeconds
exec-issue / fix-review-point / answer-issue-questions / create-issue / update-issue / resolve-conflict / create-ui-design / triage-created-issue / triage-pr opus ""(なし) 60
epic-issue / apply-ui-design opus ""(なし) 300
check-dependabot opus ""(なし) 3600
(未知のワーカー名) opus ""(なし) 60

設定例:

{
  "workers": {
    "exec-issue":       { "model": "opus", "cooldownSeconds": 600, "maxConcurrentTasks": 3 },
    "fix-review-point": { "model": "sonnet", "advisorModel": "opus", "maxConcurrentTasks": 2 },
    "triage-pr":        { "effort": "medium", "pollingIntervalSeconds": 120 },
    "check-dependabot": { "model": "haiku", "pollingIntervalSeconds": 7200 }
  }
}

ワークフロー

Epic(親Issue)連携

親 Issue(Issue Dependencies の Parent)を持つサブ Issue を処理する場合、ワーカーはデフォルトブランチではなく cc-epic-<親Issue番号> ブランチから worktree を作成する。エピック単位でブランチをまとめることで、サブ Issue ごとのPRを単一の統合ブランチへ集約できる。エピックブランチが remote に無ければデフォルトブランチから自動派生して push される。

サブ Issue がすべて Close されると epic-issue ワーカーが /claude-task-worker:create-epic-pr を起動し、エピックブランチからまとめてPRを作る。エピックPRは triage-pr がマージ可能と判定してもマージせず cc-release-ready を付けるだけで、実際のマージ(リリース)は人間に委ねられる。

UIデザイン先行ワークフロー

UI実装 Issue について、実装の前に Pencil(.pen)でデザインを作り、独立したPRとしてマージしてから実装へ進むフロー。デザインを実装PRとは別に単体でレビュー・合意でき、合意済みデザインがリポジトリに永続化される。

uiDesign.enabled によるオプトインで、既定(false)では2つのワーカーが起動しないため、Pencil を使っていないリポジトリの挙動は本機能の追加前と完全に一致する。

キー 既定 意味
uiDesign.enabled false 有効化。false の間は triage-created-issue がUI判定を行わず、2つのワーカーも起動しない
uiDesign.designDir "designs" .pen とスナップショットの配置先(リポジトリルートからの相対パス)
uiDesign.yolo false デザインPRを自動レビュー・自動マージへ流すか。true のときだけデザインPRに cc-triage-scope を付ける
cc-issue-created + triage-created-issue(ルーティング)
  ├─ UI実装タスクでない → cc-exec-issue(従来どおり)
  └─ UI実装タスク       → cc-create-ui-design
        → create-ui-design ワーカー
           ・.pen を作成/更新 + snapshots/ に PNG 出力
           ・ブランチ cc-ui-design-<N> を push しデザインPRを作成(Refs #N。closing keyword は使わない)
           ・PR に cc-ui-design、Issue に cc-ui-design-pr-created を付与
        → yolo: true  → triage-pr / fix-review-point / resolve-conflict(既存フローでレビュー・マージ)
           yolo: false → 人がデザインPRをレビュー・マージ
        → apply-ui-design ワーカー
           ・デザインPRが MERGED になるまで skip
           ・Issue description に「## UIデザイン」セクションを追記
           ・cc-ui-design-ready + cc-exec-issue を付与
        → exec-issue(デザインを参照元として実装)

triage-prcc-ui-design 付きPRをコードレビューではなくデザイン向けの観点(差分が .pen とPNGに限定されているか、スナップショットからデザイン意図が読み取れるか、Issue 要件を満たしているか)で評価する。

デザインが不要と判明した場合は create-ui-design が理由をコメントして cc-ui-design-ready + cc-exec-issue を付与し、人手を介さず実装へ復帰する。Pencil が使えない環境やデザインPRが却下された場合は cc-need-human-check で停止する。

Slack通知

環境変数 CLAUDE_TASK_WORKER_SLACK_WEBHOOK_URL に Slack Incoming Webhook URL を設定すると、各ワーカーのタスク完了時・失敗時に通知が送られる。未設定なら送信されない。

export CLAUDE_TASK_WORKER_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/REDACTED
claude-task-worker all

通知には Claude API の使用状況(5時間/7日間の利用率とリセット時刻)も含まれる。使用状況の取得は macOS では security(Keychain)、それ以外では ~/.claude/.credentials.json を使う。あわせて RunCat Neo 用のスナップショットを ~/.claude/runcat-usage.jsonRUNCAT_OUT_FILE で変更可)へ原子的に書き出す(Webhook 未設定でも更新される)。取得結果は360秒キャッシュされるため、値は最大6分古くなりうる。

プロセス管理

実行中のタスクはリアルタイムのステータステーブルで表示される。

  • タスクID・タイトル・ステータス(running/completed/failed)・開始時刻・経過時間を表示
  • mode: "herdr" では実行中の行に agent ステータスが併記される(running:working / running:blocked
  • 同一 Issue/PR の重複実行を自動防止
  • SIGTERM/SIGINT で全子プロセスを graceful shutdown(もう一度送ると強制終了し、ラベル・worktree の後片付けを試みる)
  • 前回の異常終了で残った worktree はワーカー起動時に自動回収される(実行中タスク・対話セッションが掴んでいるものは保護される)

タスク実行のガード

ワーカーは応答するユーザーがいない状態でスキルを起動するため、処理が未完のままセッションが終了してラベルだけ進む事故を防ぐガードを持つ。

  • バックグラウンド実行の無効化: CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 を全タスクへ注入し、Bash の run_in_background やサブエージェントの自動バックグラウンド化を止める
  • ツールの無効化: --disallowedToolsMonitor / ScheduleWakeup / AskUserQuestion / EnterPlanMode / Cron* / RemoteTrigger / EnterWorktree を無効化する
  • 自律実行原則の注入: --append-system-prompt で「ユーザーに質問しない・全ステップを完遂してから終了する・曖昧なら安全側を選ぶ・サブエージェントの完了報告を検証する」および CodeGraph 優先のコード探索方針を注入する
  • 完了検証: exec-issue / epic-issue は PR の実在(または Issue のクローズ)を確認できるまで cc-pr-created を付けず、確認できなければ cc-need-human-check を付けて Issue にコメントを残す
  • 空振り検知: 正常終了しても出力が空のセッションは失敗として分類し、失敗通知(stderr の末尾を含む)を送る
  • 起動プロセスの後片付け: スキル終了時に Stop フックが docker compose down と、worktree を作業ディレクトリに持つ残留プロセスの SIGTERM をベストエフォートで実行する(worktree はスキル完了直後に削除されるため、残留プロセスが削除の妨げになるのを防ぐ)

開発

npm install
npm run build         # 型チェック(tsc --noEmit)+ esbuild で dist/index.js にバンドル
npm run dev           # 型チェックの watch モード
npm test              # ユニットテスト(node --experimental-strip-types --test)
npm run lint          # ESLint(--fix で自動修正)
npm run format        # Prettier で整形(format:check でチェックのみ)

開発版をローカルから使う場合は npm install && npm run build && npm link

コントリビューションを歓迎します。開発環境のセットアップ・PRの出し方は CONTRIBUTING.md、バグ報告・機能要望は Issue テンプレート から。セキュリティ上の脆弱性は公開Issueではなく SECURITY.md の手順で報告してください。参加にあたっては CODE_OF_CONDUCT.md(Contributor Covenant)を遵守してください。

ライセンス

MIT License. 詳細は LICENSE を参照してください。

SIMILAR PLUGINS