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.9.tar.gz (50.5 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.9-py3-none-any.whl (56.8 kB view details)

Uploaded Python 3

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

Hashes for athanore-0.0.9.tar.gz
Algorithm Hash digest
SHA256 8afed266e2eee145d79998086ad12534822b8a1f5a7fb1d4c6d02e6f642c8d60
MD5 3ee902de31752d26a91ad032f6233de4
BLAKE2b-256 52b149e399bc18a7ad134e4f8adaddc2089655b46d6693963ac00e34e9cd41e3

See more details on using hashes here.

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

Hashes for athanore-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 cc85cf25da28f7b08f3aedb9edb766d2f50036af70d9d1fe556ed5912df6d952
MD5 6b6243799373791953be78854237aec6
BLAKE2b-256 accb36a44b2f246ff713bd9348e39449e64dd78362d3946188aa981ec8fdbd25

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.9 This release

2 files

0.0.7

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