Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Perform thorough code reviews with actionable, prioritized feedback. Use when a user asks to review code, check code quality, find bugs, review a pull request, audit code for issues, or get feedback on implementation. Covers correctness, security, performance, readability, and best practices across languages.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-12 | ✓→✗ | ▼ Worse | 60% | 0% |
| case-13 | ✓→✗ | ▼ Worse | 55% | 0% |
| case-15 | ✓→✗ | ▼ Worse | 173% | 0% |
Perform structured code reviews that identify bugs, security issues, performance problems, and maintainability concerns. Provides prioritized, actionable feedback with specific fix suggestions.
When a user asks you to review code, a file, a diff, or a pull request, follow this process:
Before reviewing, determine:
Read surrounding files if needed to understand the broader codebase context.
Evaluate the code against each category in order of severity:
Correctness (Critical)
Security (Critical)
Performance (High)
Reliability (High)
Readability (Medium)
Testing (Medium)
Organize findings by severity. For each issue:
### [SEVERITY] Category: Brief title
**File:** `path/to/file.ext` line XX-YY
**Issue:** What is wrong and why it matters.
**Suggestion:**
\`\`\`language
// Suggested fix
\`\`\`Severity levels: CRITICAL, HIGH, MEDIUM, LOW
End with:
User request: "Review this Express route handler"
Code submitted:
javascriptapp.post('/users', async (req, res) => { const { name, email, role } = req.body; const user = await db.query( `INSERT INTO users (name, email, role) VALUES ('${name}', '${email}', '${role}')` ); res.json(user); });
Review output:
### CRITICAL Security: SQL Injection vulnerability
**File:** routes/users.js line 2-5
**Issue:** User input is interpolated directly into the SQL query string.
An attacker can inject arbitrary SQL via the name, email, or role fields.
**Suggestion:**
const user = await db.query(
'INSERT INTO users (name, email, role) VALUES ($1, $2, $3)',
[name, email, role]
);
### CRITICAL Security: No input validation
**File:** routes/users.js line 2
**Issue:** Request body fields are used without validation. Missing or
malformed data will cause database errors or store invalid records.
**Suggestion:**
if (!name || !email || !email.includes('@')) {
return res.status(400).json({ error: 'Name and valid email required' });
}
const allowedRoles = ['user', 'admin', 'editor'];
if (!allowedRoles.includes(role)) {
return res.status(400).json({ error: 'Invalid role' });
}
### HIGH Reliability: No error handling
**File:** routes/users.js line 3-5
**Issue:** If the database query fails, the error propagates as an
unhandled promise rejection, crashing the process or returning a 500
with a stack trace.
**Suggestion:**
try {
const user = await db.query(...);
res.status(201).json(user);
} catch (err) {
console.error('Failed to create user:', err);
res.status(500).json({ error: 'Failed to create user' });
}
Summary: REQUEST CHANGES
- Critical: 2, High: 1, Medium: 0
- Fix SQL injection and add input validation before mergingUser request: "Review this component for any issues"
Code submitted:
jsxfunction UserList({ users }) { const [search, setSearch] = useState(''); const filtered = users.filter(u => u.name.toLowerCase().includes(search.toLowerCase()) ); return ( <div> <input onChange={e => setSearch(e.target.value)} /> {filtered.map(user => ( <div>{user.name} - {user.email}</div> ))} </div> ); }
Review output:
### MEDIUM Performance: Filtering runs on every render
**Issue:** The filter operation recalculates on every render, even when
unrelated state changes. For large lists this causes jank.
**Suggestion:**
const filtered = useMemo(() =>
users.filter(u =>
u.name.toLowerCase().includes(search.toLowerCase())
), [users, search]);
### MEDIUM Readability: Missing key prop on list items
**Issue:** React requires a unique key prop on list items for efficient
reconciliation. Missing keys cause incorrect re-renders and warnings.
**Suggestion:**
{filtered.map(user => (
<div key={user.id}>{user.name} - {user.email}</div>
))}
### LOW Readability: Missing input label and placeholder
**Issue:** The search input has no label or placeholder, making it
unclear what the input is for and inaccessible to screen readers.
**Suggestion:**
<label htmlFor="user-search">Search users</label>
<input
id="user-search"
placeholder="Search by name..."
onChange={e => setSearch(e.target.value)}
/>
Summary: APPROVE with suggestions
- Critical: 0, High: 0, Medium: 2, Low: 1
- Add key prop and useMemo before mergingOther measured skills in the registry, with their headline benchmark lift.