Skip to content
Agent Orchestration
Skill

/babysit

Drive an open PR to merge-ready on the watch-pr verdict policy — watch checks and review state, fix CI, address comments; never merges, rebases, or force-pushes. For 'get this green' or 'babysit PR #N'.

From plugin
oh-my-claudecode
41k84 skills21 agents21 commands11 hooks
+1

Claude Code

$ npx -y skills add Yeachan-Heo/oh-my-claudecode --skill babysit --agent claude-code

SKILL.md

babysit.SKILL.md
name: babysit
description: "Drive an open PR to merge-ready on the watch-pr verdict policy — watch checks and review state, fix CI, address comments; never merges, rebases, or force-pushes. For 'get this green' or 'babysit PR #N'."
aliases: []
metadata:
  credits:
    babysit-workflow: pstack
    watch-pr-policy: pstack
    author: Lauren Tan
    url: "https://github.com/cursor/plugins/tree/main/pstack"
    port: pstack-claude
    port-author: Michael Denyer
    port-url: "https://github.com/michael-denyer/pstack-claude"

Babysit

Keep an open PR moving toward merge-ready: watch its checks, review threads, and mergeability; act on what blocks them; and report evidence. The PR's merge stays with the human — green is not safe, and this skill never merges, rebases, or force-pushes.

When to use

  • "get this PR green", "babysit PR #N", "address the review-bot comments"
  • the user wants a PR they opened earlier driven to merge-ready while they

are away

When not to use

  • merely opening a PR (no monitoring is implied)
  • the user asks to land or ship a green stack — that decision belongs to the

user; report merge-readiness and stop

Loop

Declare the mode before the first poll: which PR, and whether bot comments are in scope.

1. **Read state** via `gh`: `gh pr view <N> --json state,mergeable,mergeStateStatus,reviewDecision,isDraft,headRefOid,headRefName` and `gh pr checks <N> --json name,bucket` (bucket is `pass`/`fail`/`pending`/`skipping`/`cancel`). Normalize before classifying: `mergeable` arrives uppercased (`MERGEABLE`/`CONFLICTING`, `UNKNOWN` or empty while GitHub computes it), and `reviewDecision` is an **empty string** when no review exists — not `none`. Exit codes: `gh pr checks --json` exits 0 even when checks **fail** — judge by `bucket`, never the exit code; with no checks configured it exits 1 printing "no checks reported", which is the no-checks path, not an error. Treat aggregate `mergeStateStatus=BLOCKED` as blocked and `UNKNOWN` as waiting before allowing ready. Confirm the first read reports the requested PR before acting on it. 2. **Apply the watch-pr verdict policy** (`src/features/watch-pr/policy.ts` semantics, embedded below). Do not eyeball; classify. Determine `reviewRequired` from the repository's branch-protection settings (for example, `gh api repos/OWNER/REPO/branches/BRANCH/protection` and the `required_pull_request_reviews` field); a ruleset that requires reviews independently of classic branch protection counts the same way. Pass that boolean into the policy; do not treat an empty review decision as a blocker when the branch does not require approval. 3. **Act on the verdict** — every lane gets the polled identity: pass the repo and PR number explicitly and verify the checkout sits on that PR's head before mutating anything. Bare `gh pr checks`/`gh pr view` select whatever PR owns the current branch, which need not be the one babysit polls.

  • failing check → `fix-ci` (classify real/flaky/environmental, then fix; pass the target repo, PR number, head SHA, and base branch)
  • requested changes or unresolved review threads → `get-pr-comments` on

the polled repo and PR number — triage threads, then address each through the review lane; reply to threads you resolve; dismiss bot noise with a concrete reason instead of churning code. Read the threads surface (`comments`/`reviews` via the get-pr-comments fetch) even when `reviewDecision` is empty or `approved` — a non-blocking review or a comment after approval leaves the decision clean while real threads stand — and never report `ready` while an in-scope thread is untriaged

  • conflicts → `fix-merge-conflicts` **in its no-rebase mode**, run on the

polled PR's owned checkout: resolve with a merge commit only. Never rebase and never force-push here — this constraint overrides that skill's own-branch rebase option, because babysit's contract forbids both. If the branch is not ours to resolve, report to the branch owner instead

  • mergeability unknown → wait one interval and re-read; it is never an

error

  • draft or missing review → report what is missing; do not self-approve

4. **Ledger discipline**: watch verdicts (`ready`/`waiting`/`blocked`/`gone`) are gate states, not verification — never write them into the verification ledger, whose vocabulary is separate. Append a verification ledger row (the writer's canonical path under OMC's state root) only when *you* executed a check yourself — e.g. a `fix-ci` rerun went green (`unit-test-verified`, with the command as evidence). One row per executed check, never per poll. Write it through the repository writer so header creation, locking, and validation are enforced. Resolve the installed package root the figure-it-out way: plugin-root variables first, then walk the installed `oh-my-claudecode` package from the working directory — and report the resolution failure instead of skipping the write:

   node --input-type=module -e "const {createRequire}=await import('node:module'); const path=await import('node:path'); const {pathToFileURL}=await import('node:url'); let root=process.env.CLAUDE_PLUGIN_ROOT||process.env.OMC_PLUGIN_ROOT; if(!root){ const req=createRequire(process.cwd()+'/package.json'); for (const name of ['oh-my-claude-sisyphus','oh-my-claudecode']) { try { root=path.dirname(req.resolve(name+'/package.json')); break; } catch {} } } if(!root) throw new Error('cannot resolve the installed package root; set CLAUDE_PLUGIN_ROOT or OMC_PLUGIN_ROOT'); const {appendLedgerEntry,defaultLedgerPath}=await import(pathToFileURL(root+'/dist/features/verification-ledger/index.js').href); await appendLedgerEntry(defaultLedgerPath(),{ts:new Date().toISOString(),kind:'babysit',ref:'<N>',sha:'<HEAD_SHA>',verdict:'unit-test-verified',evidence:'<command>',verifier:'babysit'});"
   `
Read more
@yeachan-heo
Ships withoh-my-claudecode

For Codex users: Check out oh-my-codex — the same orchestration experience for OpenAI Codex CLI. Liked OmC but found it a bit overkill? Try gajae-code.

41k84 skills21 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
40.7k
Star history of Yeachan-Heo/oh-my-claudecode on GitHub, a chart by star-history.com

Other skills on oh-my-claudecode.

architect

architect

Settle types and module shape before cross-boundary code — competing designs explored in parallel, compared on API surface and…

arena

arena

Run N parallel candidates at one brief and synthesize: rubric-first framing, isolated fan-out, a cross-judge on a different…

More skills from other plugins.

1password

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

clawdis11d393k
@steipete@steipeteInstall Skill
computer-use

computer-use

Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and…

orca10d111k
@stablyai@stablyaiInstall Skill
agentmail

agentmail

Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…

paperclip10d109k
@paperclipai@paperclipaiInstall Skill
adr-create

adr-create

Create a new Architecture Decision Record with sequential numbering and AgentDB registration

@ruvnet@ruvnetInstall Skill

Questions about babysit.

Which coding agents can use babysit?
babysit installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.