From miranda
Review a PR against its linked issue requirements, post structured feedback
npx claudepluginhub open-horizon-labs/bottle --plugin mirandaThis skill uses the workspace's default tool permissions.
Review a PR, check it against the linked issue's requirements, and post structured feedback as a GitHub review. Read-only except for the review comment itself — no code changes, no commits.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Review a PR, check it against the linked issue's requirements, and post structured feedback as a GitHub review. Read-only except for the review comment itself — no code changes, no commits.
/oh-review <pr-number>
<pr-number> - the pull request number to reviewgh must be authenticatedRead dive context (if available) for project background:
cat .wm/dive_context.md 2>/dev/null || echo "No dive context"
Fetch PR metadata:
gh pr view <pr-number> --json title,body,headRefName,baseRefName,additions,deletions,changedFiles,state,mergeable
Abort if PR is not open.
Read the linked issue (CRITICAL) — the issue is the source of truth for requirements:
gh issue view <N> --json title,bodyFetch the PR diff:
gh pr diff <pr-number>
Review the diff against:
Write a structured review to a temp file:
## Review: PR #<number> — <title>
### Requirements Check (from #<issue>)
- [ ] <acceptance criterion 1> — met/not met/partially met
- [ ] <acceptance criterion 2> — met/not met/partially met
### Blockers (P0-P1)
- <issue with explanation and suggested fix>
### Improvements (P2-P3)
- <issue with explanation>
### Clean
- <what looks good>
### Follow-up Work
- <concrete items that should be separate issues/PRs>
Post the review on the PR:
gh pr review <pr-number> --request-changes --body-file /tmp/review-<pr-number>.md
gh pr review <pr-number> --approve --body-file /tmp/review-<pr-number>.md
Signal completion:
signal_completion(status: "blocked", blocker: "PR has N blockers — see review comment")signal_completion(status: "success", message: "Approved — N improvements noted")signal_completion(status: "error", error: "<reason>")CRITICAL: You MUST signal completion when done. Call the signal_completion tool as your FINAL action.
Signal based on outcome:
| Outcome | Call |
|---|---|
| Review posted, PR approved | signal_completion(status: "success", message: "Approved — N improvements noted") |
| Review posted, changes requested | signal_completion(status: "blocked", blocker: "PR has N blockers — see review comment") |
| Unrecoverable failure | signal_completion(status: "error", error: "<reason>") |
If you do not signal, the orchestrator will not know you are done and the session becomes orphaned.
Fallback: If the signal_completion tool is not available, output your completion status as your final message in the format: COMPLETION: status=<status> message=<msg> or COMPLETION: status=<status> error=<reason>.
$ /oh-review 99
Fetching PR #99...
PR: "Fix validation bug in auth module"
State: open, +147 -23, 4 files changed
Parsing linked issue...
Found: Closes #42
Fetching issue #42...
Issue: "Fix validation bug in auth module"
Acceptance criteria:
1. Empty string validation returns error
2. Tests cover edge cases
3. No changes to public API
Fetching PR diff...
Reviewing diff against requirements...
Posting review...
gh pr review 99 --approve --body-file /tmp/review.md
Review posted:
Requirements: 3/3 met
Blockers: 0
Improvements: 2
Follow-ups: 1
signal_completion(status: "success", message: "Approved — 2 improvements noted")
Done.
ARGUMENTS: