python-code-review skill
Reviews Python code for PEP8 compliance, type safety, asynchronous patterns, error handling, and common coding mistakes.
- GitHub stars
- 87
- Files
- 6
- Last commit
- Sep 15, 2026
- License
- Apache-2.0
- Allowed tools
- —
What does the python-code-review skill do?
python-code-review is an agent skill. Reviews Python code for PEP8 compliance, type safety, asynchronous patterns, error handling, and common coding mistakes.
Summary generated from the skill's SKILL.md.
About the python-code-review skill
Analyzing Python files for structural and stylistic correctness is what this skill enables. Developers use it to audit .py files for PEP8 compliance, type safety, and proper asynchronous patterns. When an agent loads this skill, it examines code against specific reference files like pep8-style.md, type-safety.md, and async-patterns.md to ensure high-quality implementation.
The tool identifies issues such as blocking calls in async functions, missing type hints, or improper exception handling. It distinguishes between actual errors and valid patterns, such as using Any for untyped libraries or employing noqa comments. The process follows a strict reporting workflow that requires verifying findings against context-sensitive rules and a mandatory verification protocol before presenting results.
By checking for mutable default arguments, proper import grouping, and correct naming conventions, it helps maintain a professional codebase. It produces detailed reports that include specific file paths and line numbers for every identified issue.
What an agent can do with it
- 1Audit PEP8 complianceCheck if a Python file follows standard indentation, line length, and naming conventions.
- 2Verify type safetyEnsure all function parameters and return types have appropriate type hints.
- 3Detect async bottlenecksIdentify blocking calls like time.sleep or requests inside asynchronous functions.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the python-code-review skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the python-code-review skill in Plugin
/plugin marketplace add existential-birds/beagle /plugin install beagle-python@existential-birds
Install the python-code-review skill in Claude Code
~/.claude/skills/python-code-review/SKILL.md
$ npx degit existential-birds/beagle/plugins/beagle-python/skills/python-code-review ~/.claude/skills/python-code-reviewInstall the python-code-review skill in Claude Code (project)
.claude/skills/python-code-review/SKILL.md
$ npx degit existential-birds/beagle/plugins/beagle-python/skills/python-code-review .claude/skills/python-code-reviewInstall the python-code-review skill in Codex
~/.agents/skills/python-code-review/SKILL.md
$ npx degit existential-birds/beagle/plugins/beagle-python/skills/python-code-review ~/.agents/skills/python-code-reviewInstall the python-code-review skill in Gemini CLI
~/.gemini/skills/python-code-review/SKILL.md
$ npx degit existential-birds/beagle/plugins/beagle-python/skills/python-code-review ~/.gemini/skills/python-code-reviewInstall the python-code-review skill in Claude.ai
npx degit existential-birds/beagle/plugins/beagle-python/skills/python-code-review python-code-review && zip -r python-code-review.zip python-code-review # claude.ai → Customize → Skills → + → Create skill → Upload a skill → python-code-review.zip
SKILL.md
View on GitHubPython Code Review
Quick Reference
| Issue Type | Reference |
|---|---|
| Indentation, line length, whitespace, naming | references/pep8-style.md |
| Missing/wrong type hints, Any usage | references/type-safety.md |
| Blocking calls in async, missing await | references/async-patterns.md |
| Bare except, missing context, logging | references/error-handling.md |
| Mutable defaults, print statements | references/common-mistakes.md |
Review Checklist
PEP8 Style
- 4-space indentation (no tabs)
- Line length ≤79 characters (≤72 for docstrings/comments)
- Two blank lines around top-level definitions, one within classes
- Imports grouped: stdlib → third-party → local (blank line between groups)
- No whitespace inside brackets or before colons/commas
- Naming:
snake_casefor functions/variables,CamelCasefor classes,UPPER_CASEfor constants - Inline comments separated by at least two spaces
Type Safety
- Type hints on all function parameters and return types
- No
Anyunless necessary (with comment explaining why) - Proper
T | Nonesyntax (Python 3.10+)
Async Patterns
- No blocking calls (
time.sleep,requests) in async functions - Proper
awaiton all coroutines
Error Handling
- No bare
except:clauses - Specific exception types with context
-
raise ... fromto preserve stack traces
Common Mistakes
- No mutable default arguments
- Using
loggernotprint()for output - f-strings preferred over
.format()or%
Valid Patterns (Do NOT Flag)
These patterns are intentional and correct - do not report as issues:
- Type annotation vs type assertion - Annotations declare types but are not runtime assertions; don't confuse with missing validation
- Using
Anywhen interacting with untyped libraries - Required when external libraries lack type stubs - Empty
__init__.pyfiles - Valid for package structure, no code required noqacomments - Valid when linter rule doesn't apply to specific case- Using
cast()after runtime type check - Correct pattern to inform type checker of narrowed type
Context-Sensitive Rules
Only flag these issues when the specific conditions apply:
| Issue | Flag ONLY IF |
|---|---|
| Generic exception handling | Specific exception types are available and meaningful |
| Unused variables | Variable lacks _ prefix AND isn't used in f-strings, logging, or debugging |
Gates (reporting workflow)
Complete in order. Do not advance until each pass condition is met.
- Scope — Pass: You list every
.pypath (or explicit glob) you inspected this run. - False-positive screen — Pass: For each issue you plan to report, you checked Valid Patterns and Context-Sensitive Rules above; you drop or narrow the finding if those sections say not to flag it.
- Evidence — Pass: Each remaining finding includes
[FILE:LINE](or a bounded line range). Symbols or short verbatim snippets may supplement the location anchor but do not replace it. - Verification protocol — Pass: You load review-verification-protocol and complete its mandatory steps for each reported issue before the user-facing write-up.
- Ship — Pass: The user-visible output matches whatever structure that protocol requires (no issues-only dump that skips its checks).
When to Load References
- Reviewing code formatting/style → pep8-style.md
- Reviewing function signatures → type-safety.md
- Reviewing
async deffunctions → async-patterns.md - Reviewing try/except blocks → error-handling.md
- General Python review → common-mistakes.md
Review Questions
- Does the code follow PEP8 formatting (indentation, line length, whitespace)?
- Are imports properly grouped (stdlib → third-party → local)?
- Do names follow conventions (snake_case, CamelCase, UPPER_CASE)?
- Are all function signatures fully typed?
- Are async functions truly non-blocking?
- Do exceptions include meaningful context?
- Are there any mutable default arguments?
Before reporting: complete Gates (reporting workflow) above (especially gate 4).
Files in this skill
6python-code-review skill questions
How do I install the python-code-review skill in Claude Code?
Run npx degit existential-birds/beagle/plugins/beagle-python/skills/python-code-review ~/.claude/skills/python-code-review. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the python-code-review skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
What specific Python style guide does this skill follow?
The skill follows PEP8 standards for indentation, line length, whitespace, and naming conventions.
When is it acceptable to use the 'Any' type hint?
Using 'Any' is acceptable when interacting with untyped libraries that lack type stubs, though it should be accompanied by a comment explaining why.