stratt
stratt
One set of commands for every repo, whatever language it’s in.
build, test, lint, release, deploy — the same commands in a Go repo, a Python repo, or a PHP one. Stratt detects the toolchain and dispatches; you don’t think about it.
Named for Eva Stratt, Project Director of the Petrova Taskforce in Andy Weir’s Project Hail Mary.
The idea
Every repo needs the same handful of commands — build, test, lint, format, release, deploy — but each language and toolchain spells them differently. Make targets capture the variance per-repo, but every repo’s Makefile becomes its own dialect.
Stratt collapses that to one vocabulary. The differences between toolchains live in stratt’s detection layer; they’re invisible to the user.
$ stratt test # uv run pytest, or go test ./..., or composer test —
# whichever the repo actually uses
$ stratt release minor # bump the version source, commit, tag, push
$ stratt deploy prod 1.14.1 # bump Kustomize image tags
$ stratt doctor # show exactly what each command will dispatch toTwo Go projects in your fleet can have completely different release flows (one bump-my-version-driven, one goreleaser-driven) — same stratt release command for both. Stratt detects the right engine and dispatches.
Highlights
- One vocabulary, every stack. Go, Python+UV, Node+npm, PHP, Docker, Kustomize, MkDocs, Sphinx, Hugo, GitHub Actions, and Ansible (collections, roles, playbooks). Multi-stack repos are normal.
- Zero config when possible. Detection drives behavior.
stratt.tomlis optional. - Single static binary. No Python or Node runtime required to use stratt itself.
- Secure self-update. Sigstore artifact attestations verified on every update. Homebrew users get an automatic dispatch to
brew upgrade. - Composable tasks. Built-in commands and your own custom tasks share one namespace. Override or augment any built-in.
Install
brew tap stratt-sh/tap
brew install strattTry it
cd <any-repo-you-have>
stratt doctordoctor reports the detected stacks and the resolved backend for every universal command. What it shows is exactly what each command will run.