Stateous
Stateous runs a process as a graph of states, and keeps every token of it durable.
You write the graph in Python. A control plane keeps every token and chooses each next state. A supervisor, on any computer, does the work and reports what happened. The supervisor never sees the graph. It knows only which states it serves, and which outcomes each state allows.
Status: alpha. The API can change before version 1.0.
Install
Stateous needs Python 3.12 or newer.
pip install stateous # or: uv add stateous
pip install "stateous[phd]" # also PHD, to run agents in routines
Then run the stateous command in that environment. The control plane keeps its data in SQLite or in Postgres.
The example
examples/sdlc/ is a workflow with two states: coding and testing. examples/sdlc-supervisor/ is the supervisor's folder for it.
# on the control plane's computer
stateous compile sdlc/flow.py # writes sdlc/build/sdlc.json
stateous serve sdlc/build/sdlc.json --listen 0.0.0.0:8080
# on the supervisor's computer
stateous init http://cp.internal:8080 sdlc-supervisor # contract.py, stubs, stateous.yaml, pyproject.toml
stateous supervise sdlc-supervisor # runs the routines
# anywhere
stateous token start TICKET-1 '{"repo": "acme/api"}' --url http://cp.internal:8080
stateous token show TICKET-1 --url http://cp.internal:8080
Stateous has no authentication. Keep a control plane that listens on a wider address behind a VPN or a proxy.
To try the example on one computer, follow the guide.
Learn more
docs/guide.md: the guide, on one page.examples/: the example.
Licence
Metadata
Release files for stateous 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| stateous-0.1.0.tar.gz | 249.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| stateous-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 382.9 kB
Release files / stateous-0.1.0.tar.gz
| Download URL | stateous-0.1.0.tar.gz |
|---|---|
| Size | 249.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bcf34a831dbec4352502be697698d4fe99a0680691b01304217830b965b62f69
|
|
BLAKE2b-256 checksum How to use checksums |
d9c64b614e58df3c38eb77e075b20c64bcd7dbbc104a6361771bb525161c4aff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 13, 2026.
Transparency logRelease files / stateous-0.1.0-py3-none-any.whl
| Download URL | stateous-0.1.0-py3-none-any.whl |
|---|---|
| Size | 133.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8e4e32b78eb3f2743a6714270fa4b549c0f53fadce9aeec173980e3c7278bae7
|
|
BLAKE2b-256 checksum How to use checksums |
0e4929ec52f1b606bf7ef27c4040adccaa07f1614d220a90967f432d6653d736
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 13, 2026.
Transparency log