Skip to main content

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

  1. The signature is the graph. Positional parameters are edges; a keyword-only parameter after * is the optional payload. Exactly one node is start=True.
  2. 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.
  3. 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, generations
  • athanore/store.py — sqlite store (runs, tasks, submissions, events)
  • athanore/scheduler.py — priority dispatch loop, retries, recovery
  • athanore/agents.pyAthanoreACPAgent facade (ACP Python SDK)
  • athanore/server.py — HTTP surface (CLI backend + agent submissions)
  • athanore/cli.py — the athanore command
  • athanore/testing.pyMockAgent for 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

athanore-0.0.7.tar.gz (46.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

athanore-0.0.7-py3-none-any.whl (52.0 kB view details)

Uploaded Python 3

File details

Details for the file athanore-0.0.7.tar.gz.

File metadata

  • Download URL: athanore-0.0.7.tar.gz
  • Upload date:
  • Size: 46.2 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

Hashes for athanore-0.0.7.tar.gz
Algorithm Hash digest
SHA256 b5626c3ec267f93473036ac9fef687aaa33691c06ba5cc8e9d13dad7ce35ad98
MD5 66bd2798bd796da87b6b559eb5c41cbb
BLAKE2b-256 fb2977b8d9e6a150ee6f6dbca102ad30a442bb4968da771c597f0b6fa413ae53

See more details on using hashes here.

File details

Details for the file athanore-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: athanore-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 52.0 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

Hashes for athanore-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 454f91e6d4d5a29cf32177fb1eebe966142e63f527be8c9a411cb72718710a3f
MD5 493760551a4b31649c106ff44c107a9d
BLAKE2b-256 3afa11804b84f21494a6c9b94ac963be1b01160b5256d246d975042f5d036dda

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.9

2 files

This release

0.0.7 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page