n8n:human-like-code-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited n8n:human-like-code-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Review a GitHub pull request with a code-review mindset and produce a copy/paste-friendly markdown file of feedback. Context is the foundation: understand the problem, intended solution, and surrounding architecture before judging the diff. Findings are the primary focus: prioritize architecture, over-complexity, bugs, regressions, security edge cases, and missing tests. Do not make code changes unless the user explicitly asks for them.
The user must provide a GitHub pull request URL (e.g. https://github.com/n8n-io/n8n/pull/1234).
If not provided, ask for it before proceeding.
Extract the PR number and repository from the URL and use the gh CLI to fetch the PR diff and metadata.
gh pr diff <number> --repo <owner>/<repo>gh pr view <number> --repo <owner>/<repo>gh api repos/<owner>/<repo>/pulls/<number>/commentsn8n:linear-issue before reviewing the diff. Use the ticket description, comments, linked GitHub issues/PRs, media, related issues, affected node popularity, and effort estimate as review context. If the skill is not available, fetch the same Linear context through the active Linear MCP or ask the user to provide the ticket details before continuing.
expected, which packages or systems are affected, and what constraints come from the PR description, Linear ticket, linked issues, specs, or existing code.
.md file named review-<repo>-<number>.md inside the repo's gitignored tmp/ folder, so it is never committed (the tmp folder is listed in .gitignore). Create the folder if needed (mkdir -p tmp) and write to tmp/review-<repo>-<number>.md. Print the path to the file when done so the user can open it.file that should remain in tmp/ from this skill run is the final tmp/review-<repo>-<number>.md review file.
Prefer reading gh output directly instead of writing extra files. If you need scratch files for a complex review (for example, a saved diff or extracted file contents), remove them before you finish. Do not leave tmp/pr-*.diff, extracted source files, or empty temporary files behind.
Do not start from the changed lines alone. First understand the problem being solved, the exact behavior promised by the PR/ticket/spec, which architectural layer should own it, which existing patterns or helpers it should fit, and the important edge cases: security, permissions, malformed input, compatibility, persistence, concurrency, and rollback behavior.
If the context is missing or contradictory, say so in ## General and review the diff with that uncertainty explicit instead of inventing requirements.
Findings must be the primary focus, ordered by severity (most severe first):
Style, naming, and minor nits come last, and only if they genuinely matter.
For non-trivial changes, compare nearby implementations and shared utilities. Ask whether the behavior belongs in the node, controller, service, repository, frontend store, shared API type, or existing workflow utility. If 100 lines could reasonably be 10, explain the simpler shape and why it is safer or easier to maintain. Do not flag complexity just because the diff is large; flag it when the extra code creates risk, duplicate behavior, or avoidable maintenance cost.
Especially when nodes are changed, check that the change does not break backward compatibility for existing users' workflows (renamed/removed parameters, changed defaults, altered output shape, different behavior for the same input).
If there's a risk of broken backward compatibility, consider node versioning and leave this inside the comments - point out the risk and suggest a new node version (or a versioned default) rather than changing existing behavior in place.
Use this checklist while reviewing. Do not force comments for every category, but make sure the diff has been checked against these common failure modes.
setInterval, setTimeout) that are never cleareddispose()/destroy().write() return value ignored (missing drain await), .pipe() used instead of pipeline(), missing AbortSignal for teardown, objectMode streams with untuned highWaterMark, Transform streams without asymmetric buffer limits.null / undefined inputs - are they guarded or documented as preconditions?[] and {}?default in switch statements over union types@ProjectScope or @GlobalScopecli or n8n-specific concepts should not leak into generic SDK packages| Severity | Meaning |
|---|---|
| Critical | Data loss, crash, security hole, or resource leak that will occur in production |
| High | Likely to cause bugs or silent failures under realistic inputs |
| Medium | Reduces robustness or will cause problems as the code grows |
| Low | Style, readability, or minor improvement |
| Priority | Meaning |
|---|---|
| P1 | Must fix before merge |
| P2 | Should fix in this PR or as immediate follow-up |
| P3 | Nice to have, can be filed as a task |
The markdown file must contain:
## Hints for a reviewer section (see below).## General section (see below).## Comments section with a list of review comments in this format:file name + line number + comment
## Issue Summary section at the end of the review (omitcategories with no issues).
Comments should be easy to copy/paste. Do not quote comments using > - just write them directly.
It's totally okay to have no line comments. Do not force findings or point out minor things just to have something to say. In those cases, prefer an empty comments list and a short positive ## General comment.
When a comment suggests something different, be precise about it. Either propose the actual code change (a short snippet or suggestion block the author can apply directly) or, if a full snippet isn't practical, state the concrete direction (which function/value/approach to use) rather than a vague hint. Avoid comments like "this could be cleaner" with no actionable next step.
After the prose review, always end with a plain-text ## Issue Summary section. If there are no issues in a category, skip that category rather than adding empty headings.
Use this format:
## Issue Summary
1. Critical / P1 / Memory leak
Location: `path/to/file.ts:42`
`setInterval` in constructor is never cleared.
2. High / P2 / Edge case
Location: `path/to/service.ts:100`
No guard for empty array - crashes on `arr[0].id`.
3. Medium / P3 / Method size
Location: `path/to/handler.ts:buildFoo()`
80-line method mixes validation, mapping and I/O; suggest splitting into three helpers.Right after the header, include a ## Hints for a reviewer section to orient the human reviewer before they read the diff:
authorAssociation or a fork-prefixed branch like random-fork-owner:fix-node-option.
Keep it to a couple of sentences. It's about saving the reviewer time, not a detailed write-up.
Before the line-by-line comments, include a ## General section that can be pasted as the review summary. Make it sound human and natural - it is okay to start with something short and friendly like "Hey, nice job on this" when the change deserves it. Then add any top-level, PR-wide feedback that doesn't belong on a single line - e.g. design or architecture concerns, an implicit/type-unsafe contract between files, repeated patterns, scope, or missing test coverage of the actual change.
summary and move on - do not pad it.
Line numbers MUST be the actual line numbers in the file on the PR branch (the new/right side of the diff), NOT the position within the diff hunk.
To get the correct line number: look at the @@ hunk header (e.g. @@ -19,10 +19,9 @@). The +19 means the new file starts at line 19. Count down from there for each line that is a context line ( ) or an added line (+). Skip removed lines (-) - they don't exist in the new file.
Example: if a hunk says @@ -10,5 +10,6 @@ and you want to comment on the 3rd non-removed line in that hunk, the line number is 10 + 2 = 12.
Never guess line numbers. Always compute them from the hunk headers.
Before suggesting a change to a pattern (naming, structure, style), check whether the same pattern is used elsewhere in the codebase or in similar nodes/files. If it is an established convention, do NOT flag it. Only comment if something genuinely deviates from existing patterns.
- instead.Write review comments naturally, like a friendly human reviewer.
Feel free to use phrases like:
You can also insert an emoji from time to time 🙂
Keep comments friendly, short, and collaborative. Avoid judgmental wording like "you made a mistake" or anything overly critical.
Do not make code changes unless the user explicitly asks for them. This skill produces a review, not a patch.
The very last sentence of your reply must be a clickable Markdown link to the review file, so the user can open it from the agent chat immediately. Use this format: [tmp/review-<repo>-<number>.md](tmp/review-<repo>-<number>.md). Nothing should come after the link.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.