Back to Skills

following-conventions

verified

Tenzir Python coding standards and tooling setup. Use when writing python code, running ruff/mypy/pytest, encountering pyproject.toml/uv.lock, or setting up a new Python project.

View on GitHub

Marketplace

tenzir

tenzir/claude-plugins

Plugin

python

Repository
Verified Org

tenzir/claude-plugins
2stars

plugins/python/skills/following-conventions/SKILL.md

Last Verified

January 22, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/tenzir/claude-plugins/blob/main/plugins/python/skills/following-conventions/SKILL.md -a claude-code --skill following-conventions

Installation paths:

Claude
.claude/skills/following-conventions/
Powered by add-skill CLI

Instructions

# Python Coding Conventions

Coding standards for Python projects at Tenzir.

## Required Tools

All projects use:

- **uv** — Dependency management and virtual environments
- **Ruff** — Linting and formatting
- **Mypy** — Static type checking
- **pytest** — Testing

## Default Libraries

Prefer to use these libraries to ensure uniform codebase across Tenzir
repositories:

- **pydantic** - Defining and validating models
- **FastAPI** - Declaring REST APIs
- **Click** - Providing a CLI interface

## Quality Gates

Run before committing or releasing:

```sh
uv run ruff check \
  && uv run ruff format --check \
  && uv run mypy \
  && uv run pytest \
  && uv build
```

The chain fails fast on the first error.

## Python Version

Target Python 3.12+. Use modern syntax and stdlib features freely—no
backwards-compatibility with older versions.

## Coding Style

### Formatting

- Ruff controls whitespace: 4-space indentation, double-quoted strings
- 88 character line limit (Ruff/Black default)
- Let Ruff order imports automatically

### Type Hints

- All public surfaces must be fully typed
- Strict Mypy settings reject untyped or partial definitions
- Avoid `Any`; fix warnings rather than ignoring them

### Package structure and imports

- Keep `__init__.py` files empty. They are only used to mark a directory as
  importable but do not contain any content, let alone non-trivial code.
- Always use absolute imports from the package top level:
  `from this_package.foo import bar` instead of `from .foo import bar`.
- Never use wildcard imports

### Naming Conventions

| Element   | Convention      | Example             |
| --------- | --------------- | ------------------- |
| Modules   | `snake_case`    | `my_module.py`      |
| Functions | `snake_case`    | `calculate_total()` |
| Variables | `snake_case`    | `user_count`        |
| Classes   | `PascalCase`    | `DataProcessor`     |
| Constants | `CONSTANT_CASE` | `MAX_RETRIES`       |

### CLI Conventions

- Use kebab-case

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
3132 chars