Skip to content
Back to skills

Whose Turn

ASecurity

「残件は?」「今どこに何が残っている?」への答え。open な PR・issue を全件走査して、自分の番の PR・担当 issue・呼びかけ未返信を機械で洗い出し、「誰の番か・なぜ今その人の番か」を出して、返信が要るかを根拠付きで判定する。棚卸しのように全体を一度に見渡すときに使う。1 件の PR / issue に戻るのは /catchup、いま居るセッションに戻るのは /what-am-i-doing。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
developmentpythonbashreactgitapi

Works with

  • claude code
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add raiki61/claude-plugins --skill whose-turn --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Whose Turn?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Whose Turn
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/raiki61-whose-turn/badge)](https://www.skillsdirectory.com/skills/raiki61-whose-turn)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: whose-turn
description: 「残件は?」「今どこに何が残っている?」への答え。open な PR・issue を全件走査して、自分の番の PR・担当 issue・呼びかけ未返信を機械で洗い出し、「誰の番か・なぜ今その人の番か」を出して、返信が要るかを根拠付きで判定する。棚卸しのように全体を一度に見渡すときに使う。1 件の PR / issue に戻るのは /catchup、いま居るセッションに戻るのは /what-am-i-doing。
model: sonnet
allowed-tools: Bash, Read
---
open 全件を見渡すフェーズにいる。

いまの会話で頼まれている用事が 1 件(特定の PR・issue・ブランチ)に閉じているなら、ここで止めろ。スクリプトは走らせず、
その 1 件には `/catchup <番号>` を使う。全件走査はその答えを出さないし、母集団を 1 件に絞る引数も無い。

## やらないこと

- `gh pr list` / `gh issue list` / `gh search` で一覧を組み立て直すな。取り方の正本は同梱の `scripts/whose-turn.py`(下の `${CLAUDE_PLUGIN_ROOT}` は、Claude Code がこのプラグインのルートのフォルダに置き換える変数。スクリプトはその下の `scripts/` にある)で、判定の定義と見ていないものは `bash "${CLAUDE_PLUGIN_ROOT}/scripts/run-python.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/whose-turn.py" --help` にある。
- 出力に無い項目を足すな。スクリプトが失敗したら、そのエラーをそのまま報告して終わる。
- subagent・Agent・Workflow を立てるな。手順 5 の読みも含めて `gh` は Bash で直列に呼ぶ(5 件で数秒)。並列化は起動の overhead で分単位を失い、結果待ちを誤ると 10 分止まる(実測 2026-09-02)。

## 役割分担

- **スクリプト(機械。以下「機械の出力」はこのスクリプトの出力)**: 母集団を固定し、判断材料(自分の番 / 相手の番の別・作者・障害の持ち主〔main 未追従・衝突・CI 赤など PR を止めている物を外せる人〕・自分のレビュー・相手の沈黙・逃がした先の生死・呼びかけとスレッドの全文)を全部出す。判断はしない
- **あなた(AI)**: 材料を読んで「返信が要るか」「見て閉じるだけか」を判定する。母集団を増減させない

## やること

1. `bash "${CLAUDE_PLUGIN_ROOT}/scripts/run-python.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/whose-turn.py" --json --materials $ARGUMENTS --out` を実行し、返ってきたパスを **Read で**読む(引数なし=自分=gh の認証ユーザー。`<login>` で他の人、`--all` で全員分を人別に)。`--out` は出力を一時ファイルへ書いてパスだけ返す——材料付きの出力は Claude Code の Bash の 1 回あたりの上限(約 30,000 バイト。上限はバイトで測るので、日本語はおよそ 1 万文字で当たる)を越え、付けずに走らせるとツール側でファイルへ退避され、走らせ直しで `gh` の呼び出しごと 2 回走る。**`cat` で読むな**——同じ量が再び Bash の出力に乗って、また退避される。`--out` は値を取らないので、`$ARGUMENTS` の後ろに置く。出力は JSON で、**鍵で読む**(文の区切りや行の位置で読まない):
   - `sections`: 人ごと(`who`)に `mine`(自分の番)と `theirs`(相手の番)の PR の並び。1 件は `number`・`url`・`title`・`author`・`role`(`implementer`=その人が直す PR〔作者か、担当として受けた人〕、`reviewer`=それ以外)・`days`・`facts`(行に添える事実の文)。`mine` の人の PR には `intro`(作者の本文の 1 文)と `size` も付く
   - `waits`: 返していない呼びかけ(`who`・`kind`・`number`・`url`・`title`・`days`・`by`・`excerpt`・`text`=投稿の全文・`before_draft`=draft の PR で、最後に draft へ戻した時より前の呼びかけ)。`threads`: 返すターンがあるスレッドの、相手の最後の発言(`number`・`path`・`line`・`author`・`text`)
   - `assigned_issues`・`scope`(母集団の数)・`limits`(走査の上限)・`blind_spots`(手順 5 の 2 つの確認の数。`team_review_requests`=Team 宛のレビュー依頼の件数、`unverified_replies`=本文コメントで自分の最後の発言が相手の問いに答えているかを確かめていない PR の `number` と `count` の並び)・`not_seen`(見ていないもの)

2. `waits` の各件を、`text` の全文と添えられた事実(`reply_to_own`=直前が自分の発言・`reacted`=自分が 👍 済み・`referenced_by_open_prs`=open PR が参照)から 5 つに分け、根拠を 1 行ずつ付ける:
   - **要返信** — 質問・確認依頼・レビュー依頼で、まだ答えていない。draft の PR のレビュー依頼も、`before_draft` が false なら要返信(draft の間に頼んだのは「今見てほしい」の合図)。`before_draft` が true のレビュー依頼は要返信にせず、下の **draft へ戻す前** に入れる(作者が draft へ戻して直している最中)
   - **回答済み** — 自分(このツールを使う人)が出した質問への答えや、自分が委ねた判断の結果。返す義務は無い
   - **FYI** — 共有・決定通知・お礼。返す義務は無い
   - **別所で継続** — 話が別の PR / issue に移っている(`referenced_by_open_prs` があればそちらを読む)
   - **draft へ戻す前** — `before_draft` が true のレビュー依頼。作者が ready for review にし直すまで返さなくてよい

3. `threads` の各件(返すターンがあるスレッドの、相手の最後の発言の全文)を 3 つに分け、根拠を 1 行ずつ付ける:
   - **見て閉じる** — 直した報告。コミット SHA や「直しました」で終わり、問いが無い。差分を見て resolve するだけ
   - **要回答** — 問いが返っている。答えるまでそのスレッドは止まる
   - **別所へ逃がした** — 行き先の issue / PR が示されている。その PR の `facts` に「スレッドが逃がした先で、参照後に動いていないもの: #N」の文があれば、その #N(逃がした先)が落ちかけている

   全文で決められないとき(前後の文脈が要るとき)だけ `gh pr view N --comments` / `gh issue view N --comments` で読む。毎回読み直すな——出力は既に本文を持っている。推測で決めるな。

4. スクリプトは PR を「自分の番(今日動かせる)」と「相手の番(相手が動くまで進まない)」の 2 つ(`mine`・`theirs`)に分けている。**セクションを言い直すな。** 挙げてよいのは、出力に並んでいる事実どうしの食い違いだけ——「承認済みなのに未解決スレッドが残る」「レビュー依頼が出ているのに相手が何日も無言」「逃がした先が動いていない」など。セクションの名前や定義の言い換えは、ずれではない。

5. **死角を、決まった手順だけで潰す。** `blind_spots` の `team_review_requests` が 0 でないか、`unverified_replies` が空でなければ、上の判定に穴が実際に開いている。次の 2 つだけ、機械的に確かめる。**各 5 件まで**で、超えた分は「未確認 N 件」と書く:
   - **Team 宛のレビュー依頼**(`team_review_requests`): 依頼先の Team に自分が入っていれば、その PR は自分の番。`gh api orgs/<org>/teams/<slug>/members --jq '.[].login'` を Team ごとに 1 回(`<org>/<slug>` は、その PR の `facts` の `レビュー依頼:` に出る Team 名)。読めなければ(権限不足)「確かめられない」と書く
   - **本文コメントの噛み合い**(`unverified_replies` の `number`): 挙がっている PR を `gh pr view N --comments` で読み、**自分の最後の発言が、その前の相手の問いに答えているか**だけを見る。答えていなければ「呼びかけ」の要返信に加える

   それ以外の死角(GitHub の外・Projects と通知・担当未設定の issue・スレッドの経緯・close 済みの逃がし先)は確かめに行かない——全部読みに行けば全件走査の意味が無くなる。確かめられないものは、確かめられないと書く。読まなかったものは「見ていない」と書き、埋めたことにするな。

## 守ること

- **日数はスクリプトが出した数字をそのまま使う。** 「最後の発言」の日付から数え直すな。日数は今の状態になってからで、誰にも依頼していない PR は最後に動かした日から数えている。発言日から数えると放置に見える。
- **出力に無いことを断定するな。** 材料が足りなければ「材料に無い」と書く。セクションの名前の言い換えで埋めるな。

## 返答

**返答を書く前に毎回、別ファイル [references/reply.md](references/reply.md) を Read で開いて読む**(返答は「自分の番」「相手の番」「担当 issue」「返さなくてよい呼びかけ」「見た範囲」の 5 つのセクションで書く。各セクションの行の形はこの SKILL.md には書かず reply.md にだけ置いてあるので、開いてから書く。reply.md の中身は、5 つのセクションの順と名前・各セクションの行の形・件名の縮め方・動作の列に使う決まった 9 語・0 件や 40 件以上の端の場合)。このセクションの残りは、reply.md の形に重ねて守る長さ・表・字下げの決まり。

**目安は 1 画面(50 行前後)。** reply.md の形ではセクション 2〜5 は件数が増えても行が 1 つずつ増えないので、伸びるのはセクション 1(自分の番)
だけになる。セクション 1 が 25 行を超えるなら reply.md の「端の場合」の形でまとめて縮めろ。**機械の出力の全文(JSON)は、
「全文を見せて」と求められたときだけ** 1 文字も変えずコードブロックに貼る。それまでは貼らない。

**表は使うな。** 根拠は文なので、セルに入れると端末で細切れになる。**1 行は 60 桁以内(日本語は
2 桁)を目安に**——2 行目の固定桁(reply.md のセクション 1 の、日数・役割・動作の行)が折り返すと、縦に見る列が崩れる。長い根拠は 3 行目に送る。桁は表示される幅で
数える——`[#番号](URL)` は対応する端末では番号の幅だけ。非対応の端末では 1 行目に URL が展開されて
伸びるが、固定桁は 2 行目にあるので、それは許す。

**1 行目の字下げは 2 桁のまま。4 桁以上にするな**——字下げコードブロックに落ちて、リンクが `[#番号](URL)` の
生のまま出る。`--all`(人別)でも、人の見出しの下で字下げを深くして並べるな。人は `###` の見出しで分ける。

Files in this skill

  • SKILL.md11.1 KB
  • references/reply.md12.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.