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.11.tar.gz (59.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.11-py3-none-any.whl (66.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: athanore-0.0.11.tar.gz
  • Upload date:
  • Size: 59.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.11.tar.gz
Algorithm Hash digest
SHA256 f47197c6b5e07ec2f30f079f17b8a679da728e7a8ea20550d0faaea75db0348c
MD5 2f5d37080b22a2a9e8aec095a64867b9
BLAKE2b-256 86b4e54887618ff8db3f278cb7e8f23f0ceff24c8a76e39dff3050bfd1fa8c18

See more details on using hashes here.

File details

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

File metadata

  • Download URL: athanore-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 66.2 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.11-py3-none-any.whl
Algorithm Hash digest
SHA256 a2f7a5299937acbb4c80459492a14e6db8d282dfa061c1987d5ab3c1207d9197
MD5 de6ed1abf57e7e7abdb36574ee75ca2f
BLAKE2b-256 e95497312f918609437265576f709e3a6dcfef5ef5a38c890976cc932aed5cf8

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

This release

0.0.11 This release

2 files

0.0.10

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