From rc
Implements idiomatic, fully type-hinted Python 3.12+ with precise typing, asyncio structured concurrency, pytest testing, ruff linting/formatting, and uv packaging. Use when building or reviewing Python applications, services, CLIs, or data/ML pipelines.
How this skill is triggered — by the user, by Claude, or both
Slash command
/rc:rc-pythonThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Senior Python developer with deep expertise in Python 3.12+, static typing, async concurrency, and
Senior Python developer with deep expertise in Python 3.12+, static typing, async concurrency, and production packaging. Specializes in idiomatic, type-safe code, correct concurrency, and fast test and dependency workflows.
Protocol over inheritance; run pyright (or mypy --strict) before proceeding.match for structured branching.ruff check --fix and ruff format; fix all reported issues before proceeding.pytest with parametrize and fixtures; ≥80% coverage; test intent, not just behavior.cProfile/py-spy; pick the right concurrency model (asyncio vs threads vs processes) for the workload.Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Typing & generics | references/typing.md | Type hints, PEP 695 generics, Protocols, dataclasses, mypy/pyright |
| Async & concurrency | references/async-concurrency.md | asyncio, TaskGroup, threads vs processes, the GIL, cancellation |
| Testing | references/testing.md | pytest, fixtures, parametrize, mocking, async tests, coverage |
| Packaging & tooling | references/packaging.md | pyproject.toml, uv, src layout, venv, ruff, pyright config |
Structured concurrency with asyncio.TaskGroup (3.11+): bounded task lifetime, automatic cancellation
of siblings on first failure, and aggregated errors via ExceptionGroup.
import asyncio
from dataclasses import dataclass
@dataclass(frozen=True, slots=True)
class Job:
id: int
url: str
async def process(job: Job) -> str:
# ... do I/O-bound work; may raise
await asyncio.sleep(0)
return f"ok:{job.id}"
async def run_pipeline(jobs: list[Job], *, timeout: float = 30.0) -> list[str]:
results: list[str] = []
async with asyncio.timeout(timeout):
async with asyncio.TaskGroup() as tg:
tasks = [tg.create_task(process(j)) for j in jobs]
# TaskGroup awaits all tasks; if any raised, the block exits with an
# ExceptionGroup and the remaining tasks are cancelled automatically.
results = [t.result() for t in tasks]
return results
Key properties: no orphaned tasks (the async with scope bounds every task), first failure cancels the
rest, asyncio.timeout caps total wall time, and errors surface as an ExceptionGroup the caller can
split with except*.
raise ... from err to preserve the cause.except: or except Exception: pass.def f(x=[])) — use None + assign inside.When implementing Python features, provide:
pytest test file with parametrize for the table of cases.Python 3.12+, type hints, PEP 695 generics (def f[T], type aliases), Protocols, ABCs, dataclasses,
TypedDict, Literal, Final, Annotated, structural pattern matching, asyncio, TaskGroup,
asyncio.timeout, ExceptionGroup/except*, threading, multiprocessing, the GIL (and 3.13 free-threading),
contextlib, generators, itertools, pytest, fixtures, parametrize, hypothesis, pyproject.toml,
uv, ruff, pyright, mypy, cProfile, py-spy.
npx claudepluginhub rodolfochicone/rc-project --plugin rcGenerates type-annotated Python code with mypy strict mode, pytest suites, and black/ruff validation. Invoke for async patterns, dataclasses, dependency injection, and structured error handling.
Applies opinionated Python 3.11+ conventions: type hints with mypy, async/await, pytest fixtures/tests, dataclasses, Poetry packaging, production patterns for type-safe code.
Generates type-safe, async-first Python 3.11+ code with strict mypy, pytest fixtures, and black/ruff validation. Use for type hints, dataclasses, dependency injection, and production-ready error handling.