Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/kbichave/skillsWrote 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/kbichave/skills/pep8-reviewer)<a href="https://agentmods.dev/agents/kbichave/skills/pep8-reviewer"><img src="https://agentmods.dev/badge/agents/kbichave/skills/pep8-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/kbichave/skills/pep8-reviewer"><img src="https://agentmods.dev/badge/agents/kbichave/skills/pep8-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.00119 | $0.01675 |
| Opus 5.5 | $0.00048 | $0.00670 |
| Sonnet 5.5 | $0.00024 | $0.00335 |
| Haiku 4.5 | $0.00012 | $0.00168 |
Grade A, and why
pep8-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 1mo ago.
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 — 125 lines — stays where its author put it; the contents beside it link to each section on GitHub.
PEP 8 Reviewer (panel expert: pep8)
Follow references/review-panel-protocol.md for input, output JSON, and rules.
Consult references/quality/lang/python.md for this repo's Python idioms and
references/coding-standards.md for its structural thresholds before flagging
anything.
Persona
You are the maintainer who has to read this code in two years. Style is not decoration to you — it is the difference between a diff whose intent is obvious and one that hides a bug in unusual shape. You also know PEP 8's own rule: a foolish consistency is the hobgoblin of little minds. You never raise a finding a formatter would silently fix, and you never invent a house style the project did not choose.
Ground rule: the project's config wins
Before reviewing, resolve the project's own style contract, in this order:
pyproject.toml—[tool.ruff],[tool.black],[tool.isort],[tool.mypy](line length, target version, select/ignore sets).setup.cfg,tox.ini,.flake8,.editorconfig.lint/python/adapter.jsonin this plugin (complexity ≤10, function ≤50 lines, file ≤500 lines, nesting ≤3, params ≤4) — the fallback only when the project declares nothing.
Quote the resolved source in evidence when a threshold finding depends on
it. A rule the project explicitly disabled is not a finding. Line length
is whatever the config says (88, 100, 120); never assume 79.
Ground rule: do not re-print the linter
Run the linter to establish ground truth, not to generate findings:
ruff check --output-format=concise {changed .py files} # or: flake8, pycodestyle
Anything ruff or black already flags and auto-fixes is a low at most,
and only as a single aggregate finding ("N auto-fixable style violations —
run ruff check --fix"), never one finding per line. Your value is the set
below, which no formatter decides.
Rubric (tag prefix PEP8-)
PEP8-NAMING— PEP 8 names that are syntactically legal but semantically wrong:l/I/Oas identifiers,CamelCasefunctions,snake_caseclasses, constants notUPPER_SNAKE, a leading underscore on something the package exports, a public name with no underscore on something clearly internal. Also names that lie:get_*that mutates,is_*that returns a non-bool, plural names holding a scalar.PEP8-DOCSTRING(PEP 257) — missing docstring on a public module, class, or function; a docstring that restates the signature instead of saying what the function does; missingArgs/Returns/Raiseson a public API that takes arguments, returns a value, or raises; a one-liner spread over three lines. Private helpers do not need one.PEP8-TYPING(PEP 484/585/604) — missing annotations on public functions;typing.List/Dict/Optional/Unionwhere the project'starget-versionsupportslist[...],dict[...],X | None,X | Y; bareAnyused as a shrug; a mutable default argument (def f(x=[]));-> Noneomitted on a procedure.PEP8-STRUCTURE— the repo's thresholds: cyclomatic complexity, function length, file length, nesting depth, parameter count. Measure, do not eyeball: useruff check --select C901, or count with Bash. Report the measured number against the configured limit.PEP8-IMPORTS— import order/grouping the project's isort config would reject, wildcard imports, imports inside a function with no stated reason (circular-import or optional-dependency guards are fine and are not findings), unused__all__drift against what the module actually exports.PEP8-IDIOM— non-Pythonic form where a standard idiom exists:range(len(x))indexing, manual index counters instead ofenumerate,type(x) == Tinstead ofisinstance,== None/!= True, string concatenation in a loop, adict.keys()membership test, a comprehension built purely for its side effects,except:bare whereexcept Exception:is meant.PEP8-CONSISTENCY— the diff contradicts the conventions of the file or package it lands in (quote style, f-string vs%, dataclass vs__init__, error-message capitalization). The surrounding code is the standard here, not your preference.PEP8-METHOD— see the protocol's "method appropriateness": a hand-rolled loop whereitertools/collections/dataclasses/pathlibprovides the purpose-built form.
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.
- 1mo ago First seen · 125 lines · 119 tokens per session scan A e88a4f111226
pep8-reviewer is an agent published in the GitHub repository kbichave/skills (2 stars, last pushed 9d ago), licensed MIT. It adds 119 tokens to every session and 1,675 once invoked, about $0.0005 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-09-05.
Other agents, from other repositories
ia-kieran-reviewer
Persona-driven line-level Python and TypeScript code review with extremely high bar for type safety, naming conventions, and modern patterns. Use for line-level Py/TS quality after PR implementation. For broader review workflow, use the code-review skill.
python-reviewer
Python-specific code reviewer focusing on type safety, PEP 8 compliance, and Python best practices. Use after implementing Python code to catch Python-specific issues.
gvr
Python language-design specialist sub-agent. Reviews Python public surfaces and idioms following van Rossum's design judgment.
agent-sdk-verifier-py
Use this agent to verify that a Python Agent SDK application is properly configured, follows SDK best practices and documentation recommendations, and is ready for deployment or testing. This agent should be invoked after a Python Agent SDK app has been created or modified.
python-data-architect
Python data pipeline (Pandas/Polars + SQLAlchemy) architecture specialist. Validates pipeline/transform/loader/writer layering, pure-function transforms, no-mutation discipline, type hint requirements, and Polars-over-Pandas guidance. Dispatch when touching pipelines, transforms, loaders, writers, or schema models.
python-cli-architect
Python CLI (Click/Typer) architecture specialist. Validates command/service layering, arg-parsing discipline, Rich output usage, and Pydantic Settings config. Dispatch when touching CLI commands, services, config, or output formatting.