AgentLane is an open-source Python runtime for systems of agents with distinct responsibilities. Agents exchange work through addressed messages, across harnesses, processes, and machines.
> Identity, messaging, state, delegation, and execution. The model, interface, and infrastructure are application choices.
An organization divides work among participants with different responsibilities. A coordinator assigns tasks. Specialists investigate or implement. Services perform deterministic operations. People review decisions that require their authority.
AgentLane applies that structure to agent systems. Each agent has an identity, an address, an inbox, and state of its own. Some agents hold ongoing responsibilities; others exist for one assignment. They communicate through explicit messages and return results to whoever requested the work.
The goal is an organization whose participants can use different models, harnesses, and infrastructure. A local assistant, a cloud worker, and an external coding agent can contribute to the same system. AgentLane provides the common primitives; the application defines how the organization operates.
The runtime supports local harnesses, distributed services, bots, and organizations of agents. The interface, deployment, model provider, and telemetry destination are independent choices.
Agents with ongoing responsibilities, temporary specialists, and deterministic services connected through addressed messages. Work can be delegated across runtimes, with results returned to the agent that requested it.
The application defines objectives, tools, permissions, and human review.
A terminal or desktop application with a TypeScript interface and a Python agent backend. The process bridge carries prompts, streamed text, tool activity, plans, and approval requests between them.
The application owns the interface, model configuration, and local process.
Agents and specialist workers running in your own cloud. The runtime handles addressed delivery and worker routing; tracing processors export spans and metrics to your telemetry systems.
Local and distributed runtimes use the same communication model.
An assistant behind a chat interface, a webhook, or an application API. Incoming requests can reach an addressed agent, which can call tools, delegate work, and return results through the application.
Channel integrations and application behavior are defined in your code.
Two Markdown definitions, bound to a distributed runtime. The coordinator delegates to the analyst as an addressed agent and uses the returned result in its own response.
Python 3.12, with OPENAI_API_KEY set in the environment.
---name: coordinatordescription: Coordinates release reviews.---Delegate risk analysis to the analyst.Use its findings to summarize the review.
```
```markdownanalyst.md
---name: analystdescription: Reviews release plans for risks.model: inherit---Identify failure cases and missing checks.Return a short analysis to the coordinator.
AgentLane includes a complete agent harness that you can use out of the box to build powerful agents. It brings together model calls, tools, streaming, state, skills, and delegation, and manages the execution loop for you.
The runtime connects these agents and routes work between them. It can also route work to another harness or a deterministic service. Your AgentLane agents can delegate work to those participants and use the results in their own runs.
### Delegate work to Claude Code or another harness
An AgentLane agent can delegate a task to the Claude Agent SDK and use the returned text in its own run. The adapter binds Claude to an AgentLane address; the result comes back through the delivery call.
Each addressed message starts a fresh SDK session. SDK options configure tools and execution limits. Other harnesses can be integrated through the same Task abstraction; additional adapters are planned.
Install the optional Claude integration and authenticate Claude Code before you run this example. See the complete coworker example below for setup steps.
$uv add "agentlane[claude-agent-sdk]"
```pythonExisting runtime + lead agent
from agentlane_claude_agent_sdk import ClaudeAgentfrom agentlane.messaging import AgentId, DeliveryStatusclaude = AgentId.from_values("claude-sdk", "analyst")ClaudeAgent.bind(runtime, claude)outcome = await runtime.send_message( "Review this plan for missing rollback steps.", sender=lead.agent_id, recipient=claude,)if outcome.status != DeliveryStatus.DELIVERED: raise RuntimeError("Claude task failed")result = await lead.run( f"Summarize this review: {outcome.response_payload}")