A11¶
A11 connects model calls, application tools, storage, and user interfaces through actions and streams. The open-source runtime supports Python, TypeScript, and C++.
An agent can use the included model actions, expose application functions as tools, keep conversation state in ordinary application data, and compose work at runtime with Flow. The same action can run beside the agent, on a GPU host, or in the browser that owns the state it needs to change.
The runtime also serves GPU models, streams speech-recognition captions, feeds decoded records into indexing pipelines, and reports diffusion progress before returning an image. These systems use the same typed operations and streams without an agent loop.
If A11 is new to you, start with an action: an asynchronous operation whose inputs and outputs have names. Each input and output is a node, an ordered stream that may carry one value or many. This lets a caller display text, process records, or report progress while the action is still running.
An action keeps the same contract when it becomes an LLM tool or moves to another process. Storage and transport are separate choices, and Flow is available when several actions need a reusable or runtime-defined composition. Applications can begin with local calls and add these pieces as their deployment and reliability needs grow.
Try the live research agent Install A11 Star the project Join a discussion
Choose what you want to build¶
The examples page groups the remaining guides by task, including persistent chat, browser-hosted tools, parallel research, local models, and distributed streams.
Research-agent composition¶
The deep-research agent exposes one
deep-research action to a browser. Its Python handler asks a model to plan the
topic, starts several investigations with an asyncio concurrency limit, and
keeps their reports local. A final model action synthesizes those findings while
its report streams to the caller.
The browser receives the plan, action log, and final report. Larger intermediate reports remain on the backend. The implementation uses ordinary Python control flow for bounded parallel work and streams progress through action ports.
A stream in one minute¶
An AsyncNode is an ordered stream. A producer writes values and finalizes the
stream; a reader can process each value as it arrives.
import asyncio
import a11
async def main() -> None:
node = a11.AsyncNode.create("greeting")
await node.put("hello")
await node.finalize("world")
async for value in node:
print(value)
asyncio.run(main())
Action inputs and outputs use these same streams. A handler can therefore emit progress or partial output before it has finished, and its caller can begin processing that output immediately.
Core interfaces¶
- An action is a named operation with described inputs and outputs.
- Each input or output is a node, so a single value and a live stream use the same interface.
- A session carries action calls and node data between peers. Local handlers use the same action contract as remote handlers.
- A store controls how long node data remains available. A transport carries that data between peers.
- A registry makes actions discoverable and supplies their handlers. A per-turn allow-list controls which registered actions a model may call.
- A flow connects actions when a composition should be checked, shared, or supplied at runtime. It resolves against the actions available to its host; ordinary action calls remain sufficient elsewhere.
The same primitives cover common agent application needs:
- show progress separately from a finished image;
- continue a recorded conversation after a reload;
- let a model operate on state inside a web page;
- investigate several research questions concurrently;
- exchange durable streams without a direct connection.
They also cover APIs and pipelines that contain no agent:
- return protocol fields while an HTTP body is arriving;
- serve image generation with separate progress and result ports;
- run a model in a browser through the same interaction ports;
- compose speech capture, transcription, and generation at runtime.
Understand the design¶
A11 design explains the streaming model, local and remote execution, storage choices, and lifecycle boundaries. The lifecycle articles then show exactly when a node, action, session, or connection is complete.
API references¶
If an example is unclear or fails in your environment, report the friction. If A11 is part of a project, share the integration. Public documentation analytics are described in Analytics and privacy.