Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review a Deno runtime pull request for correctness, tests, security, and conventions. Use when asked to review a PR or when a PR number/URL is provided for review.
.claude/skills/denoland-review-pr/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 174% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-04 | ✓→✗ | ▼ Worse | -17% | 0% |
Review PR $ARGUMENTS on the denoland/deno repository.
Fetch the PR metadata, diff, and comments:
!gh pr view $ARGUMENTS --json number,title,body,author,labels,state,reviewDecision,commits,files,isDraft,createdAt,url
!gh pr diff $ARGUMENTS
!gh pr view $ARGUMENTS --comments --json comments
!gh pr checks $ARGUMENTS --json name,state,conclusion 2>/dev/null || echo "No checks found"
Before reviewing code, check these gates. If any fail, flag them prominently at the top of your review and do not approve.
checks. Known flaky tests (labeled ci-test-flaky) can be re-run.
type(scope): description. Types: feat,fix, perf, refactor, chore, docs, test, revert, BREAKING. Scope examples: ext/node, ext/fetch, cli, lsp, runtime.
not rewrite history.
in separate PRs.
comments, suspiciously broad) but has no disclosure, ask about it.
denoland org member, the PR must link to an issue. If there is no linked issue, request changes and ask the author to open an issue and discuss the change first.
Read every changed file in the diff. Use the repo tools (Read, Grep, Glob) to understand surrounding context when needed.
.unwrap() on user-controlled data?errors.
unsafe without strong justification. No command injection,path traversal, or permission bypasses.
Watch ext/node/ especially — Node.js APIs sometimes assume full access.
deps or stdlib.
ext/node/): Does the implementation match Node.jsbehavior? Check against Node.js docs and/or source code.
(globalThis.__bootstrap.primordials) to avoid prototype pollution. Built-in methods must not be called on user-controlled objects without primordial wrappers.
WPT coverage is preferred.
reduce startup cost.
happy-path + edge-case tests.
when the behavior requires CLI-level validation.
tests/specs/ using __test__.jsonc. Use [WILDCARD] fornon-deterministic output, [UNORDERED_START]/[UNORDERED_END] for non-deterministic ordering.
conflicts.
Pay extra attention to changes in:
runtime/permissions.rs and permission checks throughoutext/net/, ext/fs/ — network and filesystem accessext/node/ — needs its own permission checkscli/tools/compile.rs — standalone binary compilationApply additional checks based on the PR type:
ext/node/): Verify behavior against Node.js docs and/orsource code, not just what "seems right". New polyfills must be registered in ext/node/polyfills/01_require.js.
the improvement. Watch for correctness regressions.
security updates.
Expectation file updates must match actual results. Suggest ci-wpt-test label if not present.
@bartlomieju review — do not approve theseyourself.
Post a review using gh pr review. Structure:
lines. Use nit: prefix for non-blocking suggestions. Suggest fixes when possible, not just "this is wrong."
here."
Prefer inline comments on specific lines where possible. Use a single review with both a summary body and inline comments:
gh api repos/denoland/deno/pulls/{number}/reviews -f event=COMMENT -f body="summary" -f comments='[{"path":"file.rs","line":42,"body":"comment"}]'Use event=APPROVE or event=REQUEST_CHANGES as appropriate instead of COMMENT.
For simple reviews without inline comments, fall back to:
gh pr review $ARGUMENTS --comment --body "review text"You do NOT have merge permissions. When a PR is ready:
@bartlomieju LGTM, needs maintainer signoff (first-time contributor)
@bartlomieju this is ready to mergediscussion.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 129,957 | 43,765 | -66% | 1 | 1 | 0% | 507 | 1,947 | +284% | 0 | 0 | — |
case-02 | fail→fail | 8,314 | 44,190 | +432% | 1 | 1 | 0% | 466 | 2,000 | +329% | 0 | 0 | — |
case-03 | fail→fail | 13,550 | 34,690 | +156% | 1 | 1 | 0% | 1,354 | 2,114 | +56% | 0 | 0 | — |
case-04 | pass→fail | 16,477 | 55,979 | +240% | 1 | 1 | 0% | 2,712 | 2,245 | -17% | 0 | 0 | — |
case-05 | pass→fail | 15,933 | 4,453 | -72% | 1 | 1 | 0% | 2,865 | 2,096 | -27% | 0 | 0 | — |
case-06 | pass→pass | 11,777 | 9,547 | -19% | 1 | 1 | 0% | 1,870 | 3,071 | +64% | 0 | 0 | — |
case-07 | pass→pass | 11,578 | 5,226 | -55% | 1 | 1 | 0% | 1,571 | 2,341 | +49% | 0 | 0 | — |
case-08 | pass→pass | 28,169 | 13,930 | -51% | 1 | 1 | 0% | 1,058 | 2,366 | +124% | 0 | 0 | — |
case-09 | fail→pass | 14,292 | 5,706 | -60% | 1 | 1 | 0% | 2,057 | 2,382 | +16% | 0 | 0 | — |
case-10 | pass→pass | 12,177 | 2,633 | -78% | 1 | 1 | 0% | 1,776 | 2,019 | +14% | 0 | 0 | — |
case-11 | pass→pass | 11,322 | 6,530 | -42% | 1 | 1 | 0% | 1,729 | 2,564 | +48% | 0 | 0 | — |
case-12 | pass→fail | 16,398 | 9,840 | -40% | 1 | 1 | 0% | 2,649 | 3,090 | +17% | 0 | 0 | — |
case-13 | pass→pass | 9,060 | 6,287 | -31% | 1 | 1 | 0% | 1,448 | 2,694 | +86% | 0 | 0 | — |
case-14 | fail→pass | 11,395 | 3,631 | -68% | 1 | 1 | 0% | 1,629 | 2,209 | +36% | 0 | 0 | — |
case-15 | pass→fail | 7,741 | 2,717 | -65% | 1 | 1 | 0% | 846 | 1,953 | +131% | 0 | 0 | — |
case-16 | fail→pass | 5,247 | 2,241 | -57% | 1 | 1 | 0% | 697 | 1,908 | +174% | 0 | 0 | — |
case-17 | fail→pass | 8,461 | 2,436 | -71% | 1 | 1 | 0% | 1,084 | 1,976 | +82% | 0 | 0 | — |
case-18 | pass→pass | 14,160 | 5,628 | -60% | 1 | 1 | 0% | 2,029 | 2,489 | +23% | 0 | 0 | — |
case-19 | fail→fail | 130,202 | 9,022 | -93% | 1 | 1 | 0% | 1,556 | 3,226 | +107% | 0 | 0 | — |
case-20 | pass→pass | 8,106 | 12,791 | +58% | 1 | 1 | 0% | 1,009 | 2,592 | +157% | 0 | 0 | — |
case-21 | pass→pass | 8,242 | 5,940 | -28% | 1 | 1 | 0% | 1,263 | 2,396 | +90% | 0 | 0 | — |
case-22 | pass→pass | 10,302 | 3,961 | -62% | 1 | 1 | 0% | 1,865 | 2,227 | +19% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of 0 percentage points is the difference between those two pass rates over the 18 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.