athanore
Code-defined AI agent workflows over ACP.
A workflow is a graph declared in code: decorated functions as nodes, edges inferred from parameter names. Node bodies are arbitrary async Python — they may dispatch an ACP agent, or do purely deterministic work. A server runs the graph; a CLI submits work and watches it.
See DESIGN.md for the full design and the workflow/
package for a complete pipeline (one agent class per file, prompts inlined).
Install
uv sync
The interface — three rules
- The signature is the graph. Positional parameters are edges; a
keyword-only parameter after
*is the optional payload. Exactly one node isstart=True. - The return value is the routing. A plain return auto-transitions to a
single successor;
edge_ref(value)routes explicitly; returning from a node with no successors completes the run. - The exception is the failure policy. Raising triggers retry/dead-letter.
from athanore import AthanoreWorkflow
from athanore.testing import MockAgent # stand-in for AthanoreACPAgent
wf = AthanoreWorkflow("feature_build")
@wf.node(start=True)
async def prompt(build, /, brief):
result = await MockAgent(output=f"prompt for: {brief}").run(brief)
return result.output
@wf.node()
async def build(review, /, spec):
result = await MockAgent(output=f"built: {spec}").run(str(spec))
return result.output
@wf.node()
async def review(build, ship, /, work):
# branch: approve after one pass through build, else loop back
if str(work).count("built") >= 2:
return ship(work)
return build(work)
@wf.node()
async def ship(final):
return await MockAgent(output=f"shipped: {final}").run(str(final))
if __name__ == "__main__":
wf.run(port=4002, workers=1)
Run it
uv run python -m workflow # or your own workflow file
Use the CLI
athanore # bare command opens the live TUI
athanore feature_build "Build X" ["details"] # create a task for the intake agent
athanore gamedev "Neon snake" ["details"] # ...or any registered workflow
athanore ls # list runs
athanore run <id> # inspect a run + its tasks
athanore logs <id> # show the run's event history
athanore workflows # show registered graphs
athanore tui # live TUI: runs list + run detail
--port/--host (or ARTIFICER_PORT) point the CLI at the server. Add
--web to athanore or athanore tui to serve the TUI in a browser
(--web-port picks the port, default 2424).
Tests
uv run pytest -q
Layout
athanore/graph.py— DSL: signature parsing, finalization, generationsathanore/store.py— sqlite store (runs, tasks, submissions, events)athanore/scheduler.py— priority dispatch loop, retries, recoveryathanore/agents.py—AthanoreACPAgentfacade (ACP Python SDK)athanore/server.py— HTTP surface (CLI backend + agent submissions)athanore/cli.py— theathanorecommandathanore/testing.py—MockAgentfor tests without a real ACP subprocess
Note
dispatch.py, dispatcher/, and main.py are the earlier athanore-based
prototype and are no longer used by this package (its deps were dropped).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file athanore-0.0.9.tar.gz.
File metadata
- Download URL: athanore-0.0.9.tar.gz
- Upload date:
- Size: 50.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8afed266e2eee145d79998086ad12534822b8a1f5a7fb1d4c6d02e6f642c8d60
|
|
| MD5 |
3ee902de31752d26a91ad032f6233de4
|
|
| BLAKE2b-256 |
52b149e399bc18a7ad134e4f8adaddc2089655b46d6693963ac00e34e9cd41e3
|
File details
Details for the file athanore-0.0.9-py3-none-any.whl.
File metadata
- Download URL: athanore-0.0.9-py3-none-any.whl
- Upload date:
- Size: 56.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc85cf25da28f7b08f3aedb9edb766d2f50036af70d9d1fe556ed5912df6d952
|
|
| MD5 |
6b6243799373791953be78854237aec6
|
|
| BLAKE2b-256 |
accb36a44b2f246ff713bd9348e39449e64dd78362d3946188aa981ec8fdbd25
|