- Tests codify behavioral expectations.
- Types codify interface expectations.
- Strata codifies architectural expectations.
What Strata checks
Strata is an architecture linter for Python repos. It analyzes your source and reports faults, the places where the code has broken away from the architecture you declared.Layers and boundaries
Which modules and packages may import which. Absolute imports only, no star
imports, no reaching into a sibling’s internals, no importing from tooling at
runtime.
Module roles
What each kind of file may contain and where it may live.
models.py holds
models, types.py holds types, main/ holds orchestrators, helpers/ holds
phases, classes/ holds one class each.Function shape
Size caps on orchestrators, explicit dataflow, keyword-only arguments,
mutate-only-if-returned, and no hidden control flow buried in comprehensions.
Naming contracts
Names that must mean what they claim. A
validate_* or enforce_* function
raises or passes, so it must not quietly return a value like a query.Enforce it, then see it
Because Strata enforces the structure, it can also render it meaningfully.strata checkstops the repo from losing its shape.strata maphelps you see that shape again, as a deterministic downstream call tree with clickablepath:linelocations.

Built for the LLM era
This matters even more with LLMs in the loop. Models are good at local edits but not at preserving architecture over time. They tend to:- inline too much and grow functions;
- smear state across boundaries;
- add imports through the wrong layer;
- satisfy the letter of a vague rule while violating its intent.
strata skills generates agent guidance straight from your active
ruleset, so the instructions your agents follow cannot drift from the rules your CI
enforces.
Battle-tested
Strata is not a tool built for an imagined problem. Earlier versions of these checks ran unnamed for months, first in workplace codebases and then in sqlbuild, a 100k+ line Python project. Strata turns that hard-won structure into a reusable default. The default is opinionated; the point is to give you a serious starting structure instead of a blank page, then let you adapt it once you know what you are changing.Get started
Quickstart
Install Strata, configure a repo, and read your first faults in a few minutes.
Philosophy
Why Strata is strict by default, and how deliberate deviation works.
Architecture model
Scopes, roles, and the default module layout Strata enforces.
Adopting Strata
Rolling out on a new repo versus an existing one.
Custom rules
Write your own rules in Python with the same context the core rules use.
The PyPI distribution is
stratalint; the command is strata. Install with
pip install stratalint and run strata. Strata is functional and self-hosting,
but pre-release.

