dark-alex-17/coyote/code-review
Claude Code and agent skill by dark-alex-17/coyote
- community
Checking that the SKILL.md file is still in the repository.
Conduct a thorough code review focused on correctness, clarity, tests, and footguns. Grants read-only filesystem access for inspecting code.
Install
npx vskill@latest install dark-alex-17/coyote/code-reviewSKILL.md
You are reviewing code. Use the filesystem tools (fs_read, fs_grep, fs_glob, fs_cat, fs_ls) to inspect files. Apply this checklist in order; stop at the first category where you find substantial issues, since fixing those usually shifts the rest of the review.
Investigation workflow
Before reviewing, build a mental model of the surrounding code:
fs_lsthe directories that contain the changed files.fs_grepfor the symbols being added/modified to see existing callers and tests.fs_readneighboring files in the same module to understand local conventions.fs_globfor test files that might cover this area.
A review without context is just a syntax check.
Reviewing a diff
When you only see a hunk (not the whole file), the default context is sparse — usually 3 lines on either side. You see what changed but rarely the function signature, the caller, or the test. Read deliberately to recover what the diff omits.
Read around the hunk
The @@ -120,8 +120,12 @@ header gives you the line numbers in the old (-) and new (+) file. Read 20–40 lines around the hunk to see the enclosing function:
You're recovering: the function signature, the return type, what unchanged portions do, and whether the hunk's logic fits its enclosing scope.
Blast radius: verify every caller (MANDATORY)
A locally-correct change that alters a symbol's CONTRACT breaks callers you can't see in the diff. For every changed exported/public symbol, grep for its callers and verify each one still holds:
Contract changes that ripple (check the callers against each one that applies):
- Return type / error type changed — do callers match on variants that no longer exist, or miss new ones?
- Nullability / optionality — a value that could never be null/None now can be (or vice versa).
- Defaults changed — callers relying on the old default silently change behavior.
- Units / encoding / format — seconds→millis, bytes→string, naive→UTC datetimes.
- Ordering / uniqueness guarantees — output was sorted/deduped, now isn't (or vice versa).
- Error semantics — a function that returned an error now panics/throws, or swallows what it used to propagate.
- Sync→async / blocking behavior — callers on hot paths or in handlers now block or need awaiting.
- Acceptance condition tightened or loosened — an input, header, token, or precondition that
used to be accepted is now rejected (or vice versa). Every caller that relied on the old acceptance is a breaking change in disguise.
This check is MANDATORY and produces output even when clean: state Blast radius: N call sites checked, all compatible in your findings, or one finding per incompatible/unverifiable caller (caller at path:line still assumes <old contract>). Greps are cheap — the file-read budget does not apply to fs_grep/fs_glob; spend greps freely here and targeted reads only on suspicious callers.
Cross-repo consumers. When the changed symbol is consumed outside this repo — an RPC or route, a published module or client library, a CLI flag, a message/event schema, a proto or OpenAPI contract — the caller sweep does not stop at the repo boundary. Enumerate the external consumers you can reach (sibling checkouts, an org-wide code search, the generated-client repos) and classify each as SAFE / BREAKS / UNTRACED at repo:path:line. When the author names a consumer-side mitigation ("the frontend already sends X", "clients opt in via Y"), READ the consumer code and confirm the mitigation actually does what is claimed — a mitigation that is a no-op in the consumer is the finding, at the severity of the breakage it was supposed to prevent. The clean line extends to cross-repo: N consumers checked; when the consumer set is unenumerable (a public library), say so and state what you checked instead (semver bump, changelog entry, deprecation window). An UNTRACED list is a 🟡 finding on its own.
Skip the test files in this search; do the test sweep next.
Guard symmetry across sibling paths (MANDATORY when a guard changes)
When the diff ADDS, STRENGTHENS, or FIXES a guard/check/validation in one code path, the same flaw usually lives in that path's parallel twins — sibling strategies implementing the same interface, other enqueue/call sites of the same job, the script's sibling scripts, the other branch of the same switch. Enumerate the twins (fs_grep for the shared interface, the job kind, the naming pattern) and verify each one either has the equivalent guard or provably doesn't need it. A twin missing the guard is a finding at the twin's path:line — same severity as the bug the guard fixes. Report even when clean: Guard symmetry: N sibling paths checked. (Guards REMOVED are the removed-guards check below — this is about the ones added: a fix applied to one of N twins is N-1 latent bugs.)
When the fix lands in a SHARED helper (an authorization gate, a validator, a parser used by many handlers) — or in one of that helper's N callers — every other caller of the helper is a twin. Enumerate them all. A caller left on the old behaviour is IN SCOPE for this review, never Pre-existing, out of scope: — the diff has just proven the shared path is wrong, so every unpatched caller is a known-live instance of the bug, not a pre-existing nit. Report each at the fixed bug's severity; downgrade one tier only when the author links a tracked follow-up that names that specific caller. "Not touched by this PR" is not an exemption.
Read the tests for the change
Even if the diff doesn't touch test files, check whether tests exist for what's changing:
Absence of tests for a changed function is itself a finding ("changes function X but no test references it; regressions won't be caught").
Diff-shaped issues to watch for
These are review findings that only surface in a diff context, not in a whole-file read:
Contract and test fallout
- Renames (
diff --git a/old.rs b/new.rs) —fs_grepfor the old path to find imports that need updating but weren't. - Signature changes — verify all callers compile against the new signature. Compiler-checked languages catch some of this; dynamic languages don't.
- New code path without new tests — usually a missing test. Flag it.
- Removed code with tests still present — the tests probably need updating too.
Removed and absent code
- Removed guards, checks, and validations — for EVERY removed guard/branch/validation/limit, name where that responsibility now lives ("moved to X at path:line") or flag it as a regression risk. Deleted code had a reason; "nothing now does what the deleted code did" is a 🟡 finding by default, and 🔴 when the guard protected money, auth, or data integrity. Reviews fixate on added lines — the removed lines are where incidents come from.
- The "dog that didn't bark" — what's obvious by its ABSENCE? A new field with no migration, a new error path with no test, a public API change with no changelog, a new config option with no documentation. Flag these as missing pieces, not as things to add later.
Introduced artifacts
- Minted but unused / partial adoption — every artifact the diff INTRODUCES (variable, flag,
helper, image, config key) must be consumed somewhere; fs_grep for each one. Zero uses = a finding (dead weight or a forgotten wiring step). Used in SOME applicable in-diff sites but not others = a finding naming the sites that didn't adopt it — half-adopted artifacts are how two mechanisms for the same job end up coexisting forever.
- Version-literal consistency and freshness — when the diff bumps a version (image tag,
tool version, dependency pin), fs_grep the repo for other occurrences of the OLD version string (compose files, workflows, docs, sibling Dockerfiles) — stragglers are findings. For NEWLY-pinned versions, check the upstream latest when network tools allow it and flag pins that start life stale; skip silently offline.
Data access and write sequences
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingassets/skills/code-review/SKILL.md
Popularity
- Repository stars
- 57
- Repository forks
- 2
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/dark-alex-17/coyote/code-review)