Skip to main content
Python Project Template



Contributors Forks Stargazers Issues MIT License Coverage CI Python

From zero to hero — production-ready Python, without the ceremony.


Quick Start

git clone https://github.com/nullhack/smith
cd smith
curl -LsSf https://astral.sh/uv/install.sh | sh  # skip if uv installed
uv sync --all-extras
opencode && @setup-project                        # personalise for your project
uv run task test && uv run task lint && uv run task static-check

Why this template?

Most Python templates give you a folder structure and a Makefile. This one gives you a complete delivery system: five AI agents, a structured five-step workflow, and quality gates that cannot be silenced by convention.

The goal is to give every project — from its first commit — the same rigour that mature teams take years to establish.

  • No feature starts without written acceptance criteria — Gherkin Example: blocks traced to tests
  • No feature ships without adversarial review — the reviewer's default hypothesis is "broken"
  • No guesswork on test stubs — generated automatically from .feature files
  • No manual @id tags — assigned automatically when you run tests
  • AI agents for every role — each agent has scoped instructions and cannot exceed its authority

How it works

The delivery cycle

SCOPE → ARCH → TDD LOOP → VERIFY → ACCEPT
Step Role Output
1 · SCOPE Product Owner Discovery interviews + Gherkin stories + acceptance criteria
2 · ARCH Software Engineer Module stubs, ADRs, auto-generated test stubs
3 · TDD LOOP Software Engineer RED → GREEN → REFACTOR, one criterion at a time
4 · VERIFY Reviewer Adversarial check — lint, types, coverage, semantic review
5 · ACCEPT Product Owner Demo, validate, ship

WIP limit: 1 feature at a time. Features are .feature files that move through folders:

docs/features/backlog/      ← waiting
docs/features/in-progress/  ← building (max 1)
docs/features/completed/    ← shipped

AI agents included

Agent Responsibility
@product-owner Scope, stories, acceptance criteria, delivery acceptance
@software-engineer Architecture, TDD loop, git, releases
@reviewer Adversarial verification — default position: broken
@designer Visual identity, colour palette, SVG assets
@setup-project One-time project initialisation

Quality tooling, pre-configured

Tool Role
uv Package & environment management
ruff Lint + format (Google docstrings)
pyright Static type checking — 0 errors
pytest + hypothesis Tests + property-based testing
pytest-beehave Auto-generates test stubs from .feature files
pytest-cov Coverage — 100% required
pdoc API docs → GitHub Pages
taskipy Task runner

Commands

uv run task test          # Full suite + coverage
uv run task test-fast     # Fast, no coverage (use during TDD loop)
uv run task lint          # ruff check + format
uv run task static-check  # pyright
uv run task run           # Run the app

Code standards

Coverage 100%
Type errors 0
Function length ≤ 20 lines
Class length ≤ 50 lines
Max nesting 2 levels
Principles YAGNI › KISS › DRY › SOLID › Object Calisthenics

Test convention

Write acceptance criteria in Gherkin:

@id:a3f2b1c4
Example: User sees version on startup
  Given the application starts
  When no arguments are passed
  Then the version string is printed to stdout

Run tests once — a traced, skipped stub appears automatically:

@pytest.mark.skip(reason="not yet implemented")
def test_display_version_a3f2b1c4() -> None:
    """
    Given the application starts
    When no arguments are passed
    Then the version string is printed to stdout
    """

Each test traces to exactly one acceptance criterion. No orphan tests. No untested criteria.


Branding

When you run @setup-project, the agent collects your project's identity — name, tagline, mission, colour palette, and release naming convention — and writes docs/branding.md. All agents read this file. Release names, C4 diagram colours, and generated copy all reflect your project's identity without you touching .opencode/.

Absent or blank fields fall back to defaults: adjective-animal release names, Mermaid default colours, no wording constraints.


Versioning

v{major}.{minor}.{YYYYMMDD} — each release gets a unique name derived from your branding convention. By default: an adjective paired with an animal (scientific name). Configure your own theme in docs/branding.md.


License

MIT — see LICENSE.

Author: @nullhack · Documentation

Metadata

Release files for agents-smith 0.1.20260421

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agents-smith 0.1.20260421
File Size Uploaded Provenance Actions
agents_smith-0.1.20260421.tar.gz 6.5 kB With provenance Details for agents_smith-0.1.20260421.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for agents-smith 0.1.20260421
File Interpreter ABI Platform Actions
agents_smith-0.1.20260421-py3-none-any.whl Python 3 none any Details for agents_smith-0.1.20260421-py3-none-any.whl

Total release size: 12.8 kB

Release files / agents_smith-0.1.20260421.tar.gz

Download URL agents_smith-0.1.20260421.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c7f79dff72eda292f8e6591e3b809eec4fae938d1f3e16032fcfb540819759c5
BLAKE2b-256 checksum
How to use checksums
1893a1b8b55a2dfaa1fcae15380fd4fa22156b085c4d5305cbaaf3b221f5a186
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

Release files / agents_smith-0.1.20260421-py3-none-any.whl

Download URL agents_smith-0.1.20260421-py3-none-any.whl
Size 6.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0ef83a7ec4541ff9d2bad8c41622e4ebc4ad8eed97dd905171dd7b320e43c0e2
BLAKE2b-256 checksum
How to use checksums
e692be261a246102e2fdcba9c01b48081125ab93f3c5501ccddc57a113e7d756
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

Security for agents-smith 0.1.20260421

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for agents_smith-0.1.20260421.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page