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.
Render the operator-facing local-mode code review results at stage29present.
$ npx skills add closedloop-ai/claude-plugins --skill present-local -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install closedloop-ai/claude-plugins present-local --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/code-review/skills/present-local .claude/skills/present-local && 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 "present-local" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/code-review/skills/present-local into .claude/skills/present-local/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "present-local", 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/code-review/skills/present-localType 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 present-local -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install closedloop-ai/claude-plugins present-local --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/code-review/skills/present-local .agents/skills/present-local && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "present-local" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/code-review/skills/present-local into .agents/skills/present-local/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "present-local", 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 present-local -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install closedloop-ai/claude-plugins present-local --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/code-review/skills/present-local .cursor/skills/present-local && 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 "present-local" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/code-review/skills/present-local into .cursor/skills/present-local/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "present-local", 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/code-review/skills/present-local--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 present-local -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install closedloop-ai/claude-plugins present-local --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/code-review/skills/present-local .gemini/skills/present-local && 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 "present-local" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/code-review/skills/present-local into .gemini/skills/present-local/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "present-local", 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 present-localInstalls 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 present-local -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/code-review/skills/present-local .github/skills/present-local && 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 "present-local" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/code-review/skills/present-local into .github/skills/present-local/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "present-local", 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 present-local -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 present-local --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/code-review/skills/present-local .opencode/skills/present-local && 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 "present-local" agent skill from https://github.com/closedloop-ai/claude-plugins/tree/main/plugins/code-review/skills/present-local into .opencode/skills/present-local/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "present-local", 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.
present-localRender the operator-facing local-mode code review results at stage29present.
Present Local is an agent skill from closedloop-ai/claude-plugins. Render the operator-facing local-mode code review results at stage29present. Covers BLOCKING/HIGH/MEDIUM section templates, Justified Findings (PLN-721), Dismissed Findings (PLN-722), Verifier Stats footer (PLN-773), operator-flag descriptions, override precedence rule for stage22b, Validation Summary, and final Summary. Invoke when MODE=local AND stage29present is reached. Do NOT use for GitHub mode — see prompts/github-review.md. Do NOT use for Gate A hygiene-only early-exit — that path is mode-agnostic and…
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Code review. 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.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0e20ac0. 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.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Present Local loads about 3.9k tokens when it runs. Until then it costs about 147 tokens; SKILL.md has 1,301 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); files beside SKILL.md are not scanned.
The full file from closedloop-ai/claude-plugins at commit 0e20ac0, republished under its Apache-2.0 licence (© closedloop-ai). 1,301 words, ~3,907 tokens.
.claude/skills/present-local/SKILL.md (or your agent's skills folder).This skill is the canonical presenter for /code-review local mode at stage_29_present. It is split out of commands/start.md so the orchestration spine stays lean; the orchestrator invokes it when MODE=local and stage_29_present is reached.
Gate A hygiene-only early-exit is not in this skill. That path is mode-agnostic (fires for both MODE=local and MODE=github) and the hygiene presentation lives in start.md adjacent to the Gate A definition — the orchestrator handles it inline, not via this skill.
Mark "Present findings by severity" in_progress.
Render the report below. Three text conventions run through this template, so it stays clear which lines you emit verbatim and which are directions to you:
## section headers (Repo Hygiene, BLOCKING, …) are the report's own structure — emit them as written, with the live [count] substituted.{PLACEHOLDER} and [bracketed] fields.[bracketed] and {BRACED} tokens are instructions or substitution points, never literal output.Output in this format:
# Code Review Results
**Scope:** [staged/branch/files]
**Files Reviewed:** [count]Reviewer Fleet block (PLN-725 Phase 9 / v2.23.0). Do NOT write the Reviewers / Model Routing / Fleet lines from scratch. Run the canonical renderer and embed its output verbatim:
python <HELPERS> render-fleet-summary --cr-dir <CR_DIR>The renderer consumes <CR_DIR>/spawn.json (sections: spec — intended fleet from stage_19b; verification — runtime tally from stage_20b; route — model assignments from Gate B). The output is a deterministic markdown block of 2–9 lines — 2–4 for the core Reviewers / Model Routing / Fleet section, plus up to 5 conditional note bullets — covering:
spawn.json.route.N intended | N ran | N required missing so the operator sees the runtime tally without scrolling to Verifier Stats.Embed the renderer's output verbatim where the prior static Reviewers/Model Routing block would have appeared (between the **Files Reviewed:** line and the next --- separator). Do NOT hand-author a separate Reviewers line — the renderer is the single source of truth for fleet composition.
Fallback: if the renderer reports spawn-spec unavailable or spawn-spec fell back, the orchestrator walked the static reviewer table in the code-review:spawn-reviewers skill for this run. The renderer says so explicitly; embed its line as-is and rely on the static reviewer table in the code-review:spawn-reviewers skill for what the fleet looked like at dispatch time.
Fast-path runs are handled by the renderer too — it emits the Fast Path Reviewer (single-agent mode) line + the resolved fast-path model. No branch needed in this skill.
Then continue with:
[List any hygiene findings from deterministic checks]
### Finding Title
**File:** `path/file.ts:line`
**Issue:** [description]
**Recommendation:** [fix][List all blocking issues]
### Issue Title
**File:** `path/file.ts:line`
**Reported by:** [agent(s)]
**Issue:** [description]
**Recommendation:** [fix]Impact Analyzer findings (FEA-1401): when a finding has
category: "ImpactAnalysis" AND non-empty external_impact[],
append an Affected callsites block AFTER Recommendation:
### Issue Title
**File:** `path/file.ts:line`
**Reported by:** Impact Analyzer
**Issue:** [description]
**Recommendation:** [fix]
**Affected callsites** ({len(external_impact)}):
- `{external_impact[i].file}:{external_impact[i].line}` — {external_impact[i].description} ({external_impact[i].impact_type})
- ...Sort external_impact[] entries by (file, line) ascending. Cap at
10 displayed; if more, append a pointer line:
(+{N-10} more — see review_result.json finding.external_impact[]).
[List all high priority issues — same format, including the Impact Analyzer Affected callsites block when applicable]
[List all medium priority issues — same format, including the Impact Analyzer Affected callsites block when applicable]
Read <CR_DIR>/review_result.json → justified[]. If empty, omit the section. If non-empty, render below with collapsible details so the reviewer can audit the justification audit. Cap at 20 displayed; if more, append a pointer line to review_result.json.justified[].
For each justified finding:
### [{ORIGINAL_SEVERITY} justified] {FILE}:{LINE} — {ISSUE_HEAD}
**Finding ID:** `{ID}`
**Original reviewer:** {REVIEWER}
**Verifier verdict:** JUSTIFIED-VALID
**Verifier confidence:** {VERIFIER_CONFIDENCE}
**Original concern:** [verbatim from finding.issue]
**Author's justification:**
> [verbatim from finding.justification.text]
>
> — cited at `{finding.justification.source}` by `{finding.justification.claimed_by_reviewer}`
**Verifier reasoning:** [verbatim from finding.verifier_reasoning — explains why J1 + J2 both passed]After all justified findings (or the cap), print:
ℹ️ {N} finding(s) were emitted by reviewers but absorbed by author justification comments the verifier independently validated. Inspect each; if you disagree with a dismissal, the original concern is preserved in review_result.json.justified[].Read <CR_DIR>/review_result.json → rejected[]. If empty, omit the section. If non-empty, render verbose-by-design (humans must evaluate, not skim) and sort BLOCKING dismissals first, MEDIUM last. Cap at 20 displayed; if more, append a pointer line to review_result.json for the full list.
For each rejected finding:
### [{ORIGINAL_SEVERITY} dismissed] {FILE}:{LINE} — {ISSUE_HEAD}
**Finding ID:** `{ID}`
**Original reviewer:** {REVIEWER}
**Verifier verdict:** REJECTED (rejection_class: `{REJECTION_CLASS}`)
**Verifier confidence:** {VERIFIER_CONFIDENCE}
**Original issue:** [verbatim from finding.issue]
**Verifier reasoning:** [verbatim from finding.verifier_reasoning — usually 1-3 paragraphs]
**Evidence checks:**
- ✓ {check.claim} — verified at {check.source}
- ✗ {check.claim} — {check.actual_read} ({check.source})
(If `finding.verifier_verdict == "TENTATIVE"` because of a sensitive-path escalation rather than a true REJECTED → TENTATIVE rewrite, that finding belongs in the primary BLOCKING/HIGH/MEDIUM sections above with a `[verifier uncertain — sensitive path]` annotation, NOT here.)After all rejected findings (or the cap), print:
ℹ️ {N} finding(s) were emitted by reviewers but disproved by the verifier with cited evidence. Inspect each; if you disagree with a dismissal, the original finding is preserved in review_result.json.rejected[].If review_result.json.pending_verification[] is non-empty, append a one-line note:
⚠️ {M} finding(s) were eligible for verification but no verifier output landed on disk (agent timeout or budget overflow). Treat them as unverified and re-review by reading review_result.json.pending_verification[].Read <CR_DIR>/review_result.json → stats.verification. Render the footer below verbose-by-design — operators read the per-reviewer FP rate to detect over-rejection (a reviewer hallucinating findings the verifier then discards).
=== Verifier Stats ===
Findings verified: {stats.verification.verified_count}
- CONFIRMED + DOWNGRADE: {verified_count - tentative_count - re_asserted}
- TENTATIVE: {tentative_count}
- RE_ASSERTED: sum over by_reviewer[].re_asserted
Findings dismissed: {stats.verification.rejected_count}
Findings justified: {stats.verification.justified_valid_count + stats.verification.justified_invalid_count}
- JUSTIFIED-VALID: {stats.verification.justified_valid_count}
- JUSTIFIED-INVALID: {stats.verification.justified_invalid_count}
Reviewers (FP rate / overrides):
{reviewer}: {fp_rate:.2f} / {re_asserted}{ " ⚠ override" if re_asserted > 0 else "" }
Impact gateable count: {stats.impact_cumulative_count} (gate threshold {impact_cumulative})
Partition mode: {verify_manifest.partition_mode} ({verify_manifest.partition_count} partitions)Deferred Impact symbols (FEA-1401) — render this block ONLY when
the Impact Analyzer's agent_impact.json carries a non-empty
deferred_symbols[] list (cost cap fired, more candidate symbols
existed than the 30-symbol limit allowed). Render after the Partition
mode line. If the file is absent (Impact didn't spawn) or
deferred_symbols[] is empty, omit entirely.
=== Deferred Impact symbols ({len(deferred_symbols)}) ===
{deferred_symbols[i].symbol} at {deferred_symbols[i].file}:{deferred_symbols[i].line} — {deferred_symbols[i].change_nature}
...
ℹ️ These symbols were identified as candidates but not analyzed due to the 30-symbol cap. Consider re-running on a narrower scope to cover them.Render the Partition mode line by reading <CR_DIR>/verify_manifest.json → partition_mode ("unified" | "partitioned" | "unknown") and partition_count (int). The Reviewers block above keys off the reviewer field which cmd_collect_findings derives from the agent filename (agent_bha_p0.json → reviewer='bha_p0'), so BHA naturally appears as one bucket per partition under partitioned mode and a single bha_p0 bucket under unified mode (only one partition exists). Defensive: if verify_manifest.json is missing (pre-PLN-774 cache or hygiene-only run), omit this line — do NOT fabricate a value.
If the verify-prepare manifest carried override_hits (operator --re-assert honored) or override_invalidated (override rejected on file-content drift), echo a one-line summary:
ℹ️ Overrides: {len(override_hits)} honored / {len(override_invalidated)} invalidated (content drift).--justified-only — when present, render ONLY the Justified Findings section above. Suppress BLOCKING / HIGH / MEDIUM / Dismissed sections so the operator can audit justification usage without scrolling past every finding.--re-assert <id>[,<id>...] — write operator overrides for the listed finding IDs via code_review_helpers.py re-assert --cr-dir <CR_DIR> --cache-dir <CACHE_DIR> --finding-ids <ids> [--reason '<why>']. Promotes from rejected[] / pending_verification[] back into verified[] on the next run. Persists across runs via <CACHE_DIR>/overrides/<finding_id>.json keyed on file-content hash — content drift auto-invalidates the override.--review-dismissed — fetch a second opinion (haiku verifier) on prior rejected[]. Run review-dismissed-prepare to build the manifest — if it exits non-zero, print its stderr and STOP: do not dispatch the fleet and do not run consolidate. Exit 3 means the review root could not be proven (on a local PR review, stage_30_footer has already torn the PR-head worktree down, so a second opinion cannot be formed against the reviewed source; re-run /code-review instead). Otherwise dispatch a haiku-verifier fleet against the per-finding inputs, then run review-dismissed-consolidate to auto-promote any non-REJECTED verdict via the same override file format (override: "REVIEW_DISMISSED"). Side-by-side diff lands at <CR_DIR>/review_dismissed_diff.json.When cmd_verify_prepare runs with a --cache-dir, the precedence is:
<CACHE_DIR>/overrides/<finding_id>.json — operator override. If the file exists and the cited file's content hash still matches, synthesize a RE_ASSERTED verdict and skip both the verifications/ cache and the agent spawn.<CACHE_DIR>/verifications/<finding_id>.json — cached verifier verdict for the (finding_id, snippet_hash, model, prompt_hash) tuple. Materialize at the canonical output path and skip the agent spawn.Hash drift on an override (file content changed since the override was written) → override invalidated silently (logged in manifest.override_invalidated[]); verifier runs normally.
If normalization_warnings > 0 in findings_validated.json, append this line directly after the summary list below:
⚠️ Severity normalization: N findings had non-standard severity values (mapped to MEDIUM).other_locations)(Placeholder I is intentional — H is reserved for "Hygiene findings" above. Reusing H here would conflate two distinct counts in the rendered Validation Summary.)
[List discarded findings grouped by discard reason — helps track agent accuracy]
The Output directory line is mandatory at every stage_29 — there is no "no artifacts" case at present-time. Substitute [CR_DIR_PATH] with the actual CR_DIR resolved in stage 0 (typically .closedloop-ai/code-review/cr-<NNNNN>) so operators can locate review_result.json, agent outputs, manifests, patches, and WIP files from in-progress pipeline phases without scanning the filesystem. Render the template below verbatim:
| Severity | Count |
|----------|-------|
| Blocking | X |
| High | Y |
| Medium | Z |
**Recommendation:** [action based on findings]
**Output directory:** `[CR_DIR_PATH]`Consolidated Finding Format (when multiple findings share root cause):
### Issue Title
**File:** `path/file.ts:line`
**Reported by:** [agent(s)]
**Issue:** [description]
**Other Locations** (N more):
- `path/file.ts:87` — same pattern in `functionName()`
- `path/file.ts:124` — same pattern in `otherFunction()`
**Recommendation:** [fix]Mark todo as completed.
© 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
Just SKILL.md in plugins/code-review/skills/present-local of closedloop-ai/claude-plugins.
Open the folder on GitHubat commit 0e20ac0
Present Local 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 |
|---|---|---|---|---|---|---|
| Present Local this skillclosedloop-ai/claude-plugins | 122 | — | ~3.9k | Automated safety check: Pass | Apache-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| GitHub Review Iterationprisma/orm | 48k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| PR Finalize Reviewmicrosoft/garnet | 12k | — | ~3.1k | Automated safety check: Pass | MIT | |
| PR Review State Fetchprisma/orm | 48k | — | ~767 | Automated safety check: Pass | Apache-2.0 | |
| Fastlane Pull Request Reviewfastlane/fastlane | 42k | — | ~550 | Automated safety check: Pass | MIT |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
prisma/orm
Runs a loop on a GitHub pull request: fetch review state, triage comments into actions, implement them and resolve threads, repeating until nothing actionable is left.
microsoft/garnet
Checks that a pull request's title and description match its implementation and reviews the code for Garnet best practices, reporting findings without posting them.
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
fastlane/fastlane
Reviews a fastlane pull request against its linked issue and the project guides, separating blocking from non-blocking findings and handling vulnerabilities privately.
saadeghi/daisyui
Reviews open pull requests in the daisyUI repository using read-only GitHub data and isolated base-versus-PR checks, then writes a merge verdict report.
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
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…
Works with
Categories
Render the operator-facing local-mode code review results at stage29present. Present Local is an agent skill from closedloop-ai/claude-plugins. Render the operator-facing local-mode code review results at stage29present.
Present Local fits situations like: GitHub mode — see prompts/github-review.md; gate A hygiene-only early-exit — that path is mode-agnostic and remains in start.md alongside the Gate A definition.
Run `npx skills add closedloop-ai/claude-plugins --skill present-local -a claude-code`. Or copy the skill folder (plugins/code-review/skills/present-local in closedloop-ai/claude-plugins) into .claude/skills/present-local in your project. Claude Code loads it when a task matches its description.
Run `npx skills add closedloop-ai/claude-plugins --skill present-local -a codex`. Or copy the skill folder (plugins/code-review/skills/present-local in closedloop-ai/claude-plugins) into .agents/skills/present-local 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 present-local -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/present-local, .gemini/skills/present-local, .github/skills/present-local and .opencode/skills/present-local in your project.
Going by SKILL.md and its folder, Present Local needs the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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. Review the folder before installing.
Present Local 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 3.9k tokens (SKILL.md is roughly 16k 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 Present Local: PR Babysitter (openinterpreter/openinterpreter, 69k stars), GitHub Review Iteration (prisma/orm, 48k stars), PR Finalize Review (microsoft/garnet, 12k stars) and PR Review State Fetch (prisma/orm, 48k 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 43 skills in this directory. The repository was last updated on October 7, 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.