Aidd Review
paralleldrive/aidd
Conduct a thorough code review focusing on code quality, best practices, security, test coverage, and adherence to project standards and functional requirements.
A skill your agent uses when reviewing a pull request, a branch, or uncommitted working changes in the XYZ/MAPP repository — whether the user asks to "review this PR", "check my changes before I…
$ npx skills add GEOLYTIX/xyz --skill review-pr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install GEOLYTIX/xyz review-pr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/GEOLYTIX/xyz.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/review-pr .claude/skills/review-pr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "review-pr" agent skill from https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-pr into .claude/skills/review-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "review-pr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-prType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add GEOLYTIX/xyz --skill review-pr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install GEOLYTIX/xyz review-pr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GEOLYTIX/xyz.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/review-pr .agents/skills/review-pr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "review-pr" agent skill from https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-pr into .agents/skills/review-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "review-pr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GEOLYTIX/xyz --skill review-pr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install GEOLYTIX/xyz review-pr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GEOLYTIX/xyz.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/review-pr .cursor/skills/review-pr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "review-pr" agent skill from https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-pr into .cursor/skills/review-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "review-pr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/GEOLYTIX/xyz.git --path .claude/skills/review-pr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add GEOLYTIX/xyz --skill review-pr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install GEOLYTIX/xyz review-pr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GEOLYTIX/xyz.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/review-pr .gemini/skills/review-pr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "review-pr" agent skill from https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-pr into .gemini/skills/review-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "review-pr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install GEOLYTIX/xyz review-prInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add GEOLYTIX/xyz --skill review-pr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/GEOLYTIX/xyz.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/review-pr .github/skills/review-pr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "review-pr" agent skill from https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-pr into .github/skills/review-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "review-pr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GEOLYTIX/xyz --skill review-pr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install GEOLYTIX/xyz review-pr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GEOLYTIX/xyz.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/review-pr .opencode/skills/review-pr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "review-pr" agent skill from https://github.com/GEOLYTIX/xyz/tree/main/.claude/skills/review-pr into .opencode/skills/review-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "review-pr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
review-prA skill your agent uses when reviewing a pull request, a branch, or uncommitted working changes in the XYZ/MAPP repository — whether the user asks to "review this PR", "check my changes before I…
Review PR is an agent skill from GEOLYTIX/xyz. Use when reviewing a pull request, a branch, or uncommitted working changes in the XYZ/MAPP repository — whether the user asks to "review this PR", "check my changes before I push", "look at PR 1234", or asks whether a change is ready to merge. Produces a terminal report covering whole-method correctness, listener and callback registration, scope creep across modules, test coverage for touched modules, and JSDoc conformance.
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Pull requests, Technical documentation and Test coverage. It works with JavaScript and Node.js. The repository describes itself as: An open source javascript framework for spatial data and application interfaces. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6d3dacc. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghpnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh and pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Review PR loads about 4.1k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 2,473 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from GEOLYTIX/xyz at commit 6d3dacc, republished under its MIT licence (© GEOLYTIX). 2,473 words, ~4,078 tokens.
.claude/skills/review-pr/SKILL.md (or your agent's skills folder).Review a change to XYZ/MAPP and report what a careful maintainer would raise. Write the report to the terminal; do not post it to GitHub and do not edit the code under review unless the user asks for fixes afterwards.
Two people use this review. A contributor runs it on their own working changes before pushing, so findings need to be specific enough to act on without further digging. A maintainer runs it while reading someone else's pull request, so the report needs to be readable top to bottom without the repository open alongside it. Write for both: name the file and line for every finding, and say what is wrong rather than only which rule was broken.
gh pr view <n> --repo GEOLYTIX/xyz for the description and linked issues and gh pr diff <n> --repo GEOLYTIX/xyz for the change. Pass --repo explicitly: a fork clone will otherwise resolve to the fork, where the pull request does not exist. No argument means review the working branch, diffed against the branch it targets rather than against main — XYZ maintains major, minor and patch release branches alongside main, and diffing a patch-based branch against main buries the change in unrelated commits. Take the base from gh pr view --json baseRefName when there is a pull request, or from the branch's upstream, and confirm with the user when neither is clear. Add git status for anything uncommitted. Ask which is meant only if the request is genuinely ambiguous — a dirty working tree on a feature branch usually means the uncommitted work is the subject.ENG-295 instead, which you cannot read — when there is no readable linked issue, say so in the report and fall back to the pull request description, and treat the scope check as a judgement rather than a comparison.gh pr view <n> --comments and a search for the number will both surface this.apps/mapp/lib/** is the browser library, where the listener and registration check earns its keep. apps/xyz/** is the Node API, where the Vitest coverage check does. A purely server-side change has no listeners to examine, and saying so in one line is the right outcome — not silence, and not a manufactured finding.router.js and a change to the handler in verify.js are each defensible alone and wrong together. Keep the reading of the diff in the main thread so the report is written with the whole change in view, and have any subagent return findings rather than file contents.Read each changed function in its entirety in its post-change state, not just the lines the diff shows. For working changes that is the file on disk. For a pull request you have not checked out, fetch its head first — git fetch upstream pull/<n>/head for an open pull request, or git fetch upstream when it is already merged — and then read with git show FETCH_HEAD:<path> or git show <merge-sha>:<path>. Reading this way rather than checking the branch out leaves whatever the user has in progress untouched, which matters because they may be reviewing someone else's pull request from inside their own unfinished work.
Then find the callers. Searching the bare function name is not enough in MAPP, where modules collect their functions into a methods object and export that as the default, so callers reach a private function through the module name instead — layerStyle.panel(entry), not panel(entry). Search for the exported path as well as the bare name, or you will conclude a function has one caller when it has three.
A diff hunk cannot tell you whether the change is right, only what moved. Reading the whole method and its callers is what surfaces the things reviewers actually miss:
undefined where callers expect an object.When a change touches a route in apps/xyz/router.js, compare the middleware the route carried before against what it carries now. Express routes in XYZ get their request handling from the registration they match, so widening or narrowing a path can silently move a request onto a registration with a different middleware chain — the handler is untouched and still passes its tests, while a parameter it depends on quietly stops being populated. Read both registrations, not just the changed line, and name any middleware the request no longer passes through.
When the change fixes a regression, find the commit that introduced it with git log -L <start>,<end>:<path>. This reframes a review more often than any other single step: it shows whether the change restores the original behaviour or layers a second mechanism on top of the one that broke, which is the difference between a fix and a workaround that leaves the fault in place.
Report on the method as it now stands. Whether the original issue is fixed is necessary but not sufficient — a change that resolves the issue and breaks a sibling path is not ready.
A pre-existing bug you find inside a method the change touches is worth reporting as a [Note], labelled as pre-existing, with a suggestion to open its own issue. It is real, and the reviewer is the person best placed to see it — but holding a pull request for a fault it did not introduce is how good changes stall.
MAPP builds its interfaces by registering callbacks, and those registrations outlive the code that made them. The failure is rarely a crash; it is the same handler firing two or three times because nothing removed the previous one.
For each touched registration, ask whether calling the surrounding function twice leaves one registration or two:
addEventListener without a matching removeEventListener, an AbortController signal, or { once: true }, on a target that outlives the call — window, document, the mapview, or a layer.layer.showCallbacks, mapview.interactions, or a layer.style entry. These are the easiest to miss because they read as ordinary assignment rather than as subscription.Issue #2955 is the shape to look for: a legend method appended to layer.showCallbacks[] each time the theme changed, never removed, so every theme switch added another legend. Nothing errored. The symptom was duplicated behaviour, and only reading the registration alongside its teardown revealed it.
Where a registration is deliberately permanent, say so in the report rather than flagging it — a listener bound once at initialisation on a target that lives for the session is not a leak.
CONTRIBUTING.md asks that a pull request address a single issue, so that each can be reviewed on its own merits. Compare the touched modules against what the linked issue describes.
Flag a module that the issue does not explain. Renaming a variable in a file the fix merely passes through, reformatting an untouched block, or fixing a second unrelated bug all make the change harder to review and harder to revert. Say which modules are justified by the issue and which are not, and suggest the unrelated ones move to their own pull request.
Be careful to distinguish scope creep from a fix that genuinely needs breadth. A change to a shared utility legitimately touches every caller, and a rename the issue asks for legitimately spans files. The question is whether the issue accounts for the spread, not whether the number of files is large.
XYZ has two test systems and the distinction decides what to ask for. Read vitest.config.mjs and the relevant package.json rather than relying on TESTING.md for paths — the documented config has drifted from the real one before.
apps/xyz/mod/**, plus its utils and plugins. Covered by Vitest under apps/xyz/tests/**. Run pnpm test:xyz:coverage and read the per-file table for the touched files.apps/mapp/lib/**. Outside the Vitest run entirely, so it never appears in that coverage table and its absence there means nothing. The browser suite TESTING.md describes runs from a built bundle at public/js/tests/, and its source is not in this repository, so there is no per-file coverage figure to quote for a MAPP module. Say that plainly rather than reporting a coverage gap that is an artefact of which suite exists.Then judge the change:
>>> FULL TURBO with no test counts. Reporting a pass from a cached artefact is the worst outcome available to this check, because it reads exactly like a real pass. If you see that marker, re-run with --force and report the counts from the run that actually executed.Check touched functions and modules against DOCUMENTATION.md:
@requires for linked modules.@function, are marked @async where they are, and carry an @description. Functions should not be anonymous.@param lists only actual function arguments. @property documents the properties the method genuinely reads, with optional ones in square brackets.@returns states when a promise is returned and when it may reject, in the form @returns {Promise<Object|Error>}.@typedef, with nested typedefs named by the dash convention — the style object of layer is layer-style, and its theme is layer-style-theme.@deprecated and warn when called.Flag a new exported function with no JSDoc, and a changed signature whose @param list no longer matches. A missing @description on an otherwise documented function is worth a note rather than a blocking finding.
Write to the terminal in Markdown, using this shape:
# Review: <PR title and number, or branch name>
<Two or three sentences: what the change does, whether it resolves the linked
issue, and the single most important thing the reader should know.>
## Findings
### [Blocking] <short title>
`apps/mapp/lib/<path>.mjs:142`
What is wrong, why it matters, and what would resolve it.
### [Consider] <short title>
`apps/xyz/mod/<path>.js:88`
...
### [Note] <short title>
...
## Checks
| Check | Result |
|---|---|
| Touched methods read in full | <n> methods across <n> files |
| Listeners and registration | <findings, "no registrations touched", or "not applicable — no MAPP code"> |
| Scope | <modules justified against the issue, or "no readable issue — judged against the description"> |
| Tests and coverage | <suite result, whether it ran or replayed from cache, coverage on touched files> |
| Documentation | <conformance summary> |Keep every row even when a check did not apply, and say which of the three it was: examined and clean, not applicable to this change, or not completed and why. A reader scanning the table needs to tell those apart, and a missing row reads as an oversight.
Order findings by severity, most serious first. Use [Blocking] for a correctness bug, a failing suite, or a leaked registration; [Consider] for something a maintainer would likely ask for but could merge without; [Note] for an observation worth recording. A clean review still gets the Checks table — knowing what was examined is most of the value when nothing is wrong.
Say plainly when a check could not be completed, for example when the suite could not run or the linked issue was not available, rather than reporting that check as passed. A review that quietly skips a check is worse than one that reports the gap, because the reader cannot tell the difference between examined and overlooked.
Keep findings concrete. "This listener is never removed, so switching the theme twice renders two legends" tells the reader what to do; "improve event handling" does not.
Report what you found, not what would make the review look thorough. A small, correct change deserves a short report and an empty Findings section, and padding it with style preferences or speculative concerns trains the reader to skim — which costs you the one finding that mattered. If you suspect something but could not confirm it, say what you checked and what remains unknown rather than either dropping it or asserting it.
© GEOLYTIX, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/review-pr of GEOLYTIX/xyz.
Open the folder on GitHubat commit 6d3dacc
Review PR next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Review PR this skillGEOLYTIX/xyz | 133 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Aidd Reviewparalleldrive/aidd | 384 | — | ~945 | Automated safety check: Pass | MIT | |
| Test Revieweraxelixlabs/axelix | 148 | — | ~3.2k | Automated safety check: Pass | LGPL-3.0 | |
| Generate Release Notesteambit/bit | 18k | — | ~2.2k | Automated safety check: Pass | Custom licence | |
| Review Implement Phaseprisma/orm | 48k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Pretty Mermaid Rendererimxv/Pretty-mermaid-skills | 1.5k | — | ~2k | Automated safety check: Pass | MIT |
paralleldrive/aidd
Conduct a thorough code review focusing on code quality, best practices, security, test coverage, and adherence to project standards and functional requirements.
axelixlabs/axelix
Reviews test code in GitHub pull requests for isolation, public-API contract coverage, AAA structure, and correct exception assertions.
teambit/bit
Generate comprehensive release notes for Bit from git commits and pull requests.
prisma/orm
Implements triaged pull request review actions, commits focused fixes, posts status replies on GitHub and resolves the threads.
imxv/Pretty-mermaid-skills
Writes and renders Mermaid diagrams as themed SVG, PNG or terminal ASCII and Unicode art with a bundled Node.js CLI that needs no browser.
remix-run/react-router
Takes a blocked community pull request in React Router and adds the missing tests, change file or docs so it can merge, working on the contributor's branch.
GEOLYTIX/xyz
A skill your agent uses when drafting, generating, revising, or reviewing GitHub release notes, changelogs, or a "What's Changed" section for an XYZ release.
Works with
Categories
A skill your agent uses when reviewing a pull request, a branch, or uncommitted working changes in the XYZ/MAPP repository — whether the user asks to "review this PR", "check my changes before I…. Review PR is an agent skill from GEOLYTIX/xyz. Use when reviewing a pull request, a branch, or uncommitted working changes in the XYZ/MAPP repository — whether the user asks to "review this PR", "check my changes before I push", "look at PR 1234", or asks whether a change is ready to merge.
Review PR fits situations like: reviewing a pull request; uncommitted working changes in the XYZ/MAPP repository — whether the user asks to review this PR; check my changes before I push; look at PR 1234.
Run `npx skills add GEOLYTIX/xyz --skill review-pr -a claude-code`. Or copy the skill folder (.claude/skills/review-pr in GEOLYTIX/xyz) into .claude/skills/review-pr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add GEOLYTIX/xyz --skill review-pr -a codex`. Or copy the skill folder (.claude/skills/review-pr in GEOLYTIX/xyz) into .agents/skills/review-pr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GEOLYTIX/xyz --skill review-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/review-pr, .gemini/skills/review-pr, .github/skills/review-pr and .opencode/skills/review-pr in your project.
Going by SKILL.md and its folder, Review PR needs the command-line tools its instructions call (git, gh and pnpm).
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Review PR is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Review PR: Aidd Review (paralleldrive/aidd, 384 stars), Test Reviewer (axelixlabs/axelix, 148 stars), Generate Release Notes (teambit/bit, 18k stars) and Review Implement Phase (prisma/orm, 48k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
GEOLYTIX (a GitHub organization) maintains it in GEOLYTIX/xyz, which has 133 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 8, 2026.
Source: GEOLYTIX/xyz on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.