Skip to main content

A11

A concurrent action and streaming runtime for building AI agents.

A11 lets you write agents as ordinary async def code: values stream between producers and consumers, work is packaged as composable actions, and the same code runs in one process or across a network with a transport swap. The API is Python; the runtime underneath is a native C++20 implementation, so the streaming and concurrency stay fast and off the event loop's critical path.

📖 Documentation →

Install

pip install "a11-kit[llm]"

The [llm] extra pulls in the Anthropic and Google model SDKs. Drop it for the core runtime only.

See it in 30 seconds

Chat with a model right from the terminal (streaming its reply, and its thoughts with -v):

export GEMINI_API_KEY=...        # or ANTHROPIC_API_KEY
a11 chat -v

The ideas

A11 is small at its core — a few ideas compose into everything from a one-file helper to a fleet of networked agents. (The Principles page goes deeper.)

  • Everything is asynchronous. Every operation that can wait is a coroutine you await; the runtime schedules thousands cooperatively. Completion is an event (await action.done.wait()) and lifecycles are context managers that finalise — or abort with the right status — for you.
  • Everything is a stream. The unit of state is a node: a single ordered sequence of chunks with a writer end and a reader end. An agent rarely has its whole answer at once — it has the next token, frame, or tool call — so nodes make incremental production and consumption the natural shape, with backpressure built in.
  • Actions are wired streams. An action's typed input/output ports are nodes, so calling one is wiring streams together. A handler can emit output before it has finished reading input — exactly what streaming an LLM response through a pipeline looks like.
  • Two extension points: storage and transport. A ChunkStore is the log behind a node (swap the in-memory default for disk, a database, or fault injection); a WireStream moves bytes between peers (in-process, WebSocket, HTTP SSE, WebRTC). Everything above them is unchanged, so making an agent distributed is a transport swap, not a rewrite.
  • Sessions tie it together. A Session multiplexes wire streams, dispatches incoming action calls against a registry, and drains and closes the connection cleanly.

A taste

Produce into a node and read it back — backpressure and finalisation included:

import asyncio
import a11


async def main() -> None:
    async with a11.AsyncNode.create("tokens") as node:   # seals on exit
        for word in ["A11", "streams", "everything"]:
            await node.put(word)                          # await = backpressure

    async for token in node:
        print(token)


asyncio.run(main())

Stream a model's reply through that same node abstraction — interact_with_llm is just an action whose text_output port carries tokens as they arrive:

import a11
from a11.sdk.interact_with_llm import INTERACT_WITH_LLM_SCHEMA, interact_with_llm
from a11.sdk.llm import LlmHeaders

interact = (
    a11.Action(INTERACT_WITH_LLM_SCHEMA)
    .bind_handler(interact_with_llm)
    .set_header(LlmHeaders.PROVIDER.value, "gemini")
    .set_header(LlmHeaders.MODEL.value, "gemini-3.5-flash")
    .run()
)

# ...then, inside your async code, feed the conversation in and stream the reply:
async for chunk in interact["text_output"]:   # tokens as the model emits them
    print(chunk, end="", flush=True)

The guides build these up step by step — from a node, to a WebSocket echo session, to calling an action on a remote server, to a tool-using agent.

Learn more

  • Documentation — principles, guides, and the full Python API reference.
  • Guides — hands-on walkthroughs from a single stream to a networked, tool-using agent.
  • Examples — runnable programs under examples/.

Building the C++ runtime

A11's runtime is a standalone C++20 library you can build and link without Python. The steps below are self-contained; for the editable Python build, wheel matrix, testing workflow, and architecture, see BUILDING.md.

1. Install the build tools and libraries. On macOS with Homebrew:

brew install boost cmake googletest libnghttp2 ninja \
  nlohmann-json openssl@3 pkg-config uvw

You need a C++20 compiler, CMake ≥ 3.28, and Ninja. CMake fetches the pinned Abseil (and libdatachannel, for WebRTC) automatically. On Linux the package names vary; scripts/bootstrap_wheel_deps.sh builds the static dependencies reproducibly (see BUILDING.md).

2. Configure, build, and install to a prefix:

cmake -S . -B build -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DA11_BUILD_PYTHON=OFF \
  -DA11_FETCH_MISSING_DEPS=ON \
  -DCMAKE_INSTALL_PREFIX="$PWD/install"

cmake --build build -j
cmake --install build

3. Use it from your own CMake project. The install exports a CMake package named a11 with per-component targets (a11::service links the whole runtime):

find_package(a11 CONFIG REQUIRED)

add_executable(my_agent main.cc)
target_link_libraries(my_agent PRIVATE a11::service)
target_compile_features(my_agent PRIVATE cxx_std_20)
#include "a11/nodes/node_map.h"

int main() {
  auto node_map = a11::nodes::NodeMap::Create();
  return node_map.ok() ? 0 : 1;
}

Configure your project with -DCMAKE_PREFIX_PATH=/path/to/install so find_package locates it. The generated C++ API reference is published alongside the docs.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

a11_kit-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

a11_kit-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

a11_kit-0.1.4-cp314-cp314-macosx_14_0_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.14macOS 14.0+ x86-64

a11_kit-0.1.4-cp314-cp314-macosx_14_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

a11_kit-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

a11_kit-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

a11_kit-0.1.4-cp313-cp313-macosx_14_0_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.13macOS 14.0+ x86-64

a11_kit-0.1.4-cp313-cp313-macosx_14_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

a11_kit-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

a11_kit-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

a11_kit-0.1.4-cp312-cp312-macosx_14_0_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.12macOS 14.0+ x86-64

a11_kit-0.1.4-cp312-cp312-macosx_14_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

a11_kit-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

a11_kit-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl (7.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

a11_kit-0.1.4-cp311-cp311-macosx_14_0_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.11macOS 14.0+ x86-64

a11_kit-0.1.4-cp311-cp311-macosx_14_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

File details

Details for the file a11_kit-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9b4e2346dd62a56c820d85ebad6cffc181155b2cfc56ce0fc7e5b5a8b322955a
MD5 1f7651d996b0f8305b600d579bc72263
BLAKE2b-256 29caffd3ca3cf225e45c5c67a1e115a45290825e81a819d483dd2ad290e91d36

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0c8a523480805c1463aef76d03a2b56ceafa775fcfc12ef6c29bfa891f500ec7
MD5 ed9ce651337b189914b9c7a8cfc6a751
BLAKE2b-256 c9b82476f426979a2c5f99105c479cc391d9d838654bcebf9c6cac5d889fff59

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp314-cp314-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp314-cp314-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 747ead15ab79ac34d50880373f313f5826ec13f8534630475432a6ce405853cc
MD5 d3bcbcfa415991b9063c307d7afee32b
BLAKE2b-256 859c3c5913c54b2660306c4bf9221031e14e7ae2ea1de64dada9bceac2e2d490

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c740e3ee2e95abc99c0d0181e511aed6cd89c78c877098d96f5fa3cfcef1172a
MD5 817bf9d92d79fd727664bba80efda1db
BLAKE2b-256 a3f6701700299a21e956ddd1ae6fd943c62500530f1817e079eadc0ab9c5c232

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6f76e615b289de60d75952999b6b35511c12a33066b330980326aa09921965a0
MD5 6b297ea1720bede2e162341cd71524ac
BLAKE2b-256 93916f2b7ee2567708b522338f2f34a92da7a31538ce326e98ac3cf2434fb9bd

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 be7cddc542446c963a329a7140b4caed7e1e54f14ddaa90a3e3667f1779b3e02
MD5 f5884cbc6fb357d7b17a3a3f55537686
BLAKE2b-256 04c3e89540ca156c29f9913f317dec00d3e6ca2e37b7047f96524f4a25c0bf03

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp313-cp313-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp313-cp313-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 bc5ee7600918c00877c2819cf46548de1053449f9eaa135b62066b33239533b4
MD5 4adc58f6ceed6369cca20dd51b80633a
BLAKE2b-256 9cb99aa9a5ec51bb82cff599a15b804dac1959a4da7aa8d27262603c0b24da57

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 dc9aa73c3ac0aa78b3dc5d7f5303f1ac74575ca8cd57bc9b49f04c162c5c2bf4
MD5 d3e264b17737004c986f37c445b68fdb
BLAKE2b-256 c3801f64934cd5c318cca3f5090996235c3047255fc537e1eb5195e4de1c566e

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f9ce118ced201e685daf1e465c30870d270618d5267b058a65dea19e503ce760
MD5 d639e2bb1dac3df8e4cce830abd1529b
BLAKE2b-256 f1330c275a022d2531f3c3c20a8ed70408f422b798dc3e149002c123b6bf982a

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a8d1b701722b68e50b00f29a9f08047f4f28cae8c7d01cecc45615dced98a4bc
MD5 33bd80ed167fb28754e3d483fc945bdd
BLAKE2b-256 b2fc38386c416f776639b2edbd3e8bcdb9b6a39eafc2148831e52cb368c6bbf2

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp312-cp312-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp312-cp312-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 dd21a46851741753bf847b2b779512aecd8b373824491209a4f6fa67128d9bd4
MD5 5f79fe0983abdf9325f9d18090185cd0
BLAKE2b-256 61b092b27b8a23ffdda655f07a83de68db366e33c23841a3c1b63833f6c116be

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 56b332e20097147ac4a2fb50f1df95f9334760cd65ba3b9398dd68e800cc9b96
MD5 3a6f10c4a3fe1852e0d2339833c315b2
BLAKE2b-256 e0cd8a8a45225e5662118983180b290b6e63f9d75212dfe54d447e1b2bf55425

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 34f30756e540fc734a9c10766d689ae92fd3507566acbb400ac1c338545df515
MD5 fed680c915f03b4c0898779779233d5a
BLAKE2b-256 46621d2ff7ba59d2ddc8879263ab0372bfdb9284e96fb256619a1fbe8aa40f98

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c9530d71ec9e5f23e5e0863747c1f62274c5b00a880d358bee592ffd86cdd437
MD5 5e28c06f883c031bb5477396340e8bcb
BLAKE2b-256 6340a41534371b9dfe668757d03366ca7e7168c8b049ed5a0c228dbabb39b80b

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp311-cp311-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp311-cp311-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 ad677ec1a3141b5c45d61e03ebf1212b4556cf5a43e6cc298d49c7d259f059da
MD5 db67c2023be4a003233492be000019fb
BLAKE2b-256 d62aa09dc8c63a8fd5efeb391fa8d296b3785019e03ed0ede08f0bf1962c0e13

See more details on using hashes here.

File details

Details for the file a11_kit-0.1.4-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.1.4-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 bf0857e6ce1c12d8a79f6fc8f0f35dba7eab0bdf2ede05731d4783a0868b4710
MD5 6f723b67f6d8673451360d3464f3a6f9
BLAKE2b-256 7737e99e3805a4765b9ee800a4980810a7bc9fe29b026773166fe4660360d529

See more details on using hashes here.

Release history Release notifications | RSS feed

0.5.6

17 files

0.5.5

17 files

0.5.4

17 files

0.5.3

17 files

0.5.2

17 files

0.5.1

17 files

0.5.0

17 files

0.4.6

17 files

0.4.4

17 files

0.4.2

17 files

0.4.1

17 files

0.3.3

17 files

0.3.2

17 files

0.3.1

17 files

0.3.0

17 files

0.2.5

17 files

0.2.3

17 files

0.2.2

17 files

0.2.1

17 files

0.2.0

17 files

0.1.8

17 files

0.1.7

17 files

0.1.6

17 files

0.1.5

16 files

This release

0.1.4 This release

16 files

0.1.3

8 files

0.1.2

8 files

0.1.1

17 files

0.1.0

3 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