An opinionated Python code review, refactoring, and explanation agent powered by Claude. Part of the custom-coding-agents workspace — see the workspace README for the shared install flow.
# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
# From the workspace root — one lockfile resolves both agents into a single venv.
uv sync --extra dev
# Set your API key (the workspace .env at the repo root is read automatically).
cp .env.example .env
# Edit .env and add your ANTHROPIC_API_KEY
# Run a code review
uv run pyagent review path/to/file.py
# Refactor a single file
uv run pyagent refactor path/to/file.py
# Refactor an entire codebase (full two-phase: plan, then batched execute)
uv run pyagent refactor path/to/project/
# Narrow refactor focused on a specific concern (single context-packed pass)
uv run pyagent refactor path/to/project/ -i "modernize type hints"
# Explain a file
uv run pyagent explain path/to/file.py
# Start an interactive chat session
uv run pyagent chat --path path/to/project/| Command | Description |
|---|---|
review <path> |
Review code for correctness, style, and best practices |
refactor <path> |
Apply named refactoring patterns from the playbook |
explain <path> |
Explain code structure, patterns, and design decisions |
chat |
Interactive conversation about a codebase |
info |
Show configuration and knowledge base stats |
All commands accept --instructions / -i (or --question / -q for explain) for additional guidance, and --model / -m to override the default model. review, refactor, and explain all auto-detect file vs directory paths — no mode flag required. pyagent --version prints the installed version and exits.
refactor picks its mode implicitly from the path and whether you supplied -i:
| Path | -i instructions |
Mode |
|---|---|---|
| file | n/a | single file, refactored in place with surrounding package context |
| directory | (none) | full codebase refactor in two phases (plan → batched execution) |
| directory | focused instructions | partial refactor — a single context-packed pass over the highest-priority files matching your instructions |
The intuition: a bare refactor ./proj means "refactor the whole project", so every file gets a turn. A refactor ./proj -i "modernize the auth module" is narrow and focused, so only the files relevant to the instructions are touched — faster and cheaper.
Two flags override the heuristic when needed:
| Flag | Description |
|---|---|
--full |
Force the two-phase codebase refactor (directory only) |
--partial |
Force the context-packed single-pass refactor (directory only) |
--dry-run |
Show proposed changes without writing any files |
--no-confirm / -y |
Apply changes without a confirmation prompt |
--no-backup |
Skip creating backup files before writing |
The full mode works in two phases:
- Planning — The LLM receives the full structural summary of the codebase and produces a named, actionable refactoring strategy (themes, order of operations, file-specific notes). The plan is persisted to
.pyagent/last_plan.jsonandlast_plan.md. - Execution — All source files are grouped into token-budget-constrained batches. Each batch is refactored with the overall plan as context. Per-batch output is persisted to
.pyagent/batches/batch_NNN.mdfor audit, and a plan-adherence check flags any batch that ignored the strategy (and retries it once).
The same diff-review → confirm → backup → write workflow applies in every mode — you see every proposed change before anything is written to disk.
# Full refactor of the whole project (implicit — directory, no -i)
uv run pyagent refactor ./my_project
# Narrow refactor with a focus (implicit — directory + -i)
uv run pyagent refactor ./my_project -i "modernize type hints and remove legacy patterns"
# Force the full mode even when -i is narrow
uv run pyagent refactor ./my_project -i "clean up the models" --full
# Preview without writing
uv run pyagent refactor ./my_project --dry-runsrc/pyagent/
├── __main__.py # CLI entrypoint (typer + rich)
├── agent.py # Core orchestration loop
├── config.py # Pydantic settings (PYAGENT_* env vars)
├── context.py # Codebase ingestion, AST parsing & file batching
├── logging.py # Structured logger factory
├── memory.py # Conversation state management
├── plan_model.py # RefactorPlan / FileChange schemas
├── prompts.py # Prompt templates per capability
├── rag.py # Documentation retrieval
├── writer.py # Diff rendering, backups, and on-disk writes
└── tools/
├── base.py # Tool protocol
├── reviewer.py # Code review tool
├── refactor.py # Refactoring tool (single-file + batch)
└── explainer.py # Explanation tool
All settings are read from environment variables (optionally via a .env file at the workspace root) and resolved by pyagent.config.Settings.
| Env var | Default | Purpose |
|---|---|---|
ANTHROPIC_API_KEY |
required | API key for Claude access |
PYAGENT_MODEL |
claude-sonnet-4-20250514 |
Model ID to use |
PYAGENT_MAX_TOKENS |
8000 |
Upper bound on per-turn model output |
PYAGENT_BATCH_MAX_TOKENS |
20000 |
Per-batch token budget during two-phase codebase refactors |
PYAGENT_CONTEXT_TOKEN_BUDGET |
30000 |
Budget for single-pass context-packed refactors |
PYAGENT_LOG_LEVEL |
INFO |
Log level |
PYAGENT_DOCS_PATH |
<repo>/docs/python |
Directory of .md files indexed for RAG |
The agent's opinions are codified in six documents under docs/python/:
| Document | Purpose |
|---|---|
python_standards.md |
Language-level style, idioms, and conventions |
tech_stack.md |
Preferred tools and libraries with rationale |
anti_patterns.md |
Code smells and mistakes to flag |
refactoring_playbook.md |
Named patterns with before/after examples |
architecture_patterns.md |
Module design, DI, and structural best practices |
review_rubric.md |
Severity levels, scoring dimensions, output format |
These docs are retrieved via RAG at runtime, so you can edit them to tune the agent's behavior without touching code.
# Install with dev dependencies (from the workspace root or from this package).
uv sync --extra dev
# Run this package's tests.
uv run pytest agents/fluent-pythonista/test_core.py -v
# Lint and format.
uv run ruff check agents/fluent-pythonista/
uv run ruff format agents/fluent-pythonista/- archagent — the architecture-advisor companion that lives in the same workspace.