PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
Start a detached GitHub pull-request monitor that wakes the exact launching Codex Desktop or CLI root through the managed Codex App Server when review, CI, conflict, merge-queue, closure, readiness…
$ npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install closedloop-ai/claude-plugins gh-monitor-pr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/closedloop-ai/claude-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/closedloop-core/skills/gh-monitor-pr .claude/skills/gh-monitor-pr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "gh-monitor-pr" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-pr into .claude/skills/gh-monitor-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gh-monitor-pr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-prType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install closedloop-ai/claude-plugins gh-monitor-pr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/closedloop-ai/claude-plugins.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/closedloop-core/skills/gh-monitor-pr .agents/skills/gh-monitor-pr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "gh-monitor-pr" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-pr into .agents/skills/gh-monitor-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gh-monitor-pr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install closedloop-ai/claude-plugins gh-monitor-pr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/closedloop-ai/claude-plugins.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/closedloop-core/skills/gh-monitor-pr .cursor/skills/gh-monitor-pr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "gh-monitor-pr" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-pr into .cursor/skills/gh-monitor-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gh-monitor-pr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/closedloop-ai/claude-plugins.git --path plugins/closedloop-core/skills/gh-monitor-pr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install closedloop-ai/claude-plugins gh-monitor-pr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/closedloop-ai/claude-plugins.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/closedloop-core/skills/gh-monitor-pr .gemini/skills/gh-monitor-pr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "gh-monitor-pr" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-pr into .gemini/skills/gh-monitor-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gh-monitor-pr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install closedloop-ai/claude-plugins gh-monitor-prInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/closedloop-ai/claude-plugins.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/closedloop-core/skills/gh-monitor-pr .github/skills/gh-monitor-pr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "gh-monitor-pr" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-pr into .github/skills/gh-monitor-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gh-monitor-pr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install closedloop-ai/claude-plugins gh-monitor-pr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/closedloop-ai/claude-plugins.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/closedloop-core/skills/gh-monitor-pr .opencode/skills/gh-monitor-pr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "gh-monitor-pr" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/closedloop-core/skills/gh-monitor-pr into .opencode/skills/gh-monitor-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gh-monitor-pr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
gh-monitor-prStart a detached GitHub pull-request monitor that wakes the exact launching Codex Desktop or CLI root through the managed Codex App Server when review, CI, conflict, merge-queue, closure, readiness…
Gh Monitor PR is an agent skill from closedloop-ai/claude-plugins. Start a detached GitHub pull-request monitor that wakes the exact launching Codex Desktop or CLI root through the managed Codex App Server when review, CI, conflict, merge-queue, closure, readiness, or merge events need attention. Use when the user asks Codex to watch, monitor, babysit, or wait on a PR or merge queue without keeping the current turn alive.
Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 15 other files, including scripts (for example `agents/openai.yaml`, `scripts/app-server-notify.js` and `scripts/app-server-notify.test.js`).
It works with GitHub. The repository describes itself as: Open-source Claude Code plugins for multi-agent software delivery. Plan-first SDLC workflow, code review, LLM quality judges, and self-learning — grounded in your codebase… The licence is Apache-2.0.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 76594a3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 12 files in scripts/ (JavaScript and Shell), which the agent can run.
Shell commands in SKILL.md call:
nodecodexghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Gh Monitor PR loads about 5.4k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 2,656 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from closedloop-ai/claude-plugins at commit 76594a3, republished under its Apache-2.0 licence (© closedloop-ai). 2,656 words, ~5,428 tokens.
.claude/skills/gh-monitor-pr/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.Validation against a live root is limited to probe-only, read-only protocol calls. Never pipe synthetic events or user prompts into a live root. Run notification and event-delivery simulations only against an isolated fake server or a disposable, projectless test thread unambiguously owned by the test. Never fabricate text claiming that the user instructed a pause, stop, or mutation, and never stop or steer shared roots, workers, or the daemon. If isolated cleanup is unsupported, fail closed and report the limitation.
Start the detached monitor, report the handoff, and end the turn. Never poll, sleep, or use a tool-based wait in the launching Codex turn.
App Server wakeups use the native managed Codex App Server daemon through the
portable codex app-server proxy --sock transport. The monitor keeps its own
local delivery receipts: it persists a delivering attempt before invoking the
native notifier, and a restart never replays an unknown acceptance result.
Use the managed local App Server daemon. Never spawn a competing App Server and
never set CODEX_APP_SERVER_WS_URL.
For every command below, resolve skill_dir to the absolute directory
containing this SKILL.md; do not assume the skill lives in
${CODEX_HOME:-$HOME/.codex}/skills.
Treat Desktop and CLI setup as separate surfaces. If the launching root is a
CLI, use only the explicit cli setup below. Never run the no-argument Desktop
setup merely to support a CLI monitor: it changes the GUI launchctl
environment and installs a persistent Desktop launcher, neither of which is
needed for CLI monitoring. Do not install a periodic launcher that invokes
codex app-server daemon start for a CLI root. Start the managed daemon on
demand during CLI bootstrap instead.
For Codex Desktop, preserve the no-argument setup:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/setup-app-server.mjs"This configures GUI applications to join the managed daemon. When requested, tell the user to quit ChatGPT completely and reopen it once. End the turn there; register the monitor after restart.
For CLI roots, first probe the existing daemon without changing setup:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/setup-app-server.mjs" \
probe --surface cli --thread-id "$CODEX_THREAD_ID"If that returns threadStatus: active, skip CLI setup and start the monitor.
Only bootstrap when the probe fails because the daemon, socket, or exact thread
is unavailable. Bootstrap also probes the exact root:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/setup-app-server.mjs" \
cli --thread-id "$CODEX_THREAD_ID"CLI setup and probe do not modify the Desktop launchctl environment. They fail
unless the exact thread is readable through the portable
codex app-server proxy --sock transport. Desktop registration also prefers
that transport, but may fall back to a direct native Unix-socket App Server
connection without ChatGPT-specific Node modules.
The managed daemon is shared infrastructure, not part of one monitor's process tree. A monitor must never stop or restart it. Starting or stopping one monitor must not interrupt another monitor, an App Server worker, or a wakeup turn.
Every connection negotiates experimentalApi, reads the exact thread, and does
not resume it during registration. Notification steers an active turn directly;
only idle or not-loaded threads are resumed before a new turn starts. State races
are re-read and retried.
Require a full GitHub pull-request URL and authenticated gh CLI.
Read the exact launching thread from CODEX_THREAD_ID. Never guess a recent
thread. In CLI tool shells, CODEX_THREAD_ID may be available for shell
expansion even when env does not print it; verify with
printf '%s\n' "$CODEX_THREAD_ID" if needed.
Convert the delay to whole seconds. Default to 60; require at least 10.
Select owner metadata:
desktop generation 0, preserving old invocations.--owner-surface cli and the current ownership
lease generation via --owner-generation. For an ordinary ad-hoc CLI
monitor in the launching root, use --owner-generation 1; higher
generations are for transfers, recoveries, and sweep-owned roots.By default, resolve the active login with gh api user for the PR host and
exclude inline comments authored by that exact login from wake events. This
avoids waking a worker for its own review-thread replies. The monitor still
records every observed comment id. Add --include-self-comments only when
the user explicitly wants their own inline comments monitored; comments from
bots and every other login remain material either way.
Run one of:
# Backward-compatible Desktop registration
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/monitor-pr.mjs" \
start '<pr-url>' --thread-id "$CODEX_THREAD_ID" --cwd "$PWD" --interval <seconds>
# CLI-root registration
node "${skill_dir}/scripts/monitor-pr.mjs" \
start '<pr-url>' --thread-id "$CODEX_THREAD_ID" --cwd "$PWD" --interval <seconds> \
--owner-surface cli --owner-generation <generation>Add --stall-after <seconds> (at least 60) to wake once when an open,
unqueued PR makes no observable progress for that long. Add the boolean
--include-self-comments switch to either command for the
explicit opt-in. Do not pass a value and do not introduce an environment
variable for this policy.
Confirm the returned PR URL, owner surface/generation, comment-monitoring policy, transport, interval, PID, state file, and log file.
Send a final response immediately. State that the monitor is detached and the turn is ending. For a CLI-owned monitor, also state that the shared App Server remains running after registration and should be stopped only after the last monitor and App Server worker has finished.
Registration verifies that the exact launching thread is active in the selected managed daemon before taking the inline-comment baseline. A CLI owner fails closed when the portable proxy cannot be verified; it never silently depends on Desktop. A live monitor for the same PR/thread but a different owner surface or generation is an ownership conflict and must not be replaced automatically.
For a deliberate Desktop/CLI owner cutover:
Stop the old monitor and require verifiedStopped: true from the result.
Independently verify its durable state and exact process identity:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/monitor-pr.mjs" \
verify-stopped --state-file '<old-state-path>'Register the new owner with exactly the prior generation plus one and the stopped state:
node "${skill_dir}/scripts/monitor-pr.mjs" \
start '<pr-url>' --thread-id "$CODEX_THREAD_ID" --cwd "$PWD" --interval <seconds> \
--owner-surface cli --owner-generation <new-generation> \
--previous-state-file '<old-state-path>'--previous-state-file requires the captured PID/start-token/command identity
to be absent, durable stopped state, the same
canonical PR identity, and the exact same root thread. Its prior owner surface
and generation must be valid. Replacement accepts only the next consecutive
generation (N+1); equal, stale, and skipped generations fail before daemon or
GitHub access. Before persisting the replacement baseline, registration compares
live PR state against the old monitor's latest snapshot. Inspect
registrationDelta: if detected is true, route its changes and new inline
comments to the new owner as the first material event before normal work. This
preserves events that arrived while no monitor owned the transfer window.
The replacement also carries undelivered event envelopes and delivered-event
receipts, and claims the transfer receipt idempotently by prior-state digest.
A different target for the same claim fails closed.
Version-3 states remain readable as Desktop generation 0; replacement from
legacy state must still match PR/thread and advance to generation 1.
Version-5 and older monitor states retain their historical include-all comment
behavior while already running. A replacement or same-owner recovery writes a
version-6 state, resolves the current authenticated login, and applies the new
default. An earlier explicit self-comment opt-in is inherited across transfer
and recovery; passing --include-self-comments can also opt in during either
registration path.
Do not use normal transfer to correct a stopped monitor that was historically
registered one generation above its unchanged owning sweep root. That case is
not an ownership transfer. Use the dedicated repair only when the monitor and
root have the same exact thread, cwd, and owner surface, the monitor records
generation N+1, and the active root authority records generation N:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/monitor-pr.mjs" \
repair-legacy-binding '<pr-url>' \
--state-file '<canonical-stopped-monitor-state>' \
--expected-thread-id "$CODEX_THREAD_ID" --expected-cwd "$PWD" \
--expected-prior-owner-surface cli --expected-prior-owner-generation <N+1> \
--target-owner-surface cli --target-owner-generation <N> \
--root-authority-file '<sweep-root>/authority.json' \
--root-state-base '<canonical-cl-sweep-state-base>'--root-state-base is required whenever an indexed migrated root keeps its
authority directory outside the canonical project-keyed state base. It may be
omitted only when exactly one registry is provably present in the normal one-
or two-ancestor layout. Never search broader filesystem locations or infer a
state base from another sweep.
The command takes the canonical cl-sweep registry lock and verifies the current
UID-owned mode-0700 state base/root, UID-owned mode-0600 registry and root
receipts, hash-chained current registry record, active root authority,
persistent root lease, canonical monitor path, exact absent process identity,
durable stopped state, and settled delivery history before changing ownership
metadata. It permits only the same-surface
N+1 -> N correction. It retains the byte-exact original monitor state in a
mode-0400 audit file, embeds an idempotent repair receipt, and changes no PR,
thread, cwd, event, snapshot, or delivery receipt. A reconciled ambiguous
delivery retains its receipt and is rebound only to the proven parent generation.
After the repair, register the state with sweep-root-state.mjs register-monitor, then use recover-same-owner with the exact current head.
Never run start, transfer to another generation, or delete/recreate the state
to bypass a binding mismatch. Any live process, pending/unreconciled event,
authority mismatch, noncanonical path, different surface, or generation gap
fails closed.
The sole exception to the same-root rule is a prepared project-keyed cl-sweep root adoption. After the old monitor is stopped and independently verified, pass the private transfer receipt:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/monitor-pr.mjs" \
start '<pr-url>' --thread-id '<new-root-thread>' --cwd '<exact-root-cwd>' \
--interval <seconds> --owner-surface <desktop-or-cli> \
--owner-generation <old-generation-plus-one> \
--previous-state-file '<old-state-path>' \
--root-transfer-file '<CL_SWEEP_ROOT_TRANSFER-v1-receipt>'The receipt must be mode 0600 and exactly bind the old/new thread, cwd,
surface, and consecutive generation. This transfers monitor ownership; it does
not permit overlapping monitors or relax the stopped-state, PR identity,
registration-delta, or App Server target verification gates. An incomplete
root transfer remains a cl-sweep ownership conflict.
gh login under the default policy. Preserve all comment
ids in baseline and polling state, including ignored self comments.changes_requested when the review decision is
CHANGES_REQUESTED; it settles only when the decision changes.ci_rollup_refused when GitHub reports an unqueued PR BLOCKED
and the head commit's check rollup is FAILURE or ERROR while no listed
check is failing.--stall-after, wake once with stalled when an open, unqueued PR
keeps the same head, checks, reviews, comments, and merge state for that
long. Any change restarts the clock. Same-owner recovery inherits the
deadline.UNMERGEABLE, queue ejection, successful merge,
unqueued merge readiness, or closure without merge.notification_failed and exit.When a parent workflow continues owning the open PR, exit-on-notification is a
delivery boundary, not a monitoring pause. After the parent durably hands the
event to the exact remediation worker, it should immediately run
recover-same-owner at the unchanged head so concurrent comments, CI,
conflict, closure, and merge events remain observable while remediation is in
progress. The delivered event is reconciled by same-owner recovery and must not
wake again unchanged. If remediation later changes the head, the worker's
handoff drives monitor recovery/replacement for that new head. Additional PR
comments arriving before the first PR-comment remediation push belong to the
same comment wave; monitor recovery never authorizes another review generation.
State identity includes PR and exact thread id. Different threads can monitor the same PR independently unless a higher-level cl-sweep id owns the PR; one sweep must stop and transfer its prior generation rather than overlap them. Same-thread notifications are serialized. Existing queue, retry, event-priority, active-steer, and idle-resume behavior applies equally to Desktop and CLI roots.
Same-owner recovery treats the registration snapshot as a set of concurrent
material conditions, not only the highest-priority condition. An exact caller
acknowledgement settles every condition named by that fenced registration
event (for example, a source conflict and a failing check present together).
The monitor will not immediately wake for a lower-priority member of that same
unchanged baseline. A transient omitted or UNKNOWN GitHub observation does
not prove that an acknowledged condition disappeared. Conflict settlement is
released only by authoritative clean/mergeable evidence on the same head;
failed-check settlement is released only after GitHub reports a replacement
state for the same check context. A changed check run, changed head, verified
resolution followed by recurrence, queue transition, newly arriving comment,
closure, or merge remains material. Recovery never suppresses an
unacknowledged or newly changed condition.
For a bounded read at a handoff gate, without registering a monitor:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/monitor-pr.mjs" snapshot '<pr-url>'It prints one GH_MONITOR_PR_SNAPSHOT v1 JSON verdict (head SHA, review
decision, mergeability, merge state, head rollup state, queue entry, unresolved
thread count and URLs, failing and pending checks, gates) and exits by tier:
0 ready or merged, 2 conflict, 3 unresolved threads, 4 failing CI
(including a refused rollup), 5 pending checks or queued, 6 a review or
merge-state gate or closed, 7 query failure. It never starts, stops, or wakes
anything.
Use the state file returned by start:
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/monitor-pr.mjs" status --state-file '<path>'
node "${skill_dir}/scripts/monitor-pr.mjs" stop --state-file '<path>' --wait-seconds 15status reports normalized owner metadata, exact process-identity liveness, and
verifiedStopped. stop verifies PID, process start token, and command digest
before signaling, then waits for both process exit and durable stopped state;
it refuses a reused PID or legacy live state without exact process identity.
It exits nonzero if verification times out. Do not stop a monitor unless the user
asks or a deliberate ownership transfer replaces it.
When checking a monitor after a chat resume, verify delivery health as well as
process health. A status result with processAlive: true,
processIdentityMatches: true, and verifiedStopped: false proves the monitor
process is still owned, but delivery also needs the managed App Server socket.
Run:
codex app-server daemon version
skill_dir='<absolute path to this gh-monitor-pr skill directory>'
node "${skill_dir}/scripts/setup-app-server.mjs" \
probe --surface cli --thread-id "$CODEX_THREAD_ID"If the daemon socket is missing, use the CLI setup path to recreate it without
replacing the monitor. A probe returning threadStatus: notLoaded is acceptable
after a normal resume; notifications can resume idle or not-loaded threads. A
probe failure, missing socket after setup, or monitor status with a dead or
mismatched process needs remediation before relying on future wakeups.
Daemon cleanup belongs to the owning root or user after monitoring and any wakeup handling finish; it does not belong to the detached monitor. A long-lived daemon can retain substantial thread and tool state, so do not leave it running indefinitely when it has no users.
Before stopping the daemon:
Require every monitor owned by the workflow to have exited or been stopped,
and verify each returned state file reports verifiedStopped: true with the
status or verify-stopped command.
Require every App Server worker owned by the workflow to be terminal and any monitor/worker delivery receipts reconciled. Do not infer this from an absent proxy process.
Confirm no other Desktop, CLI root, monitor, sweep, or detached worker is using the managed daemon. When ownership is uncertain, leave it running and report why cleanup was deferred.
Only after those checks, the owning root or user may reclaim all daemon memory with:
codex app-server daemon stopUse codex app-server daemon start on demand for the next CLI monitor. Never
delete App Server sockets, PID files, SQLite state, or rollout files as a cleanup
shortcut. Never stop or restart the daemon from the turn it is currently
serving; defer cleanup until that turn has ended or use an explicitly
user-authorized external owner that can prove the same no-user conditions.
Other plugins load this skill by name ($gh-monitor-pr in Codex or
/closedloop-core:gh-monitor-pr in Claude Code). They may invoke
scripts/monitor-pr.mjs or scripts/client-process-api.mjs from this loaded
skill's own folder. They never import core files or duplicate the transport.
client-process-api.mjs exposes CLOSEDLOOP_APP_SERVER_CLIENT v1 over private
stdin/stdout JSONL pipes. The contract one-shot operation checks compatibility;
daemon and decodeFrames use the same core implementation. In serve mode,
connect, initialize, request, notify, readThreadState, and sendInput
preserve the native client contract, including notification and connection
events. delegate supports an injected caller-owned client through reverse
callbacks without copying thread-state or delivery algorithms. Inputs stay on
private pipes, never command arguments or diagnostic logs. Closing stdin or
terminating the caller closes the owned connection; it never stops the shared
daemon.
The vibe adapter resolves this named skill through Codex's enabled plugin
registry and skills/list actual installed path, or Claude Code's enabled
scoped plugin registry. It does not infer a path from a marketplace source,
cache version, or another plugin directory. Missing or incompatible core stops
the workflow with an update requirement rather than falling back to a copy.
© closedloop-ai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 13 other files (scripts) in plugins/closedloop-core/skills/gh-monitor-pr of closedloop-ai/claude-plugins.
Open the folder on GitHubat commit 76594a3
Gh Monitor PR next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Gh Monitor PR this skillclosedloop-ai/claude-plugins | 122 | — | ~5.4k | Automated safety check: Pass | Apache-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Greplooponyx-dot-app/onyx | 32k | 4 repos | ~3.3k | Automated safety check: Pass | MIT | |
| GitHub Deep Researchbytedance/deer-flow | 84k | 4 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Diagnosing Superpowers Sessionsobra/superpowers | 297k | 3 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Update V8 Versionopeninterpreter/openinterpreter | 69k | 2 repos | ~845 | Automated safety check: Pass | Apache-2.0 |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
onyx-dot-app/onyx
Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.
bytedance/deer-flow
Researches a GitHub repository over four rounds using the GitHub API and web search, then writes a structured markdown report with timeline, metrics and Mermaid diagrams.
obra/superpowers
Investigates a session where Superpowers went wrong, reads the transcripts on disk and produces an evidence-cited report, optionally prepared as a bug report for the maintainers.
openinterpreter/openinterpreter
Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.
mvanhorn/last30days-skill
Research what people actually say about any topic in the last 30 days.
closedloop-ai/claude-plugins
Run Codex to review a plan file and return structured feedback with a verdict.
closedloop-ai/claude-plugins
Check if critic reviews are still valid before re-running Phase 2.5 critics.
closedloop-ai/claude-plugins
Check if cross-repo coordinator results can be reused, avoiding redundant Sonnet agent launches.
closedloop-ai/claude-plugins
Check for a cached plan-evaluation.json result before launching the plan-evaluator agent.
closedloop-ai/claude-plugins
This skill should be used when needing to locate files within the Claude Code plugins cache directory (~/.claude/plugins/cache).
closedloop-ai/claude-plugins
Deterministic plan.json validation via Python script, replacing most plan-validator agent calls.
Works with
Start a detached GitHub pull-request monitor that wakes the exact launching Codex Desktop or CLI root through the managed Codex App Server when review, CI, conflict, merge-queue, closure, readiness…. Gh Monitor PR is an agent skill from closedloop-ai/claude-plugins. Start a detached GitHub pull-request monitor that wakes the exact launching Codex Desktop or CLI root through the managed Codex App Server when review, CI, conflict, merge-queue, closure, readiness, or merge events need attention.
Gh Monitor PR fits situations like: the user asks Codex to watch; merge queue without keeping the current turn alive.
Run `npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a claude-code`. Or copy the skill folder (plugins/closedloop-core/skills/gh-monitor-pr in closedloop-ai/claude-plugins) into .claude/skills/gh-monitor-pr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a codex`. Or copy the skill folder (plugins/closedloop-core/skills/gh-monitor-pr in closedloop-ai/claude-plugins) into .agents/skills/gh-monitor-pr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add closedloop-ai/claude-plugins --skill gh-monitor-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gh-monitor-pr, .gemini/skills/gh-monitor-pr, .github/skills/gh-monitor-pr and .opencode/skills/gh-monitor-pr in your project.
Going by SKILL.md and its folder, Gh Monitor PR needs JavaScript and a shell for the scripts in its folder and the command-line tools its instructions call (node, codex and gh). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Gh Monitor PR is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.4k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Gh Monitor PR: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Greploop (onyx-dot-app/onyx, 32k stars), GitHub Deep Research (bytedance/deer-flow, 84k stars) and Diagnosing Superpowers Sessions (obra/superpowers, 297k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
closedloop-ai (a GitHub organization) maintains it in closedloop-ai/claude-plugins, which has 122 GitHub stars. The repository holds 44 skills in this directory. The repository was last updated on October 10, 2026.
Source: closedloop-ai/claude-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.