01 Modern Python Scaffolding
One command. Full toolchain. Same quality bar for human and AI code. 9 quality tools on every commit. copier update pulls upstream improvements without losing local changes.
poe check — single gate for hooks, CI, and AIcopier update for upstream template improvementsmy-project/ ├── pyproject.toml # uv, poethepoet, all tool config ├── .python-version ├── .gitignore ├── .pre-commit-config.yaml # 9 quality tools ├── AGENTS.md # canonical AI instructions ├── CLAUDE.md → symlink to AGENTS.md ├── docs/ │ ├── SPEC.md # requirements (highest authority) │ ├── DESIGN.md # architecture (traces to SPEC) │ └── PATTERNS.md # conventions (can't contradict) ├── src/my_project/ │ ├── __init__.py │ └── py.typed # PEP 561 marker └── tests/
02 Hierarchical Documentation
Three documents with strict authority. Higher overrides lower. Each has a dedicated conversational skill that presents one decision at a time and hard-rejects content belonging at a different level.
design or patterns, harmonizer cross-references all three levels03 Design Workflow
Seven commands, run in sequence. Each launches an interactive session scoped to a single concern. Each produces a versioned artifact in the repo.
04 Drift Detection & Reconciliation
After design and patterns commands, subagent systems fire automatically to maintain doc consistency and generate reference material.
file:line evidence05 Skills Collection
After DESIGN is written, tech researcher generates reference skills for your exact stack. Queries Context7 live docs, falls back to web search, then training knowledge. Current material, not generic training data.
tech-* — library usage, idioms, gotchas, version-specific APIsstyle-* — naming conventions, import organization, type annotationsoptim-* — performance patterns, GPU batching, subprocess managementdomain-* — field-specific concepts: geospatial, ML, finance, etc.Example: ML + geospatial project
.agents/skills/ ├── tech-pytorch.md ├── tech-fastapi.md ├── tech-polars.md ├── style-python.md ├── optim-gpu.md └── domain-geospatial.md
06 Execution Promises
Before execution starts, the planner writes change_promise.toml — a contract that declares exactly what each task will produce. This turns open-ended code generation into a bounded, verifiable process.
Why line predictions? Requiring the AI to predict line counts forces thoughtful scoping. If it predicts 50 lines but writes 300, either the plan was sloppy or execution went sideways.
Example
[metadata] base_commit = "a3f2c1b" [[tasks]] title = "Add auth handler" goal = "Implement JWT auth" success_criteria = "Tests pass" files_to_create = ["src/auth/handler.py"] files_to_modify = ["src/__init__.py"] files_to_remove = [] expected_lines_added = 85 expected_lines_removed = 0 context_files = ["src/config.py"] doc_sections = ["docs/DESIGN.md#auth"] reference_skills = ["tech-pyjwt"] dependencies = [] completed = false attempts = 0 [[tasks]] title = "Add auth tests" goal = "Test auth flows" success_criteria = "100% coverage" files_to_create = ["tests/test_auth.py"] files_to_modify = [] files_to_remove = [] expected_lines_added = 120 expected_lines_removed = 0 context_files = ["src/auth/handler.py"] doc_sections = [] reference_skills = [] dependencies = [0] completed = false attempts = 0
Don't rely on the AI remembering.
Make the instructions part of the repository.