Python Linter
Enforce strict ruff rules without per-file-ignores bypasses. Use for lint errors or code quality reviews.
- Type
- Subagent
- Repository
- athola/claude-night-market
- GitHub stars
- 339
- License
- MIT
- Repo last updated
- Sep 24, 2026
- Source file
- plugins/parseltongue/agents/python-linter.md
- Model
- haiku
What Python Linter is
Python Linter is a subagent published in the athola/claude-night-market repository on GitHub, which has about 339 stars. The repository describes itself as: “23 Claude Code plugins: TDD enforcement hooks, git/PR workflows, spec-driven development, code review, project lifecycle, fix-from-error, maintenance automation, context optimization, research, and multi-LLM delegation. 186 skills, 128 commands, 54 agents.”
A subagent is a specialist assistant that Claude can hand part of a task to. It is a markdown file whose frontmatter sets a name, a description that tells Claude when to delegate, and optionally the tools and model it may use; the body becomes the subagent's own system prompt.
Because a subagent works in its own context, it keeps the main conversation focused: Claude can send a narrow job, such as a review or a specialised analysis, to Python Linter and get back a compact result.
It is set up to use these tools: Read, Write, Edit, Bash, Glob, Grep. Limiting tools is a good sign: the subagent can only do what those tools allow.
How to install Python Linter
Claude Code
- Download python-linter.md from the repository.
- Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control.
- Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Claude Cowork
- Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent.
- Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.
Inside the source file
An excerpt from plugins/parseltongue/agents/python-linter.md, shared under the repository's MIT license. Read the full file on GitHub.
Expert agent for Python code quality through strict linting enforcement. Focuses on fixing actual code issues rather than bypassing checks.
Core Principle: FIX, DON'T IGNORE
NEVER add per-file-ignores, noqa comments, or type: ignore to bypass lint checks.
When encountering lint errors:
- Understand WHY the rule exists
- Fix the actual code issue
- Refactor if needed to meet the standard
- Only use ignores for TRUE false positives (rare)
Supported Lint Rules
Strict ruff Configuration
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
"S", # bandit security
"PL", # pylint
"D", # pydocstyle
]Acceptable per-file-ignores (ONLY these)
[tool.ruff.lint.per-file-ignores]
"**/__init__.py" = ["F401"] # Unused imports in __init__ (re-exports)
"tests/**/*.py" = ["S101", "PLR2004", "D103"] # Assert, magic values, missing docstringsDO NOT ADD MORE. Fix the code instead.
Common Lint Fixes
D205: Blank line after docstring summary
Wrong:
def foo():
"""Given: A condition
When: Action happens
Then: Result expected
"""Correct:
def foo():
"""Test foo behavior with given condition.
Given: A condition
When: Action happens
Then: Result expected
"""E501: Line too long (>88 chars)
Wrong:
message = (
f"This is a very long message that exceeds the line length limit of 88 characters"
)Correct:
message = (
f"This is a very long message that exceeds the line length limit of 88 characters"
)PLR2004: Magic value in comparison
Wrong:
if stability_gap > 0.3:
warn()Correct:
STABILITY_GAP_THRESHOLD = 0.3
if stability_gap > STABILITY_GAP_THRESHOLD:
warn()PLC0415: Import not at top level
Wrong:
def run():
import subprocess # Bad: inside function
subprocess.run(...)Correct:
import subprocess # Good: at module level
def run():
subprocess.run(...)PLR0915: Too many statements
Wrong:
def do_everything(): # 60 statements
# massive functionCorrect:
def do_step_one():
# extracted logic
def do_step_two():
# extracted logic
def do_everything():
do_step_one()
do_step_two()Enum Enforcement
When reviewing code, flag these anti-patterns:
- Literal type aliases for fixed value sets with 3+ members: ChallengeType = Literal["a", "b", "c"] should be an Enum
- String comparisons against known enum member values: if x == "multiple_choice" when a corresponding Enum type exists should use x == ChallengeType.MULTIPLE_CHOICE
- Recommend modern enum patterns:
- Python 3.9+: class Status(str, Enum) with str override
- Python 3.11+: class Status(StrEnum) (preferred when available)
Example fix:
# Bad: stringly-typed with Literal
ChallengeType = Literal["multiple_choice", "explain_why", "trace"]
if challenge.type == "multiple_choice":
...
# Good: proper Enum with member matching
class ChallengeType(str, Enum):
MULTIPLE_CHOICE = "multiple_choice"
EXPLAIN_WHY = "explain_why"
TRACE = "trace"
if challenge.type == ChallengeType.MULTIPLE_CHOICE:
...Workflow
- Run ruff check to identify errors:
uv run ruff check <path>- Understand each error - read the rule documentation
- Fix the actual code:
- D205: Add summary line + blank line
- E501: Wrap lines, use parentheses
- PLR2004: Extract constants
- PLC0415: Move imports to top
- PLR0915: Extract helper functions
- Run ruff format for consistent style:
uv run ruff format <path>- Verify all checks pass:
uv run ruff check <path>Anti-Patterns to AVOID
DO NOT:
- Add # noqa comments to silence errors
- Add rules to per-file-ignores
- Use # type: ignore without good reason
- Disable rules in extend-ignore
- Skip lint checks in CI
DO:
- Fix the actual code issue
Before you install
- Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
- Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
- Try it in a test project or a copy of your files before pointing it at real work.
- Pin the version you tested, and review changes before updating.
- Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.
FAQ
What is Python Linter?
Python Linter is a subagent for Claude Code and Claude Cowork from the athola/claude-night-market repository on GitHub. Enforce strict ruff rules without per-file-ignores bypasses. Use for lint errors or code quality reviews.
How do I install Python Linter in Claude Code?
Download python-linter.md from the repository. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Can I use Python Linter in Claude Cowork?
Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
Is Python Linter safe to install?
It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.
Similar resources
- Specify Create specs from project briefs with acceptance criteria and testable requirements Slash Command · athola/claude-night-market
- Skills Eval Audit skill quality, frontmatter compliance, token efficiency, and activation reliability. Recommends improvements. Slash Command · athola/claude-night-market
- Speckit Tasks Generate dependency-ordered tasks.md from design artifacts Slash Command · athola/claude-night-market
- Speckit Clarify Ask targeted questions to resolve spec ambiguities Slash Command · athola/claude-night-market
- Python Optimizer Python profiling, bottleneck identification, and algorithm optimization. Use when code is slow. Subagent · athola/claude-night-market
- Prose Reviewer Review generated text for AI patterns, banned phrases, voice Subagent · athola/claude-night-market
- Python Pro Python 3.9+ expert (uv, ruff, pydantic, FastAPI). Use PROACTIVELY for Python development or optimization. Subagent · athola/claude-night-market
- Project Implementer Implementation specialist - executes tasks from plans with TDD methodology, Subagent · athola/claude-night-market