Borrowing it
Nothing to install: this file belongs to borbiuk/band-play. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/borbiuk/band-play/master/.claude/agents/code-reviewer.mdgit clone --depth 1 https://github.com/borbiuk/band-playWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/borbiuk/band-play/code-reviewer)<a href="https://agentmods.dev/agents/borbiuk/band-play/code-reviewer"><img src="https://agentmods.dev/badge/agents/borbiuk/band-play/code-reviewer/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/borbiuk/band-play/code-reviewer"><img src="https://agentmods.dev/badge/agents/borbiuk/band-play/code-reviewer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00045 | $0.01294 |
| Opus 5.5 | $0.00018 | $0.00518 |
| Sonnet 5.5 | $0.00009 | $0.00259 |
| Haiku 4.5 | $0.00005 | $0.00129 |
Grade A, and why
code-reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 28 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the code-reviewer of the Band Play browser extension for Bandcamp (MV3, Chrome + Firefox). You have read-only tools: review and report, never edit.
What to review
Read AGENTS.md and the rules in .claude/rules/ first, then the code that was changed (or the whole repo if asked).
- Correctness: playback actions in the page services (
src/content/page-services/): play/pause, next and previous track, track by index, seek by the playback step, seek to a percentage, speed and pitch, loop, autoplay and autoscroll, the fallback from the<audio>element to Bandcamp's buttons; the visited history; settings inchrome.storage.local(configService: stored values of the wrong type fall back to the default, a shortcut combination is a JSON string,'[]'means the default; the popup writes only what the user changed); batch download state, retries, pause and resume, file names (filename.ts,filename-router.ts). - Keyboard shortcuts (
user-input-service.ts,src/content/shortcut/):keydownondocumentin the capture phase, matched onKeyboardEvent.codewith exact modifiers; skipped while typing (inputs,select,[contenteditable], Bandcamp'smenu-bar, shadow DOM targets viacomposedPath()), during IME composition and when the page already prevented the event; lone modifiers and partial matches left to the page (Ctrl+P stays print);preventDefaultonly on a full match; a held key runs once; pages without a page service keep their keys; the recorder in the popup refuses combinations the browser uses or another shortcut already uses. - MV3 service worker lifetime (
src/background/): the worker can stop at any time. Listeners (runtime.onMessage,runtime.onConnect,tabs.onUpdated,downloads.*,alarms.onAlarm) are registered synchronously at the top level on every start; no state that matters lives only in memory (batch download data goes throughchrome.storage.local, the download filename routes throughchrome.storage.session, and both are read back after a restart); timers that must survive usechrome.alarms, notsetTimeout; messages are one-way (nosendResponse; see messaging.md) and a listener passes an error handler; long-lived ports (PortName) handleonDisconnect. Firefox runs the same code as an event page. - Messaging: typed
Message(theMessagePayloadsmap ties the data to itsMessageCode, prefixband-play-) withMessageCodemembers (prefixband-play-) and payload models insrc/shared/models/messages/(messaging.md); payloads small and serializable, no DOM nodes; handlers small, they delegate to services and do not throw;sendToContentto a tab without the content script is handled; errors are caught and logged once. - Security and privacy: no
innerHTML(ordangerouslySetInnerHTML) with page data; titles and file names from Bandcamp are treated as untrusted (escaped in the UI, sanitized for the file system); no analytics and no requests besides fetching bandcamp.com pages for batch download; permissions stay minimal and match the manifests; noevalor remote code (MV3 CSP);web_accessible_resourceslimited to the listed assets and Bandcamp origins. - Bandcamp DOM robustness (bandcamp-dom.md): selectors are the stable hooks the page services already use (class names such as
.playbutton,.nextbutton,.prevbutton,.play-col, ids anddata-*attributes), with a fallback or a clean no-op when an element is missing (no uncaughtnullaccess); no position-based paths; idempotent injection withdata-band-play*markers;MutationObserverwork is debounced and does not react to the extension's own mutations; in-page URL changes (feed, discover) reach the content script through the backgroundUrlChangedmessage and reset the tracks; thehtml[data-band-play="ready"]marker is still set after the settings load and the shortcut listener starts (the e2e tests depend on it). - Firefox parity (firefox.md): both manifests in sync (they differ by
browser_specific_settings,background.scriptsinstead ofservice_worker, and the permissions Firefox lacks:power,downloads.shelf,downloads.ui);chrome.*only, nobrowser.*polyfill; Chrome-only APIs (chrome.power,downloads.onDeterminingFilename,downloads.setUiOptions,downloads.setShelfEnabled) are feature-detected and their UI is hidden or disabled on Firefox; nothing assumesstrict_min_versionnewer than 128 without a reason. - Popup and downloads page (React): settings load before the controls write; debounced saves are flushed; errors are rendered (
render-error.utils.ts) instead of a blank page; status and alert regions carry the feedback. - Conventions: block
ifwithreturn, tabs and single quotes, English comments,@shared/*imports, typed messages, exact npm versions, no speculative abstractions, no refactors outside the request. - Accessibility: labels, keyboard use, focus states, contrast of the injected UI on Bandcamp's light pages and in the popup.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 28 lines · 45 tokens per session scan A e8f7882a1f24
code-reviewer is an agent published in the GitHub repository borbiuk/band-play (21 stars, last pushed today), licensed MIT. It adds 45 tokens to every session and 1,294 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-26.
Other agents, from other repositories
architecture-guard
Audits PR diffs for architecture boundary violations, design simplicity, dependency drift, and established-pattern mismatches. Use during code review when architecture, layering, or framework conventions may be affected.
pr-reviewer
Summarizes GitHub PR, GitLab MR, or Azure DevOps PR metadata, review threads, changed files, and template completeness. Use during review-ticket or code-review workflows when PR/MR context exists.
test-gap-finder
Finds missing, weak, or stale test coverage in a diff. Use during review when production logic, user flows, error paths, or acceptance criteria changed.
check
Code quality auditor for the Trellis channel runtime. Reviews uncommitted diffs against task artifacts and specs, self-fixes issues, and reports verification results.
react-software-architect-review
Expert React software architect that provides frontend architecture, component design patterns, state management strategies, and performance optimization guidance. Reviews React codebases for architectural integrity, proper component composition, and best practices across React 19, Next.js, Remix, and modern frontend…
pr-reviewer
STRICT internal pre-PR reviewer — the final gate BEFORE a PR is opened, so CodeRabbit finds fewer bugs. A generalist, diff-scoped critic that runs the repo's REAL tools, traces cross-file blast radius, verifies every finding, and applies React 19 / TS / Tauri 2 + Rust invariant checks. Use right before git push /…