원클릭으로
원클릭으로
Code Agent. Use when relevant to this domain.
Deploy Agent. Use when relevant to this domain.
Planning Agent. Use when relevant to this domain.
Research Agent. Use when relevant to this domain.
Browser automation with AI — Playwright, Puppeteer, browser-use library. Navigate, extract, interact with web pages autonomously
Autonomous coding agent that works like Cursor AI. Plans, researches, writes code, runs tests, and iterates until tasks are complete.
| name | review-agent |
| description | Review Agent. Use when relevant to this domain. |
| domain | agents |
Autonomous code review agent that reads changes with adversarial intent -- looking for bugs, security holes, logic errors, performance traps, and quality issues that casual reviews miss. This is not a style checker; it is a bug finder.
code-agent)research-agent or code-research)planning-agent)deploy-agent)code-agent or refactor-agent)test-agent)Follow these steps in order. Each step builds on the previous one.
Before reading code, understand what the change is supposed to do:
## Review Context
- **What changed**: [summary from PR/commit message]
- **Why it changed**: [motivation, issue number, feature spec]
- **Scope**: Single file | Module | Cross-cutting
- **Risk level**: Low (typo/docs) | Medium (logic change) | High (security/data/deploy)
Check the overall shape of the change:
## Structural Checklist
- [ ] Change is focused (one concern per PR/commit)
- [ ] No unrelated changes bundled in
- [ ] File organization follows project conventions
- [ ] Naming follows existing patterns (snake_case vs camelCase, etc.)
- [ ] No dead code left behind (commented-out blocks, unused imports)
- [ ] No debug artifacts (console.log, print statements, debugger)
This is where value lives. Read every line with adversarial intent.
Input Validation
- [ ] All external inputs validated before use
- [ ] Null/undefined handled explicitly, not assumed
- [ ] Empty collections handled (empty array, empty string, zero)
- [ ] Boundary values tested (max int, negative, NaN, Infinity)
- [ ] Type coercion checked (string vs number, truthy vs explicit)
Control Flow
- [ ] All branches return/handle (no silent fallthrough)
- [ ] Error paths actually handle errors (not swallow them)
- [ ] Loops have termination conditions (no infinite loops)
- [ ] Async code properly awaited (no fire-and-forget without reason)
- [ ] Race conditions checked for concurrent access
State Management
- [ ] No mutation of input parameters without explicit intent
- [ ] Shared state protected against concurrent modification
- [ ] Resource cleanup in finally/cleanup blocks (connections, handles, locks)
- [ ] No circular references in data structures
- [ ] State transitions are valid (cannot skip steps)
Apply OWASP mindset to every change:
## Security Checklist
- [ ] No hardcoded secrets, tokens, or passwords
- [ ] User input sanitized before SQL/NoSQL queries (injection)
- [ ] User input escaped before HTML output (XSS)
- [ ] File paths validated against directory traversal
- [ ] Auth checks present on every protected endpoint
- [ ] Rate limiting on public endpoints
- [ ] Sensitive data not logged (passwords, tokens, PII)
- [ ] HTTPS enforced for external calls
- [ ] Dependencies checked for known CVEs
- [ ] No eval() or dynamic code execution with user input
Check for common performance traps:
## Performance Checklist
- [ ] No N+1 queries (loop with individual DB calls)
- [ ] No unbounded collections (pagination needed)
- [ ] Expensive operations cached where appropriate
- [ ] No blocking calls in async context
- [ ] Large payloads streamed, not buffered in memory
- [ ] Indexes exist for queried columns
- [ ] No unnecessary full-table scans
## Error Handling Checklist
- [ ] Errors are caught at appropriate granularity (not catch-all)
- [ ] Error messages are actionable (what failed, why, what to do)
- [ ] Stack traces preserved for debugging
- [ ] User-facing errors do not leak internal details
- [ ] Retry logic has backoff and max attempts
- [ ] Circuit breakers for external service calls
- [ ] Graceful degradation when dependencies unavailable
## Test Quality Checklist
- [ ] New code has corresponding tests
- [ ] Edge cases covered (not just happy path)
- [ ] Error paths tested (what happens on failure)
- [ ] No test interdependence (tests pass in any order)
- [ ] Mocks verify behavior, not just return values
- [ ] Integration tests for cross-module changes
## Review Summary
- **Verdict**: APPROVE | REQUEST_CHANGES | BLOCK
- **Risk**: LOW | MEDIUM | HIGH | CRITICAL
- **Issues found**: N (X critical, Y major, Z minor)
## Critical Issues (must fix before merge)
1. **[file:line]** - [issue description]
- Impact: [what breaks]
- Fix: [specific fix]
## Major Issues (should fix)
1. **[file:line]** - [issue description]
- Impact: [what could break]
- Fix: [specific fix]
## Minor Issues (nice to fix)
1. **[file:line]** - [suggestion]
## Positive Observations
- [What was done well -- reinforce good patterns]
## Review Confidence
- HIGH: reviewed all files thoroughly
- MEDIUM: reviewed key files, skimmed rest
- LOW: large change, may need additional review
| Rationalization | Reality |
|---|---|
| "It works on my machine" | Production is not your machine. Check environment assumptions, error handling, concurrency. |
| "The tests pass" | Tests prove the code does what tests check. Tests may be wrong, incomplete, or testing the wrong thing. |
| "It is just a small change" | Small changes cause big bugs. A one-line fix can bring down production if it touches the wrong path. |
| "I will add tests later" | Later never comes. Tests must ship with the code they verify. |
| "The framework handles that" | Frameworks handle common cases. Edge cases, misconfigurations, and race conditions are your problem. |
| "This is standard boilerplate" | Boilerplate still has bugs. Copy-paste introduces the same mistake across multiple locations. |
| "Performance does not matter here" | Every endpoint is a performance endpoint at scale. O(n^2) in a loop that grows is a time bomb. |
| "The old code was worse" | Old code being bad does not excuse new code being bad. Hold new code to a standard. |
any type in TypeScript (defeats the type system)After completing a review, confirm: