Skip to content

Configuration Reference

AOF uses three layers of configuration: the org chart (agent topology and routing), the AOF config (runtime behavior), and the OpenClaw plugin wiring (gateway integration). This document covers all three.


Org Chart (org-chart.yaml)

The org chart is a YAML file that defines agents, teams, organizational units, routing rules, and memory pools. It is the single source of truth for “who can do what” in your AOF deployment.

All org chart changes should go through aof config set or aof config apply for validation and atomic writes. Source: src/schemas/org-chart.ts.

Top-level Fields

FieldTypeRequiredDefaultDescription
schemaVersion1YesSchema version, must be 1
templatestringNoOrg template name (e.g., "swe-team", "ops-team")
agentsAgent[]YesList of agent definitions
teamsTeam[]No[]Team definitions (legacy; use orgUnits for P1.1+)
routingRoutingRule[]No[]Tag/priority-based routing rules (legacy; use relationships for P1.1+)
orgUnitsOrgUnit[]No[]Organizational units (department, team, squad)
groupsOrgGroup[]No[]Cross-cutting agent groups
membershipsOrgMembership[]No[]Agent-to-org-unit memberships
relationshipsOrgRelationship[]No[]Inter-agent relationships (escalation, delegation, etc.)
defaultsOrgDefaultsNoDefault policies and capabilities
memoryPoolsMemoryPoolsNoMemory V2 pool definitions
memoryCurationMemoryCurationNoMemory curation configuration
rolesRecord<string, RoleMapping>NoRole-based agent mapping for DAG workflows
metadataRecord<string, unknown>No{}Arbitrary metadata

Agent Definition (agents[])

Each agent represents a single autonomous entity that can receive and execute tasks.

FieldTypeRequiredDefaultDescription
idstringYesUnique agent ID (must match OpenClaw agent ID)
openclawAgentIdstringNoOpenClaw agent ID (e.g., "agent:main:main"). Used for drift detection
namestringYesHuman-readable display name
descriptionstringNoRole description
teamstringNoTeam membership (legacy, use memberships for P1.1+)
reportsTostringNoReports-to agent ID (legacy)
canDelegatebooleanNofalseWhether this agent can delegate tasks to others
capabilitiesAgentCapabilitiesNo{}Capability tags and concurrency settings
commsAgentCommsNo{}Communication/dispatch preferences
policiesOrgPoliciesNoAgent-specific policy overrides
activebooleanNotrueWhether the dispatcher considers this agent

Agent Capabilities

FieldTypeDefaultDescription
tagsstring[][]Capability tags used for routing (e.g., ["typescript", "backend"])
concurrencynumber1Maximum concurrent tasks this agent can handle
modelstringModel assigned to this agent (informational)
providerstringProvider type (informational, for cost tracking)

Agent Communication Preferences

FieldTypeDefaultDescription
preferred"spawn" | "send" | "cli""send"Preferred dispatch method
sessionKeystringSession key for sessions_send dispatch
fallbacks("spawn" | "send" | "cli")[]["send", "cli"]Fallback methods in priority order

Team Definition (teams[])

FieldTypeRequiredDefaultDescription
idstringYesUnique team identifier
namestringYesHuman-readable team name
descriptionstringNoTeam description
leadstringNoLead agent ID
orchestratorstringNoOrchestrator agent ID (manages tasks and reviews)
technicalLeadstringNoTechnical lead agent ID
murmurMurmurConfigNoOrchestration review configuration
dispatchTeamDispatchConfigNoPer-team dispatch throttling overrides

Team Dispatch Throttling

FieldTypeDefaultDescription
maxConcurrentnumberMaximum concurrent dispatches for this team (overrides global)
minIntervalMsnumberMinimum interval between dispatches in ms (overrides global)

Murmur Orchestration

Murmur triggers orchestration reviews when specific conditions are met.

FieldTypeDescription
triggersMurmurTrigger[]At least one trigger condition
contextstring[]Context to inject: "vision", "roadmap", "taskSummary"

Trigger kinds: "queueEmpty", "completionBatch", "interval", "failureBatch"

Routing Rules (routing[])

Routing rules determine which agent receives a task based on tags and priority.

FieldTypeDefaultDescription
matchTagsstring[][]Match tasks with these capability tags
matchPrioritystring[][]Match tasks with these priorities
targetRolestringRoute to agents with this role
targetTeamstringRoute to this team
targetAgentstringRoute to this specific agent
weightnumber100Rule priority (lower = evaluated first)

Organizational Units (orgUnits[])

P1.1 extension for tree-structured org hierarchy.

FieldTypeRequiredDefaultDescription
idstringYesUnique org unit ID
namestringYesHuman-readable name
typestringYesUnit type (department, team, squad, etc.)
parentIdstringNoParent org unit ID (for tree structure)
descriptionstringNoDescription
leadIdstringNoLead agent ID
activebooleanNotrueWhether this unit is active
metadataRecord<string, unknown>No{}Arbitrary metadata

Relationships (relationships[])

Inter-agent relationships for escalation, delegation, and consultation.

FieldTypeRequiredDefaultDescription
fromAgentIdstringYesSource agent ID
toAgentIdstringYesTarget agent ID
typeenumYes"escalates_to", "delegates_to", "consults_with", or "reports_to"
activebooleanNotrueWhether this relationship is active
metadataRecord<string, unknown>No{}Arbitrary metadata

Role Mapping (roles)

Maps abstract roles to concrete agents for DAG workflows.

FieldTypeRequiredDefaultDescription
agentsstring[]YesAgent IDs that can fulfill this role (at least one)
descriptionstringNoHuman-readable description of responsibilities
requireHumanbooleanNoWhether this role requires human involvement

Memory Pools (memoryPools)

Tiered memory pool definitions for the Memory V2 system.

FieldTypeRequiredDefaultDescription
hotMemoryPoolHotYesHot tier (always indexed)
hot.pathstringYesPath to hot pool root
hot.descriptionstringNoPool description
hot.agentsstring[]NoExplicit agent list (all agents if omitted)
warmMemoryPoolWarm[]YesWarm tier pools (role-scoped)
warm[].idstringYesUnique pool ID
warm[].pathstringYesPath to warm pool root
warm[].rolesstring[]YesRole/agent patterns that include this pool
coldstring[]YesCold tier paths
adapter"filesystem" | "lancedb"No"filesystem"Memory retrieval adapter

Policies

Policies can be set at org-chart defaults level or per-agent.

Memory Policy

FieldTypeDefaultDescription
scopestring[]Memory scope paths (e.g., ["org/engineering", "shared/docs"])
tiers("hot" | "warm" | "cold")[]Allowed memory tiers
readOnlybooleanfalseRead-only access

Tasking Policy

FieldTypeDefaultDescription
maxConcurrentnumber1Maximum concurrent tasks
allowSelfAssignbooleanfalseWhether agent can self-assign tasks
requiresReviewbooleanfalseWhether tasks require review
allowedPrioritiesstring[]Allowed task priorities

Communication Policy

FieldTypeDefaultDescription
allowedChannelsstring[]Allowed communication channels
requiresApprovalbooleanfalseWhether communication requires approval
restrictedAgentsstring[][]Agent IDs that cannot be communicated with

Context Budget Policy

Prevents context rot by limiting how much context an agent receives.

FieldTypeDescription
targetnumberTarget budget in characters (ideal context size)
warnnumberWarning threshold in characters
criticalnumberCritical threshold in characters (must truncate)

Example: Minimal Org Chart

schemaVersion: 1
agents:
- id: main
name: Main Agent
capabilities:
tags: [general]
concurrency: 1
comms:
preferred: send
teams: []
routing: []

Example: Team with Roles

schemaVersion: 1
agents:
- id: swe-backend
name: Backend Engineer
capabilities:
tags: [typescript, nodejs, apis]
concurrency: 2
comms:
preferred: send
- id: swe-frontend
name: Frontend Engineer
capabilities:
tags: [react, css, ui]
concurrency: 1
comms:
preferred: spawn
- id: swe-lead
name: Engineering Lead
capabilities:
tags: [review, architecture]
concurrency: 1
canDelegate: true
teams:
- id: engineering
name: Engineering
lead: swe-lead
roles:
backend:
agents: [swe-backend]
description: Backend implementation
frontend:
agents: [swe-frontend]
description: Frontend implementation
reviewer:
agents: [swe-lead]
description: Code review
routing:
- matchTags: [backend, api]
targetRole: backend
weight: 10
- matchTags: [frontend, ui]
targetRole: frontend
weight: 10

Example: Skill-based Routing

schemaVersion: 1
agents:
- id: agent-alpha
name: Alpha
capabilities:
tags: [python, ml, data]
concurrency: 3
- id: agent-beta
name: Beta
capabilities:
tags: [typescript, nodejs, devops]
concurrency: 2
routing:
- matchTags: [ml, data]
targetAgent: agent-alpha
weight: 1
- matchTags: [devops]
targetAgent: agent-beta
weight: 1
- matchPriority: [critical]
targetAgent: agent-alpha
weight: 0 # highest priority rule

AOF Configuration

AOF runtime configuration controls the scheduler, event logging, metrics, and communication behavior. Source: src/schemas/config.ts.

Top-level Config

FieldTypeDefaultDescription
schemaVersion1Schema version, must be 1
dataDirstring"~/.openclaw/aof"Root data directory for AOF runtime data
orgChartPathstring"org-chart.yaml"Path to org chart YAML file
vaultRootstringRoot directory for vault (Projects/, Resources/)
dispatcherDispatcherConfig{}Scheduler/dispatch settings
metricsMetricsConfig{}Prometheus metrics settings
eventLogEventLogConfig{}Event logging settings
commsCommsConfig{}Communication fallback settings
metadataRecord<string, unknown>{}Arbitrary metadata

Dispatcher Configuration

Controls how the scheduler scans for tasks and dispatches them.

FieldTypeDefaultDescription
intervalMsnumber120000 (2 min)How often the dispatcher scans for pending tasks
defaultLeaseTtlMsnumber600000 (10 min)Default lease TTL for task assignments
maxLeaseRenewalsnumber3Max lease renewals before force-expiry
dryRunbooleanfalseLog decisions without dispatching
maxConcurrentDispatchesnumber3Maximum concurrent dispatches globally
minDispatchIntervalMsnumber0Minimum interval between dispatches (0 = disabled)
maxDispatchesPerPollnumber10Maximum dispatches per poll cycle

Metrics Configuration

FieldTypeDefaultDescription
enabledbooleantrueEnable Prometheus metrics export
portnumber9101Port for the metrics HTTP server
pathstring"/metrics"Metrics endpoint path

Event Log Configuration

FieldTypeDefaultDescription
enabledbooleantrueEnable event logging
maxEventsPerFilenumber10000Max events per log file before rotation
maxFilesnumber30Max total log files to retain

Communication Configuration

Controls how the dispatcher communicates with agents.

FieldTypeDefaultDescription
methodPriority("spawn" | "send" | "cli")[]["send", "spawn", "cli"]Default dispatch method priority
spawnTimeoutMsnumber30000Timeout for spawn attempts
sendTimeoutMsnumber60000Timeout for send attempts
cliTimeoutMsnumber120000Timeout for CLI attempts

OpenClaw Plugin Wiring

AOF registers as an OpenClaw plugin via openclaw.plugin.json. This section covers the plugin manifest and the gateway configuration needed to activate AOF.

Plugin Manifest (openclaw.plugin.json)

The plugin manifest declares AOF’s identity and configuration schema. Source: openclaw.plugin.json.

FieldValueDescription
id"aof"Plugin identifier
name"AOF -- Agentic Ops Fabric"Display name
version"0.1.0"Plugin version
kind"memory"Plugin kind
main"dist/plugin.js"Entry point
configSchemaobjectJSON Schema for plugin config (see below)

Plugin Config Schema

These fields go in the plugins.aof.config section of your openclaw.json:

FieldTypeDefaultDescription
dataDirstring"~/.openclaw/aof"AOF state directory
pollIntervalMsnumber30000Scheduler poll interval in milliseconds
defaultLeaseTtlMsnumber300000Default task lease TTL in milliseconds
dryRunbooleanfalseIf true, scheduler observes but does not dispatch
gatewayUrlstringauto-detectedOpenClaw gateway URL for HTTP dispatch
gatewayTokenstringauto-detectedGateway authentication token
heartbeatTtlMsnumber300000Heartbeat TTL in milliseconds
maxConcurrentDispatchesnumber3Maximum concurrent dispatched tasks (1-50)
modulesobjectModule enable/disable flags
modules.memory.enabledbooleantrueEnable memory module
modules.dispatch.enabledbooleantrueEnable dispatch module
modules.murmur.enabledbooleantrueEnable murmur orchestration module
modules.linter.enabledbooleantrueEnable linter module
memoryobjectMemory subsystem configuration
memory.embedding.provider"openai" | "ollama"Embedding provider
memory.embedding.modelstringEmbedding model name
memory.embedding.baseUrlstringEmbedding API base URL
memory.embedding.apiKeystringEmbedding API key
memory.embedding.dimensionsnumberEmbedding dimensions
memory.search.hybridEnabledbooleantrueEnable hybrid search (vector + BM25)
memory.search.vectorWeightnumber0.7Vector search weight (0-1)
memory.search.bm25Weightnumber0.3BM25 search weight (0-1)
memory.search.maxResultsnumber10Maximum search results
memory.search.tierBoost.hotnumber1.0Score boost for hot tier results
memory.search.tierBoost.warmnumber0.8Score boost for warm tier results
memory.search.tierBoost.coldnumber0.5Score boost for cold tier results
memory.indexPathsstring[]Additional paths to index

Gateway Configuration Example

To enable AOF in your OpenClaw gateway, add it to the plugins section of ~/.openclaw/openclaw.json:

{
"plugins": {
"aof": {
"enabled": true,
"config": {
"dataDir": "~/.openclaw/aof",
"pollIntervalMs": 30000,
"maxConcurrentDispatches": 3,
"modules": {
"memory": { "enabled": true },
"dispatch": { "enabled": true }
},
"memory": {
"embedding": {
"provider": "openai",
"model": "text-embedding-3-small",
"dimensions": 1536
},
"search": {
"hybridEnabled": true,
"vectorWeight": 0.7,
"bm25Weight": 0.3
}
}
}
}
}
}

Note: gatewayUrl and gatewayToken are auto-detected from the OpenClaw runtime context. Only set them explicitly if auto-detection fails.

Managing Config via CLI

AOF provides CLI commands for org chart configuration management:

Terminal window
# Get a config value (dot-notation)
aof config get agents.swe-backend.active
# Set a config value (validates + atomic write)
aof config set agents.swe-backend.active true
# Preview a change without applying
aof config set agents.swe-backend.active false --dry-run
# Validate the entire org chart
aof org validate

All changes through aof config set are validated against the Zod schema and checked for referential integrity before being written atomically (write to temp file, validate, rename).