Agent Skills for Claude Code | Python Pro
| Domain | Language |
| Role | specialist |
| Scope | implementation |
| Output | code |
Triggers: Python development, type hints, async Python, pytest, mypy, dataclasses, Python best practices, Pythonic code
Related Skills: FastAPI Expert · DevOps Engineer
Modern Python 3.11+ specialist focused on type-safe, async-first, production-ready code.
When to Use This Skill
Section titled “When to Use This Skill”- Writing type-safe Python with complete type coverage
- Implementing async/await patterns for I/O operations
- Setting up pytest test suites with fixtures and mocking
- Creating Pythonic code with comprehensions, generators, context managers
- Building packages with Poetry and proper project structure
- Performance optimization and profiling
Core Workflow
Section titled “Core Workflow”- Analyze codebase — Review structure, dependencies, type coverage, test suite
- Design interfaces — Define protocols, dataclasses, type aliases
- Implement — Write Pythonic code with full type hints and error handling
- Test — Create comprehensive pytest suite with >90% coverage
- Validate — Run
mypy --strict,black,ruff- If mypy fails: fix type errors reported and re-run before proceeding
- If tests fail: debug assertions, update fixtures, and iterate until green
- If ruff/black reports issues: apply auto-fixes, then re-validate
Reference Guide
Section titled “Reference Guide”Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Type System | references/type-system.md | Type hints, mypy, generics, Protocol |
| Async Patterns | references/async-patterns.md | async/await, asyncio, task groups |
| Standard Library | references/standard-library.md | pathlib, dataclasses, functools, itertools |
| Testing | references/testing.md | pytest, fixtures, mocking, parametrize |
| Packaging | references/packaging.md | poetry, pip, pyproject.toml, distribution |
Constraints
Section titled “Constraints”MUST DO
Section titled “MUST DO”- Type hints for all function signatures and class attributes
- PEP 8 compliance with black formatting
- Comprehensive docstrings (Google style)
- Test coverage exceeding 90% with pytest
- Use
X | Noneinstead ofOptional[X](Python 3.10+) - Async/await for I/O-bound operations
- Dataclasses over manual init methods
- Context managers for resource handling
MUST NOT DO
Section titled “MUST NOT DO”- Skip type annotations on public APIs
- Use mutable default arguments
- Mix sync and async code improperly
- Ignore mypy errors in strict mode
- Use bare except clauses
- Hardcode secrets or configuration
- Use deprecated stdlib modules (use pathlib not os.path)
Code Examples
Section titled “Code Examples”Type-annotated function with error handling
Section titled “Type-annotated function with error handling”from pathlib import Path
def read_config(path: Path) -> dict[str, str]: """Read configuration from a file.
Args: path: Path to the configuration file.
Returns: Parsed key-value configuration entries.
Raises: FileNotFoundError: If the config file does not exist. ValueError: If a line cannot be parsed. """ config: dict[str, str] = {} with path.open() as f: for line in f: key, _, value = line.partition("=") if not key.strip(): raise ValueError(f"Invalid config line: {line!r}") config[key.strip()] = value.strip() return configDataclass with validation
Section titled “Dataclass with validation”from dataclasses import dataclass, field
@dataclassclass AppConfig: host: str port: int debug: bool = False allowed_origins: list[str] = field(default_factory=list)
def __post_init__(self) -> None: if not (1 <= self.port <= 65535): raise ValueError(f"Invalid port: {self.port}")Async pattern
Section titled “Async pattern”import asyncioimport httpx
async def fetch_all(urls: list[str]) -> list[bytes]: """Fetch multiple URLs concurrently.""" async with httpx.AsyncClient() as client: tasks = [client.get(url) for url in urls] responses = await asyncio.gather(*tasks) return [r.content for r in responses]pytest fixture and parametrize
Section titled “pytest fixture and parametrize”import pytestfrom pathlib import Path
@pytest.fixturedef config_file(tmp_path: Path) -> Path: cfg = tmp_path / "config.txt" cfg.write_text("host=localhost\nport=8080\n") return cfg
@pytest.mark.parametrize("port,valid", [(8080, True), (0, False), (99999, False)])def test_app_config_port_validation(port: int, valid: bool) -> None: if valid: AppConfig(host="localhost", port=port) else: with pytest.raises(ValueError): AppConfig(host="localhost", port=port)mypy strict configuration (pyproject.toml)
Section titled “mypy strict configuration (pyproject.toml)”[tool.mypy]python_version = "3.11"strict = truewarn_return_any = truewarn_unused_configs = truedisallow_untyped_defs = trueClean mypy --strict output looks like:
Success: no issues found in 12 source filesAny reported error (e.g., error: Function is missing a return type annotation) must be resolved before the implementation is considered complete.
Output Templates
Section titled “Output Templates”When implementing Python features, provide:
- Module file with complete type hints
- Test file with pytest fixtures
- Type checking confirmation (mypy —strict passes)
- Brief explanation of Pythonic patterns used
Knowledge Reference
Section titled “Knowledge Reference”Python 3.11+, typing module, mypy, pytest, black, ruff, dataclasses, async/await, asyncio, pathlib, functools, itertools, Poetry, Pydantic, contextlib, collections.abc, Protocol