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.10.tar.gz (52.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.10-py3-none-any.whl (58.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: athanore-0.0.10.tar.gz
  • Upload date:
  • Size: 52.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.10.tar.gz
Algorithm Hash digest
SHA256 b306cb3b745110dfa6b43802a549e369ca7e117fa0447d897af2c833e7dc6850
MD5 325e09136ee55c3f06b19e6ba0ae7c1f
BLAKE2b-256 b62f6b9687dd2e6a84b5251b5e4f0822e66320aa0c63d273fbd9626d5bb4122a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: athanore-0.0.10-py3-none-any.whl
  • Upload date:
  • Size: 58.6 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.10-py3-none-any.whl
Algorithm Hash digest
SHA256 3078b520f29f46b08ee55dfa15e6f4055d8320fc0c13fd181114c230ca4e6071
MD5 c58b301b6c084013e14ec811fcb81f39
BLAKE2b-256 d37ae52380d5627afaff77c3f6a054fa32956aef1922b48e00d23e89030940d9

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.1

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.0.12

2 files

0.0.11

2 files

This release

0.0.10 This release

2 files

0.0.9

2 files

0.0.7

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page