Architecture¶
All runtime entry points assemble Raven through the same Assembly Root:
raven/core/runtime.py:build_runtime. Configuration and plugin contributions
determine the components in each runtime Generation. The Spine schedules turns
for the Agent Loop and delivers the resulting events.
Surface, runtime, execution, and state¶
The table below follows requests from each interface to execution and storage. These are responsibilities, not additional package layers.
| Surface | Runtime entry | Execution | State owner |
|---|---|---|---|
| WebUI / TUI | Shared RPC and Spine | Host Agent Loop | Host sessions and Agent home |
| Messaging platform | Adapter, Intake, Gateway / Spine | Host loop and its permitted delegations | Channel/chat conversation; adapter account state |
| Editor / local ACP host | ACP server and RPC stack | Raven served as an agent | Server's ACP sessions and configured home |
| Inbound A2A peer | Authenticated HTTP, one-shot turn adapter | Host Agent Loop | In-memory A2A task store plus runtime session records |
| Host delegation | Roster and sub-agent manager | Built-in, ACP, CLI, or HTTP backend | Host call history plus backend-owned session state |
| Outbound A2A call | Card discovery and A2A client | Independently operated peer | Remote task lifecycle |
Memory and SkillForge provide context; plugins add runtime capabilities. DAGs coordinate agents in the local roster. They do not provide a durable, distributed task queue.
For setup use Using Raven, Agent Integrations, and Channels and Messaging. Developers should begin with Building an Agent or Protocol and Backend Integration.
How a turn reaches the Agent Loop¶
Requests arrive through several interfaces. The Spine coordinates turn scheduling across them, while the following components handle execution, context, and delegation.
| Component | Input | Role |
|---|---|---|
| Entrances | Requests from the WebUI, TUI, external ACP hosts, CLI, messaging channels, and proactive triggers | Route work through RPC, ACP, the Gateway, or directly to the Spine |
| Spine | Submitted turns | Schedule the Agent Loop and deliver events |
| Agent Loop | A scheduled turn | Coordinate Harness Modules, tools, and delegation |
| Harness Modules | Memory, Planning, Capability, and Action requests | Provide strategies for context assembly, planning, tool selection, and model responses |
| Context Engine | Context available to a turn | Assemble context using the Memory Engine and SkillForge |
| Memory and skills | Memory and skill requests | Retrieve from the EverOS plugin, local skill libraries, and SkillHub |
| Delegation | A subagent or playbook call | Dispatch work to built-in, ACP, CLI, or OpenAI-compatible backends |
The WebUI and the React/Ink TUI share one contract, rpc-schema/openrpc.json.
The ACP server connects external hosts to Raven's RPC stack; the ACP client
lets Raven invoke other agents. CLI tasks, messaging channels, and proactive
triggers also submit work through the Spine.
Protocol faces and orchestration¶
| Face | Boundary | Lifecycle | Main use |
|---|---|---|---|
| ACP server | Local process and stdio | Session and turn | An editor or local host runs Raven |
| ACP client | Child agent process | Session and turn | Raven delegates to a local agent |
| A2A server | HTTP peer with bearer authentication | Task and event stream | A remote agent calls Raven |
| A2A client | Remote origin with optional configured credentials | Card, task, response | Raven calls an independent peer |
| RPC | Raven UI or control client | Connection and session | WebUI, TUI, control-plane operations |
These interfaces reach the Agent Loop but do not share authentication or wire semantics. Inbound A2A currently uses a one-shot Agent Loop path directly, rather than the Spine scheduler and delivery path used by interactive turns. Its task state is not a durable scheduling queue.
run_subagent_dag defines task dependencies and coordinates local execution;
A2A handles communication with independently operated peers.
Read Agent protocols, DAG orchestration,
and Permissions and security before integrating these surfaces.
What the boundaries guarantee¶
- Modular execution. The Agent Loop owns turn state, tool execution, persistence, and event ordering. Its four Harness Modules provide replaceable memory, planning, capability selection, and model-response behaviour; hooks and tools add domain-specific capabilities.
- Agent and plugin composition. Definitions in
agents/combine the installed runtime with agent-specific configuration and plugins to expose agents over ACP.plugins-dist/contains the EverOS memory, visual design, and PowerPoint engines as separate distributions. - Kernel boundaries.
spine/,contracts/,tracing/andhome.pyform the standalone Kernel. Inner runtime packages do not import the CLI, RPC or ACP interfaces. Import contracts enforce these boundaries. - Harness self-evolution.
evolver/diagnoses runs and evaluates candidate harness changes against benchmarks. This separate tool uses Raven as a library. The runtime does not import Evolver or repository-level agent definitions.
See Repo Layout for the directories and packages associated with each component.
Core systems¶
These components support Raven's core capabilities:
| System | Capability |
|---|---|
| Agent Orchestration | Coordinates agents, manages task dependencies and parallel execution, and turns multi-step collaboration into reusable workflows. |
| Evolver | Diagnoses failures, evaluates candidate harness changes, and records promotion decisions and statistical evidence separately. |
| EverOS Memory | Preserves user context, agent experience, and world knowledge across sessions, recalling relevant memories and reusable skills for future tasks. |
| SkillForge | Retrieves relevant skills from configured local libraries, the memory backend, and SkillHub. Available content depends on those sources. |
| Proactivity | Uses Sentinel and scheduled triggers to decide when to send reminders or start follow-up work, subject to configuration and policy. |
Skills, memory, MCP, plugins, playbooks, and specialized agents have different extension boundaries. Use Skills and extensions to choose one and understand what is implemented versus what requires another service.
Where the canonical definitions live¶
The repository maintains canonical definitions alongside the implementation:
CONTEXT-MAP.mdidentifies the context file for each subsystem.CONTEXT.mddefines runtime terms and assigns packages to layers (Layer Seats).pyproject.tomldefines the import contracts that enforce Kernel boundaries.