Code Review Skill
Review code changes in coder/coder and identify bugs, security issues, and
quality problems.
Workflow
Get the code changes - Use the method provided in the prompt, or if none
specified:
- For a PR:
gh pr diff <PR_NUMBER> --repo coder/coder
- For local changes:
git diff main or git diff --staged
Read full files and related code before commenting - verify issues exist
and consider how similar code is implemented elsewhere in the codebase
Analyze for issues - Focus on what could break production
Report findings - Use the method provided in the prompt, or summarize
directly
Severity Levels
- 🔴 CRITICAL: Security vulnerabilities, auth bypass, data corruption,
crashes
- 🟡 IMPORTANT: Logic bugs, race conditions, resource leaks, unhandled
errors
- 🔵 NITPICK: Minor improvements, style issues, portability concerns
What to Look For
- Security: Auth bypass, injection, data exposure, improper access control
- Correctness: Logic errors, off-by-one, nil/null handling, error paths
- Concurrency: Race conditions, deadlocks, missing synchronization
- Resources: Leaks, unclosed handles, missing cleanup
- Error handling: Swallowed errors, missing validation, panic paths
- Frontend (
site/src/): audit against the FE rule IDs in
Frontend Patterns and cite the rule ID
in findings (for example, "FE7: re-typed query key")
What NOT to Comment On
- Style that matches existing Coder patterns (check AGENTS.md first)
- Code that already exists unchanged
- Theoretical issues without concrete impact
- Changes unrelated to the PR's purpose
Coder-Specific Patterns
Authorization Context
// Public endpoints needing system access
dbauthz.AsSystemRestricted(ctx)
// Authenticated endpoints with user context - just use ctx
api.Database.GetResource(ctx, id)
Error Handling
// OAuth2 endpoints use RFC-compliant errors
writeOAuth2Error(ctx, rw, http.StatusBadRequest, "invalid_grant", "description")
// Regular endpoints use httpapi
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{...})
Shell Scripts
set -u only catches UNDEFINED variables, not empty strings:
unset VAR; echo ${VAR} # ERROR with set -u
VAR=""; echo ${VAR} # OK with set -u (empty is fine)
VAR="${INPUT:-}"; echo ${VAR} # OK - always defined
GitHub Actions context variables (github.*, inputs.*) are always defined.
Review Quality
- Explain impact ("causes crash when X" not "could be better")
- Make observations actionable with specific fixes
- Read the full context before commenting on a line
- Check AGENTS.md for project conventions before flagging style
Comment Standards
- Only comment when confident - If you're not 80%+ sure it's a real issue,
don't comment. Verify claims before posting.
- No speculation - Avoid "might", "could", "consider". State facts or skip.
- Verify technical claims - Check documentation or code before asserting how
something works. Don't guess at API behavior or syntax rules.
1---2name: code-review3description: Reviews code changes for bugs, security issues, and quality problems4---56# Code Review Skill78Review code changes in coder/coder and identify bugs, security issues, and9quality problems.1011## Workflow12131. **Get the code changes** - Use the method provided in the prompt, or if none14 specified:15 - For a PR: `gh pr diff <PR_NUMBER> --repo coder/coder`16 - For local changes: `git diff main` or `git diff --staged`17182. **Read full files and related code** before commenting - verify issues exist19 and consider how similar code is implemented elsewhere in the codebase20213. **Analyze for issues** - Focus on what could break production22234. **Report findings** - Use the method provided in the prompt, or summarize24 directly2526## Severity Levels2728- **🔴 CRITICAL**: Security vulnerabilities, auth bypass, data corruption,29 crashes30- **🟡 IMPORTANT**: Logic bugs, race conditions, resource leaks, unhandled31 errors32- **🔵 NITPICK**: Minor improvements, style issues, portability concerns3334## What to Look For3536- **Security**: Auth bypass, injection, data exposure, improper access control37- **Correctness**: Logic errors, off-by-one, nil/null handling, error paths38- **Concurrency**: Race conditions, deadlocks, missing synchronization39- **Resources**: Leaks, unclosed handles, missing cleanup40- **Error handling**: Swallowed errors, missing validation, panic paths41- **Frontend** (`site/src/`): audit against the FE rule IDs in42 [Frontend Patterns](../../docs/FRONTEND_PATTERNS.md) and cite the rule ID43 in findings (for example, "FE7: re-typed query key")4445## What NOT to Comment On4647- Style that matches existing Coder patterns (check AGENTS.md first)48- Code that already exists unchanged49- Theoretical issues without concrete impact50- Changes unrelated to the PR's purpose5152## Coder-Specific Patterns5354### Authorization Context5556```go57// Public endpoints needing system access58dbauthz.AsSystemRestricted(ctx)5960// Authenticated endpoints with user context - just use ctx61api.Database.GetResource(ctx, id)62```6364### Error Handling6566```go67// OAuth2 endpoints use RFC-compliant errors68writeOAuth2Error(ctx, rw, http.StatusBadRequest, "invalid_grant", "description")6970// Regular endpoints use httpapi71httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{...})72```7374### Shell Scripts7576`set -u` only catches UNDEFINED variables, not empty strings:7778```sh79unset VAR; echo ${VAR} # ERROR with set -u80VAR=""; echo ${VAR} # OK with set -u (empty is fine)81VAR="${INPUT:-}"; echo ${VAR} # OK - always defined82```8384GitHub Actions context variables (`github.*`, `inputs.*`) are always defined.8586## Review Quality8788- Explain **impact** ("causes crash when X" not "could be better")89- Make observations **actionable** with specific fixes90- Read the **full context** before commenting on a line91- Check **AGENTS.md** for project conventions before flagging style9293## Comment Standards9495- **Only comment when confident** - If you're not 80%+ sure it's a real issue,96 don't comment. Verify claims before posting.97- **No speculation** - Avoid "might", "could", "consider". State facts or skip.98- **Verify technical claims** - Check documentation or code before asserting how99 something works. Don't guess at API behavior or syntax rules.