writing-python
Idiomatic Python 3.14+ development. Use when writing Python code, CLI tools, scripts, or services. Emphasizes stdlib, type hints, uv/ruff toolchain, and minimal dependencies.
When & Why to Use This Skill
This Claude skill facilitates idiomatic Python 3.14+ development, emphasizing high-performance, type-safe, and maintainable code. It streamlines the creation of CLI tools, scripts, and services by leveraging the modern uv/ruff toolchain and the latest language features like subinterpreters and deferred annotations, ensuring adherence to 'stdlib-first' principles and PEP standards.
Use Cases
- Case 1: Developing high-performance CLI applications and microservices using Python 3.14's latest features and the uv package manager.
- Case 2: Refactoring legacy Python codebases to modern, idiomatic standards with comprehensive type hints and optimized ruff linting.
- Case 3: Implementing true parallel processing in Python scripts by utilizing subinterpreters and the free-threaded build (no-GIL) capabilities.
- Case 4: Creating robust, dependency-light tools that prioritize the Python standard library for maximum portability and security.
| name | writing-python |
|---|---|
| description | Idiomatic Python 3.14+ development. Use when writing Python code, CLI tools, scripts, or services. Emphasizes stdlib, type hints, uv/ruff toolchain, and minimal dependencies. |
| allowed-tools | Read, Bash, Grep, Glob |
Python Development (3.14+)
Core Principles
- Stdlib first: External deps only when justified
- Type hints everywhere: All functions, all parameters
- Explicit over implicit: Clear is better than clever
- Fail fast: Raise early with informative errors
Toolchain
uv # Package management (not pip/poetry)
ruff # Lint + format (not flake8/black)
pytest # Testing
mypy # Type checking
Quick Patterns
Type Hints
def process_users(users: list[User], limit: int | None = None) -> list[Result]:
...
async def fetch_data(url: str, timeout: float = 30.0) -> dict[str, Any]:
...
Dataclasses
from dataclasses import dataclass, field
@dataclass
class Config:
host: str
port: int = 8080
tags: list[str] = field(default_factory=list)
Pattern Matching
match event:
case {"type": "click", "x": x, "y": y}:
handle_click(x, y)
case {"type": "key", "code": code}:
handle_key(code)
case _:
raise ValueError(f"Unknown event: {event}")
Python 3.14 Features
- Deferred annotations: No more
from __future__ import annotations - Template strings (t""):
t"Hello {name}"returns Template object - except without parens:
except ValueError, TypeError: - concurrent.interpreters: True parallelism via subinterpreters
- compression.zstd: Zstandard in stdlib
- Free-threaded build: No GIL (opt-in)
References
- PATTERNS.md - Code patterns and style
- CLI.md - CLI application patterns
- TESTING.md - Testing with pytest
Tooling
uv sync # Install deps
ruff check --fix . # Lint and autofix
ruff format . # Format
pytest -v # Test
mypy . # Type check