Reviews Workers and Cloudflare Developer Platform code for type correctness, API usage, and configuration validity. Load when reviewing TypeScript/JavaScript using Workers APIs, wrangler.jsonc/toml config, or Cloudflare bindings (KV, R2, D1, Durable Objects, Queues, Vectorize, AI, Hyperdrive).
90
88%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Your knowledge of Cloudflare Workers APIs, types, and wrangler configuration may be outdated. Prefer retrieval over pre-training for any Workers code review task.
Use the repo's local copies — do not run npm pack or install packages to fetch types.
| Source | Where to find it | Use for |
|---|---|---|
| Wrangler config schema | node_modules/wrangler/config-schema.json | Config fields, binding shapes, allowed values |
| Workers types | node_modules/@cloudflare/workers-types/index.d.ts | API usage, handler signatures, binding types |
| Cloudflare docs search | Use the cloudflare-docs search tool or read files in this repo | API reference, compatibility dates/flags, binding docs |
Read these files directly when you need to verify a type, config field, or API signature. The reference guides in references/ describe what to validate — not how to fetch packages.
Read full files, not just diffs or isolated snippets. Code that looks wrong in isolation may be correct given surrounding logic.
git log --oneline -5 -- <file>Every code block falls into one of three categories. Review in the context of its category.
| Category | Definition | Expectations |
|---|---|---|
| Illustrative | Demonstrates a concept; uses comments for most logic | Correct API names, realistic signatures |
| Demonstrative | Functional but incomplete; would work if placed in the right context | Syntactically valid, correct APIs and binding access |
| Executable | Standalone and complete; runs without modification | Compiles, runs, includes imports and config |
Run type-checking and linting. Tool output is evidence, not opinion.
npx tsc --noEmit # TypeScript errors
npx eslint <files> # Lint issuesFor config files, validate against the latest wrangler config schema (see references/wrangler-config.md for retrieval) and check that all fields, binding types, and values conform.
See references/workers-types.md for type system rules, references/wrangler-config.md for config validation, and references/common-patterns.md for correct API patterns.
Quick-reference rules:
| Rule | Detail |
|---|---|
| Binding access | env.X in module export handlers; this.env.X in classes extending platform base classes. See references/common-patterns.md. |
No any | Never use any for binding types, handler params, or API responses. Use proper generics. |
| No type-system cheats | Flag as unknown as T, unjustified @ts-ignore, unsafe assertions. See references/workers-types.md. |
| Config-code consistency | Binding names in wrangler config must match env.X usage in code. See references/wrangler-config.md. |
| Required config fields | Verify against the wrangler config schema — do not assume which fields are required. |
| Concise examples | Examples should focus on core logic. Minimize boilerplate that distracts from what the code teaches. |
| Floating promises | Every Promise must be awaited, returned, voided, or passed to ctx.waitUntil(). See references/common-patterns.md. |
| Serialization | Data crossing Queue, Workflow step, or DO storage boundaries must be structured-clone serializable. See references/common-patterns.md. |
| Streaming | Large/unknown payloads must stream, not buffer. Flag await response.text() on unbounded data. |
| Error handling | Minimal but present — null checks on nullable returns, basic fetch error handling. Do not distract with verbose try/catch. |
| Risk | Triggers |
|---|---|
| HIGH | Auth, crypto, external calls, value transfer, validation removal, access control, binding misconfiguration |
| MEDIUM | Business logic, state changes, new public APIs, error handling, config changes |
| LOW | Comments, logging, formatting, minor style |
Focus deeper analysis on HIGH risk. For critical paths, check blast radius: how many other files reference this code?
Security logic escalation: for crypto, auth, and timing-sensitive code, do not stop at verifying API calls are correct. Examine the surrounding logic for flaws that undermine the security property (e.g., correct timingSafeEqual call but early return on length mismatch). See references/common-patterns.md Security section.
| Anti-pattern | Why it matters |
|---|---|
any on Env or handler params | Defeats type safety for every binding access downstream |
as unknown as T double-cast | Hides real type incompatibilities — fix the underlying design |
@ts-ignore / @ts-expect-error without explanation | Masks errors silently; require a comment justifying each suppression |
Buffering unbounded data (await res.text(), await res.json() on streams) | Memory exhaustion on large payloads; use streaming |
| Hardcoded secrets or API keys | Use env bindings and wrangler secret |
blockConcurrencyWhile on every request | Only for initialization; blocks all concurrent requests |
| Single global Durable Object | Creates a bottleneck; shard by coordination atom |
| In-memory-only state in DOs | Lost on eviction; persist to SQLite storage |
| Missing DO migrations in config | New DO classes require migration entries or deployment fails |
Floating promises (step.do(), fetch() without await) | Silent bugs — drops results, breaks Workflow durability, ignores errors |
Non-serializable values across boundaries (Response, Error in step/queue) | Compiles but fails at runtime; extract plain data before crossing boundary |
implements instead of extends on platform base classes | Legacy pattern — loses this.ctx, this.env access from base class |
**[SEVERITY]** Brief description
`file.ts:42` — explanation with evidence (tool output, type error, config mismatch)
Suggested fix: `code` (if applicable)Severity: CRITICAL (security, data loss, crash) | HIGH (type error, wrong API, broken config) | MEDIUM (missing validation, edge case, outdated pattern) | LOW (style, minor improvement)
End with a summary count by severity. If no issues found, say so directly.
9a170b9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.