- Use Python 3.11+ type annotation syntax throughout
- Include type hints for all function parameters and return values
- Use
typingmodule imports only when necessary for complex types - Prefer built-in generic types (e.g.,
list[str]instead ofList[str])
- Always use
uvfor Python environment and dependency management - Use
uv addfor adding new dependencies - Use
uv add --devfor development dependencies - Run commands through
uv runwhen needed - Always use
uv run script.pythonoruv run python -m module.pathinstead ofpython ...commands
Avoid adding #!/usr/bin/env python3 to the top of Python files.
- Replace hard-coded values with named constants
- Use descriptive constant names that explain the value's purpose
- Keep constants at the top of the file or in a dedicated constants file
- Variables, functions, and classes should reveal their purpose
- Names should explain why something exists and how it's used
- Don't comment on what the code does - make the code self-documenting
- Use comments to explain why something is done a certain way
- Document APIs, complex algorithms, and non-obvious side effects
- Keep related code together
- Organize code in a logical hierarchy
- Use consistent file and folder naming conventions
- Refactor continuously
- Fix technical debt early
- Leave code cleaner than you found it
Always verify information before presenting it. Do not make assumptions or speculate without clear evidence.
Never use apologies.
Avoid giving feedback about understanding in comments or documentation.
Don't summarize changes made.
Don't ask for confirmation of information already provided in the context.
Don't remove unrelated code or functionalities. Pay attention to preserving existing structures.
Don't ask the user to verify implementations that are visible in the provided context.
Don't suggest updates or changes to files when there are no actual modifications needed.
Always provide links to the real files, not x.md.
Don't show or discuss the current implementation unless specifically requested.
If you are asked to implement a specific backend, just stick to that. Do not generalize to other common or related use-cases. You can offer to implement these, but only do so if explicitly instructed to.
This project uses:
- ruff: Fast Python linter and code formatter
- just: Command runner -- put commonly-used shell commands into the
justfile!