What AXL is

AXL is a platform for building agents that do real work on your behalf - answering from your documents, calling your systems, running multi-step processes - and that stay inside boundaries you define rather than boundaries you hope the model respects.

It is written in Rust and runs as a server - one instance on a laptop, or a fleet of identical instances behind a load balancer. You describe agents in configuration files, not in code, and the server loads them. That choice shapes almost everything else about the platform: an agent is a directory you can review, diff, sign, and roll back, and changing what an agent can do is a configuration change rather than a deploy of new code.

The loop at the centre

Every agent runs the same loop. The model receives your request plus whatever context the agent is configured to bring - conversation history, retrieved documents, long-term memory, loaded skills. It replies, and if that reply asks for tools, AXL runs them, feeds the results back, and lets the model continue. The cycle repeats until the model answers or a limit stops it.

This pattern is usually called ReAct: reason, act, observe, repeat. Most of what AXL adds sits around that loop rather than inside it.

  • Safety limits bound the loop itself - a maximum number of iterations, a token and cost budget, and a loop guard that notices when an agent calls the same tool with the same arguments over and over.
  • Autonomy decides whether an action runs at all. Each agent declares a level, and require_approval means a person confirms before the action happens.
  • Middleware wraps the loop in layers. Caching, approval gating, write caps, model routing, and telemetry are all middleware, and each agent enables only the ones it needs.
  • The shield sits below everything, scrubbing secrets and fencing untrusted content before it reaches the model and before output reaches you.

A control plane

Most agent frameworks are libraries inside one process. AXL is a horizontally scalable control plane: every instance is identical and stateless, all state lives in shared storage, and any instance can serve any request. Scaling is starting more instances.

The same design makes work durable. A workflow started on one instance finishes on another if the first dies. A streaming client can reconnect to any instance and resume.

What you compose

You compose three things.

What it isReach for it when
AgentOne model-driven loop with tools, knowledge, and memoryA single capable worker can own the task
WorkflowA durable graph of steps, authored in the AXG languageThe sequence matters, must survive restarts, and must not run twice
SurfaceHow people and systems reach an agentYou need it in Slack, on the phone, behind an API, or callable by another company's agent

An agent is the unit you configure. A workflow orchestrates agents - and tools, and other workflows - when you need branches, loops, parallelism, and exactly-once execution that outlives a process restart. A surface is how the work gets requested: the HTTP API, a chat channel, a voice session, a schedule, or an open protocol like A2A or MCP.

Most projects start with one agent and never need more. Add a workflow when you find yourself wishing the model were less free to improvise about the order of things.

What you can attach to an agent

Everything below is optional. Start with an identity and a model, then add one capability at a time and confirm it behaves before adding the next.

Knowledge and context

CapabilityWhat it gives the agentGuide
ModelsA default model per fleet, overridable per agent, across Anthropic, OpenAI, OpenAI-compatible, and BedrockChoose a model
RAGAnswers grounded in document sets you ingest and versionAdd RAG
MemoryPreferences, decisions, and facts that survive across conversationsGive an agent memory
Context and compactionLong conversations kept inside the model's context windowManage long conversations
SkillsInstructions and reference material loaded only when relevantAdd reusable skills
ImagesPictures from users and from tools, on models that support themWork with images

Doing things

CapabilityWhat it gives the agentGuide
Built-in toolsWeb fetch, memory, blobs, media, cron, browser, Microsoft GraphUse built-in tools
MCPTools from any external MCP server, with per-user auth when neededConnect an MCP server
SandboxesA workspace where the agent can run commands and edit filesChoose a sandbox
SubagentsBounded delegation to specialist agentsDelegate to subagents
FilesUploads in, downloadable artifacts outWork with files
WorkbenchRepository work driven by a test gate, ending in a pull requestRun coding work

Control and safety

CapabilityWhat it gives youGuide
Intent and autonomyAn explicit contract: objective, constraints, stop rules, and how much the agent may do aloneCreate your first agent
MiddlewareCaching, approval gating, write caps, model routing, dry runsMiddleware
ShieldSecret scrubbing, PII redaction, prompt-injection defenseConfigure the shield
AuthenticationJWTs, federated identity, and API keys on every routeAuthenticate callers
SigningVerified agents, skills, and document setsVerify configuration content

Reaching your agent

SurfaceUse it forGuide
HTTP APICalling AXL from your own application
ChannelsSlack, Discord, Telegram, Teams, WhatsApp, Signal, iMessageConnect messaging channels
VoiceReal-time speech in and speech outAdd real-time voice
SchedulesRecurring agent jobs and workflowsRun recurring work
A2A and MCPOther agent systems discovering and delegating to yoursConnect to other agent systems

Knowing it works

CapabilityWhat it gives youGuide
ObservabilityTraces, tool audit entries, latency, and cost per runObserve runs
EvaluationsOffline datasets before release, sampled scoring in productionEvaluate agent quality
TasksStatus and cancellation for asynchronous workTrack asynchronous tasks

A workflow, to make it concrete

Workflows are written in AXG, a small language purpose-built for this. Here is a complete, runnable one:

axg 1
workflow hello {
  input name
  greet = agent greeter:
    "Write a one-line friendly greeting for {{ input.name }}."
  greet -> return {
    greeting: greet.response
  }
}

It declares an input, hands it to an agent, and returns the answer. Submit it and you get a run id back immediately; the engine drives the run to completion in the background, across restarts and across server instances.

The AXG source compiles to a three-node DAG.Drag to pan · scroll to zoom

Where to go next

On this page