python
SKILL.md
Python Development Expert
Expert-level Python development skill with senior architect capabilities, automated code quality tools, and comprehensive best practices.
Core Capabilities
1. Code Quality Automation
Use bundled scripts to enforce code quality:
Run all quality checks:
uv run python scripts/check_quality.py [target_directory]
This runs:
- Ruff lint: Fast linting for code quality issues
- Ruff format: Code formatting checks
- MyPy: Static type checking
- Pytest: Test execution with coverage
- Bandit: Security vulnerability scanning
Auto-fix common issues:
uv run python scripts/autofix.py [target_directory]
Auto-fixes:
- Code formatting (line length, indentation, quotes)
- Import sorting
- Common linting issues (unused imports, etc.)
2. Project Initialization
Create new Python projects with best practices:
uv run python scripts/init_project.py <project-name> [path]
Creates:
- Modern project structure (
src/layout) - Configured
pyproject.tomlwith Ruff, MyPy, Pytest - Git ignore file
- Test structure
- README template
3. Code Quality Standards
See code_quality.md for detailed standards on:
- Linting and formatting configuration
- Type hints and annotations
- Modern Python patterns (match statements, walrus operator, etc.)
- Error handling best practices
- Documentation with comprehensive docstrings
- Testing with pytest
- Dependencies management with uv
4. Architecture Patterns
See architecture_patterns.md for:
- Project organization (feature-based structure)
- Dependency injection with protocols
- Design patterns (Factory, Strategy, Repository, Unit of Work)
- API design with FastAPI
- Async patterns
- Error handling architecture
- Performance optimization
Development Workflow
When Writing New Code
- Use type hints everywhere:
def process_data(
items: Sequence[dict[str, Any]],
max_count: int = 100,
) -> list[ProcessedItem]:
...
- Follow modern Python idioms:
# Use match statements (3.10+)
match status:
case 200:
return response.json()
case 404:
raise NotFoundError()
case _:
raise APIError(status)
- Add comprehensive docstrings:
def calculate_metrics(data: pd.DataFrame) -> dict[str, float]:
"""Calculate statistical metrics from data.
Args:
data: Input DataFrame with numeric columns
Returns:
Dictionary mapping metric names to values
Raises:
ValueError: If data is empty
"""
Before Committing
- Run auto-fix:
uv run python scripts/autofix.py - Run quality checks:
uv run python scripts/check_quality.py - Ensure all checks pass before committing
Code Review Checklist
- ✅ All functions have type hints
- ✅ Docstrings follow Google style
- ✅ No lint warnings from Ruff
- ✅ MyPy type checking passes
- ✅ No security issues from Bandit
- ✅ Test coverage > 80%
- ✅ Code follows architecture patterns
Tool Configuration
All tools are configured via pyproject.toml:
Ruff: Line length 100, Python 3.12+, comprehensive rule set MyPy: Strict mode with no untyped definitions Pytest: Coverage reporting with missing lines Coverage: Excludes test files and common patterns
Common Patterns
Dependency Injection
from typing import Protocol
class Repository(Protocol):
def save(self, item: Item) -> None: ...
class Service:
def __init__(self, repo: Repository) -> None:
self.repo = repo
Configuration with Pydantic
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
database_url: str
api_key: str
model_config = {"env_file": ".env"}
Error Handling
class DomainError(Exception):
"""Base for all domain errors."""
pass
class ValidationError(DomainError):
"""Invalid input data."""
pass
Async Operations
async def fetch_all(urls: list[str]) -> list[Response]:
async with aiohttp.ClientSession() as session:
tasks = [fetch_one(session, url) for url in urls]
return await asyncio.gather(*tasks)
Quick Reference
Install dev dependencies:
uv add --dev ruff mypy pytest pytest-cov bandit
Run single tool:
uv run ruff check .
uv run mypy .
uv run pytest
uv run bandit -r .
Format code:
uv run ruff format .
Type check:
uv run mypy --strict .
Best Practices Summary
- Always use type hints for function signatures and class attributes
- Run quality checks before committing code
- Follow modern Python patterns (match, protocols, dataclasses)
- Use dependency injection for testability
- Write comprehensive docstrings with examples
- Organize by feature not by layer
- Prefer composition over inheritance
- Use async for I/O-bound operations
- Cache expensive computations
- Test with pytest and maintain >80% coverage
Weekly Installs
12
Repository
lincyaw/agent-envFirst Seen
Feb 17, 2026
Security Audits
Installed on
opencode12
claude-code12
github-copilot12
codex12
continue12
mcpjam11