From ottonomous
Reviews git branch or staged diffs for P0-P2 bugs using parallel subagents, synthesizes validated findings, creates fix plans, and implements fixes via /review fix.
npx claudepluginhub brsbl/ottonomous --plugin ottonomousThis skill uses the workspace's default tool permissions.
**Arguments:** $ARGUMENTS
Reviews code changes using parallel personas for correctness, testing, maintainability, and conditional areas like security, performance, APIs. Merges into P0-P3 severity reports for PR prep and iterative feedback.
Reviews code diffs for bugs, security issues (OWASP top 10), and quality problems. Creates FIX tasks for blocking issues. Use after cw-validate before merge.
Performs structured code reviews using tiered persona agents, confidence-gated findings, and merge/dedup pipeline on code changes or PRs before merging.
Share bugs, ideas, or general feedback.
Arguments: $ARGUMENTS
| Command | Behavior |
|---|---|
/review | Review branch diff, synthesize findings, create fix plan |
/review staged | Review staged changes only |
/review fix | Implement all fixes from saved plan |
/review fix P0 | Implement only P0 (critical) fixes |
/review fix P0-P1 | Implement P0 and P1 fixes |
| Scope | Git Command |
|---|---|
branch (default) | git diff main...HEAD |
staged | git diff --cached |
Get the diff and categorize files by change type:
Architectural changes → assign to architect-reviewer:
Implementation changes → assign to senior-code-reviewer:
If a file fits both categories, assign to both reviewers.
Scale based on change size:
Handoff to reviewer subagents:
git diff main...HEAD -- <files> (or --cached for staged)Subagents return prioritized findings (P0-P2) in consistent format with Files, Problem, Fix, and Done when.
Wait for all subagents to complete.
## Code Review Findings
| P | Problem | Fix Approach | Files | Done When |
|---|---------|--------------|-------|-----------|
| P0 | Null pointer in user lookup | Add early return with 404 | `users.ts:47` | Returns 404 for missing user |
| P1 | Race condition in cache | Use mutex lock | `cache.ts:23` | Concurrent requests don't corrupt |
| ... | ... | ... | ... | ... |
**Verdict: CORRECT | NEEDS FIXES**
If no findings: Report "No issues found" and stop.
Skip this step if there are no findings (verdict is already CORRECT).
Launch false-positive-validator with:
Process results:
<details>
<summary>Validation: {N} removed, {M} downgraded</summary>
| Finding | Verdict | Reason |
|---------|---------|--------|
| [P1] Title | FALSE POSITIVE | Already handled — `file.ts:32` has null check |
| [P0 → P2] Title | DOWNGRADED | Context negates severity — `api.ts:15` validates input |
</details>
If any fix requires a decision (contains "Either...OR", "Option A/B", or similar patterns), use AskUserQuestion to interview the user:
[P0] Plugin discovery limited to 3 hardcoded paths
The fix has multiple options:
A) Restore two-pass file fetching (more complete, adds complexity)
B) Remove dead countCommands/countSkills functions (simpler, less data)
Which approach?
Process multiple ambiguous fixes in a single interview when possible:
If no ambiguous fixes, skip to Step 6.
Ask for approval using AskUserQuestion:
.otto/reviews/fix-plan-draft.md for editingOn approval, write fix plan to .otto/reviews/fix-plan.json:
{
"version": 1,
"created": "{timestamp}",
"scope": "{scope}",
"branch": "{branch}",
"commit_sha": "{HEAD}",
"summary": { "p0": 0, "p1": 0, "p2": 0, "p3": 0 },
"verdict": "NEEDS FIXES",
"fixes": [
{
"id": "f1",
"priority": "P0",
"title": "Null pointer dereference in user lookup",
"problem": "user.profile accessed without null check",
"fix": "Add early return with 404 when user is null",
"files": [
{ "path": "src/auth/users.ts", "line": 47, "role": "primary" },
{ "path": "src/auth/users.test.ts", "role": "add test" }
],
"done_when": "Returns 404 for missing user; test covers case",
"status": "pending",
"depends_on": []
}
]
}
Report: Fix plan saved. Run /review fix to implement.
.otto/reviews/fix-plan.json exists
/review firstfix or fix all: P0-P2fix P0: P0 onlyfix P0-P1: P0 and P1Select unblocked fixes — where all depends_on are done.
Scale subagents:
Prefer fewer subagents with multiple fixes each. Single-file fixes in the same directory should always share a subagent.
Each subagent receives:
git add {files}, mark status done in fix-plan.jsonAfter each batch: re-evaluate unblocked fixes, launch next batch, repeat until done.
Verify: Run type check and linter after all fixes are applied. If errors relate to a fix, correct them directly (do not re-launch subagents). Report results.
Fix review issues P{highest}-P{lowest}
- [P{N}] Brief description
- [P{N}] Brief description
.otto/reviews/fix-plan.json## Fix Results
| Issue | Status |
|-------|--------|
| [P0] Null reference | ✓ Fixed |
| [P1] Race condition | ✓ Fixed |
Commit: {hash}