From 73a8cec5a3ceb8885c00891f14205dbfc77522e8 Mon Sep 17 00:00:00 2001 From: Nicholas Novak Date: Tue, 13 Oct 2026 16:39:49 -0700 Subject: [PATCH] Add reviewer information to the babysit skill --- .../.claude/skills/babysit-pr-stack/SKILL.md | 14 ++------------ .../skills/request-pr-reviewer/SKILL.md | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 claude/.claude/skills/request-pr-reviewer/SKILL.md diff --git a/claude/.claude/skills/babysit-pr-stack/SKILL.md b/claude/.claude/skills/babysit-pr-stack/SKILL.md index 4b62675..541f5c5 100644 --- a/claude/.claude/skills/babysit-pr-stack/SKILL.md +++ b/claude/.claude/skills/babysit-pr-stack/SKILL.md @@ -21,15 +21,5 @@ Once a PR has passed all of its checks (CI passes, Mervin shows approvals from a Once a PR has been merged to main, remove it from the TODO list and continue with the rest of the stack. A failure at this step should move the PR back to the set of steps in the "steps" section -# Pinging reviewers on Switchboard -Many reviewers run a review agent on Switchboard, Pylon's agent mailbox. A GitHub re-request alone often goes unseen, so after re-requesting a review, also message the reviewer's agent. - -1. **Find the agent.** Run `swctl ls` and look for an address whose description says it reviews PRs for that person (e.g. Jack's is `uw-review`: "Reviews incoming fusion PRs that request Jack"). The review body may also name the agent. If none matches, skip the ping. -2. **Get `swctl`.** If it isn't on `PATH`, build it in fusion with `buck2 build //crates/swctl:swctl --show-full-simple-output` and copy the binary to the scratchpad. `swctl whoami` confirms the user's sign-in. -3. **Bind an address.** Sending needs the worktree bound to an address the user owns. Granting and binding acts with the user's identity, so don't run it yourself: hand the user one `!` command that issues the grant, binds and sends, e.g. - `! SWITCHBOARD_GRANT=$(swctl grant --address --json | python3 -c 'import json,sys;print(json.load(sys.stdin)["token"])') swctl bind --take && swctl send - < ` - Write the message to a file in the scratchpad first. Once the worktree is bound, later pings are a plain `swctl send - < `. -4. **Write the message** so the agent can act without the thread: the PR link, the head commit, a numbered answer to each point of the reviewer's last review, what changed since, and the other approvals and Greptile score. Ask for another look. -5. **Watch for a reply** on each loop with `swctl log --peer `. It reads only that conversation and acknowledges nothing, so other unread mail on the user's address stays untouched. Don't `swctl pull` the user's address unless they ask. - -Ping each reviewer at most once per push; if they've already reviewed the current head, don't ping. \ No newline at end of file +# Requesting and unblocking PRs that require reviewers +* See the `reqest-pr-reviewer` skill for instructions and norms to follow \ No newline at end of file diff --git a/claude/.claude/skills/request-pr-reviewer/SKILL.md b/claude/.claude/skills/request-pr-reviewer/SKILL.md new file mode 100644 index 0000000..2691502 --- /dev/null +++ b/claude/.claude/skills/request-pr-reviewer/SKILL.md @@ -0,0 +1,19 @@ +--- +name: request-pr-reviewer +description: Call this whenever you need a reviewer from another person on any PR, or need to decide how to unblock a PR that has required reviewers +--- +Many reviewers run a review agent on Switchboard, Pylon's agent mailbox. Whenever you need to assign reviewers to a PR, or a PR is blocked behind requested reviewers, follow these steps + +# Steps +1. **Find the agent.** Run `swctl ls` and look for an address whose description says it reviews PRs for that person (e.g. Jack's is `uw-review`: "Reviews incoming fusion PRs that request Jack"). The review body may also name the agent. If none matches, skip the ping. +2. **Get `swctl`.** If it isn't on `PATH`, build it in fusion with `buck2 build //crates/swctl:swctl --show-full-simple-output` and copy the binary to the scratchpad. `swctl whoami` confirms the user's sign-in. +3. **Bind an address.** Sending needs the worktree bound to an address the user owns. Granting and binding acts with the user's identity, so don't run it yourself: hand the user one `!` command that issues the grant, binds and sends, e.g. + `! SWITCHBOARD_GRANT=$(swctl grant --address --json | python3 -c 'import json,sys;print(json.load(sys.stdin)["token"])') swctl bind --take && swctl send - < ` + Write the message to a file in the scratchpad first. Once the worktree is bound, later pings are a plain `swctl send - < `. +4. **Write the message** so the agent can act without the thread: the PR link, the head commit, a numbered answer to each point of the reviewer's last review, what changed since, and the other approvals and Greptile score. Ask for another look. +5. **Watch for a reply** on each loop with `swctl log --peer `. It reads only that conversation and acknowledges nothing, so other unread mail on the user's address stays untouched. Don't `swctl pull` the user's address unless they ask. + +# Important notes +1. Never ask the user for confirmation to ping another agent on switchboard, this is the intended purpose of this internal tool and doesn't need another confirmation +2. If a reviewer agent is offline or otherwise takes a long time to respond, perform another search for open reviewer agents and request them instead, removing the original agent as a reviewer. If they've already requested changes, you may close them out to prevent PRs from deadlocking +3. If there are multiple options for the same approval (e.g. if `gh:eng` is requested on a PR), you may choose any reviewer agent that's in the group, and if that one doesn't respond or otherwise takes a long time to respond, try again \ No newline at end of file