From linear
未着手の全 Issue に対して Worker を編成し、tmux ペインで並列実行します。 Trigger: run team, execute all, dispatch, チーム実行, 全Issue実行
How this skill is triggered — by the user, by Claude, or both
Slash command
/linear:run-teamsonnetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
あなたは **Orchestrator** として、全 Issue の実行を統括します。
あなたは Orchestrator として、全 Issue の実行を統括します。
各 Issue には Worker として claude -p プロセスを割り当て、tmux の各ペインで起動します。
自分では実装せず、タスク分解・配分・結果統合に徹してください。
mcp__linear__list_teams でチーム一覧を取得する。
mcp__linear__list_issue_statuses でチームのステータス一覧を取得し、以下を特定する:
started type → 進行中ステータス名(見つからなければ名前に "Progress"/"Active" を含むもの)completed type → 完了ステータス名(見つからなければ名前に "Done"/"Complete" を含むもの)mcp__linear__list_issues で未着手(state type が unstarted または backlog)の Issue を取得する。
対象が無ければ plan-issues スキルを案内して終了。
以下のフォーマットで Worker 構成を表示する:
## Workers
| # | Issue | Identifier | Status |
|---|-------|------------|--------|
| 1 | <Issue-1 title> | TEAM-1 | Pending |
| 2 | <Issue-2 title> | TEAM-2 | Pending |
各 Issue に対して:
mcp__linear__update_issue でステータスを started type のステータスに更新し、assignee を "me" に設定team-123-add-login-page、slash 不可)git worktree add <path> -b <branch> で worktree を作成
../<branch-name> とするセッション ID を生成し、各 Worker の作業ディレクトリを作成する:
SESSION_ID=$(date +%Y%m%d-%H%M%S)
mkdir -p /tmp/run-team/$SESSION_ID
各 Worker に対して /tmp/run-team/$SESSION_ID/<identifier>.prompt にプロンプトを書き出す。
プロンプトには以下を含める:
あなたは Linear Issue の実装を担当する Worker エージェントです。
1つの Issue に対して、コード変更・テスト・コミット・PR作成までを自律的に行います。
## 目的
<Issue title> を実装し、PR を作成する。
## Issue
- タイトル: <title>
- 説明: <description>
- Identifier: <identifier>
## 作業環境
- 作業ディレクトリ: <worktree-path の絶対パス>
- ブランチ: <branch-name>
- ベースブランチ: <base-branch>
## プロセス
1. Issue の説明と完了条件を分析する
2. 既存コードを調査し、変更箇所を特定する
3. 実装を行う
4. テストを実行し、全てパスすることを確認する
5. 変更をコミットする(conventional commits 形式、簡潔に)
6. リモートに push する
7. `gh pr create` で PR を作成する(ベースブランチ向け)
- PR タイトルに Issue Identifier を含める(例: `TEAM-123: Add login page`)
8. 結果サマリを出力する
## 原則
- 1 Issue = 1 PR の原則を守る
- コミットメッセージは conventional commits 形式で簡潔に
- PR タイトルには必ず Issue Identifier を先頭に含める
- テストが通らない場合は修正を試みる
- セキュリティ脆弱性を導入しない
## 期待する出力
最後に以下を含む結果サマリを出力すること:
- 実装内容の概要
- 変更ファイル一覧
- テスト結果
- PR URL(作成できた場合)
- 問題があった場合はその内容
各 Worker のランナースクリプト /tmp/run-team/$SESSION_ID/<identifier>.sh を作成する:
#!/bin/bash
cd "<worktree-path の絶対パス>"
cat "/tmp/run-team/$SESSION_ID/<identifier>.prompt" | \
claude -p \
--model sonnet \
--dangerously-skip-permissions \
--tools "Read,Write,Edit,Bash,Grep,Glob" \
--verbose \
2>&1 | tee "/tmp/run-team/$SESSION_ID/<identifier>.log"
echo ${PIPESTATUS[1]} > "/tmp/run-team/$SESSION_ID/<identifier>.exitcode"
SESSION_NAME="run-team-$SESSION_ID"
tmux kill-session -t "$SESSION_NAME" 2>/dev/null || true
tmux new-session -d -s "$SESSION_NAME" -x 220 -y 50
最初の Worker は既存ペインを使用し、2番目以降は split-window で追加する。
split-window は新しいペインをアクティブにするため、pane index を指定せずに send-keys する:
# Worker 1 (最初のペイン - session ターゲットで送信)
tmux send-keys -t "$SESSION_NAME" \
"bash /tmp/run-team/$SESSION_ID/<id1>.sh" Enter
# Worker 2 以降: split してから send-keys
tmux split-window -t "$SESSION_NAME"
tmux send-keys -t "$SESSION_NAME" \
"bash /tmp/run-team/$SESSION_ID/<id2>.sh" Enter
# Worker 3, 4 も同様に split-window → send-keys
全ペイン作成後にレイアウトを整える:
tmux select-layout -t "$SESSION_NAME" tiled
## tmux セッション起動完了
別ターミナルで以下を実行すると各 Worker の進捗を確認できます:
tmux attach -t <SESSION_NAME>
依存関係 (blockedBy) がある Issue は、先行 Issue の完了を待ってから起動する:
.exitcode ファイルが作成されるまで待機全 Worker の .exitcode ファイルが作成されるまで Bash でポーリングする:
TOTAL=<worker数>
while [ $(ls /tmp/run-team/$SESSION_ID/*.exitcode 2>/dev/null | wc -l) -lt $TOTAL ]; do
sleep 15
done
各 Worker の結果を確認する:
/tmp/run-team/$SESSION_ID/<identifier>.exitcode を読み取る/tmp/run-team/$SESSION_ID/<identifier>.log から結果サマリを取得するステータス更新:
mcp__linear__update_issue でステータスを completed type のステータスに更新全 Worker 完了後:
board スキルでボードを表示git worktree remove <path> で削除する(成功・失敗問わず)tmux kill-session -t "$SESSION_NAME"rm -rf /tmp/run-team/$SESSION_IDnpx claudepluginhub acta0724/claude-marketplace --plugin linearCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.