- Tests codify behavioral expectations.
- Types codify interface expectations.
- Silto codifies architectural expectations.
What Silto checks
Silto 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. Validators raise or pass, predicates
return booleans, queries and conversions return values, and iterator names
produce iterators.
Enforce it, then see it
Because Silto enforces the structure, it can also render it meaningfully.silto checkstops the repo from losing its shape.silto maphelps you see that shape again, as a deterministic downstream call tree with clickablepath:linelocations.

silto map run_map
Keeping agents on the rails
Increasingly, the code that drifts is the code an agent wrote. 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.
silto skills closes the loop: it generates agent
guidance from your active rules, kept in sync automatically, so the rules your agent
follows are the rules your CI enforces.
Battle-tested
Silto 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. Silto 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 Silto, configure a repo, and read your first faults in a few minutes.
Philosophy
Why Silto is strict by default, and how deliberate deviation works.
Architecture model
Scopes, roles, and the default module layout Silto enforces.
Adopting Silto
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.
Install with
pip install silto and run silto. Silto is functional and
self-hosting, but pre-release.

