Getting Started with AOF
AOF orchestrates teams of agents the way you would orchestrate teams of people — with org charts, enforced workflows, shared memory, and collaborative task management. It works for any domain: software engineering, RevOps, operations, sales and marketing, research, or any process that needs governance across multiple agents.
This guide walks you through installing AOF, defining your first agent team, and watching the platform orchestrate work across your agents. By the end, you will have a running AOF daemon that automatically routes, assigns, and dispatches tasks through your team.
Prerequisites
Before you begin, make sure you have:
- Node.js >= 22.0.0 (LTS recommended)
- An OpenClaw gateway running on your machine or network
AOF is an OpenClaw plugin. It runs inside the OpenClaw gateway process and uses the gateway to dispatch work to agents. AOF brings org-chart governance, workflow enforcement, and collaborative memory to agent teams running on OpenClaw — turning a collection of individual agents into a coordinated organization.
Tip: Check your Node version with
node --version. If you need to upgrade, use nvm or your system’s package manager.
Installation
Install AOF using the one-line installer:
curl -fsSL https://raw.githubusercontent.com/d0labs/aof/main/scripts/install.sh | shThe installer will:
- Download the latest AOF release tarball
- Extract it to
~/.openclaw/aof/ - Install Node.js dependencies
- Run
aof setupto complete configuration
You can also specify a custom install path or version:
sh install.sh --prefix /custom/path --version 1.0.0First-time Setup
After installation, AOF runs aof setup automatically. If you need to re-run it:
aof setupThe setup command does the following:
- Wizard (interactive) — Asks about your data directory, org chart location, and OpenClaw integration preferences. Use
--autoto accept all defaults. - Directory scaffolding — Creates the AOF data directory structure (tasks, events, views, memory).
- OpenClaw plugin wiring — Registers AOF in your
openclaw.jsongateway config. If OpenClaw is not detected, setup continues with a warning.
# Non-interactive setup with defaultsaof setup --auto --template minimalCreate Your Org Chart
The org chart is a YAML file that defines your agents, teams, and routing rules. It is the single source of truth for “who can do what” in your organization.
Create a file called org-chart.yaml in your AOF data directory:
schemaVersion: 1agents: - id: main name: Main Agent description: General-purpose agent for all tasks capabilities: tags: [general] concurrency: 1 comms: preferred: send fallbacks: [spawn, cli] active: true
teams: - id: default name: Default Team lead: main
routing: []Key fields
| Field | Type | Description |
|---|---|---|
schemaVersion | 1 (literal) | Schema version, always 1 |
agents | array | List of agent definitions |
agents[].id | string | Unique agent identifier (must match OpenClaw agent ID) |
agents[].name | string | Human-readable display name |
agents[].capabilities.tags | string[] | Capability tags used for routing |
agents[].capabilities.concurrency | number | Maximum concurrent tasks (default: 1) |
agents[].comms.preferred | spawn | send | cli | Preferred dispatch method (default: send) |
agents[].active | boolean | Whether the dispatcher considers this agent (default: true) |
teams | array | Team definitions for grouping agents |
routing | array | Tag/priority-based routing rules |
For a complete schema reference, see the Configuration Reference.
Initialize AOF
Once your org chart is ready, initialize AOF:
aof initThe init command:
- Validates your org chart against the schema
- Sets up OpenClaw integration (plugin registration, memory module, skill definition)
- Creates required directory structures
Use --yes for non-interactive mode or --skip-openclaw to skip OpenClaw integration:
aof init --yesStart the Daemon
AOF runs as a background daemon that continuously polls for tasks and dispatches them to agents.
Install and start the daemon
aof daemon installThis writes an OS service file (launchd on macOS, systemd on Linux) and starts the daemon process. The daemon includes:
- A poll loop that scans for pending tasks on a configurable interval
- An HTTP health endpoint on a Unix domain socket
- Crash recovery with PID file locking
Check daemon status
aof daemon statusThis queries the daemon’s health endpoint and displays:
- Whether the daemon is running
- Last poll time and duration
- Task counts by status
- Active leases
# JSON output for scriptingaof daemon status --jsonOther daemon commands
aof daemon stop # Stop the daemon gracefullyaof daemon uninstall # Stop and remove the OS service fileCreate Your First Task
Tasks in AOF are Markdown files with YAML frontmatter. You can create them via the CLI.
First, check which agents are available in your org chart:
aof org showThen create a task routed to one of your agents:
aof task create "Implement user authentication" --priority high --agent <your-agent-id>This creates a task file with the following structure:
---schemaVersion: 1id: TASK-2026-02-27-001project: _inboxtitle: Implement user authenticationstatus: readypriority: highrouting: agent: <your-agent-id> tags: []createdAt: 2026-02-27T12:00:00ZupdatedAt: 2026-02-27T12:00:00ZlastTransitionAt: 2026-02-27T12:00:00ZcreatedBy: clidependsOn: []---Task ID format
Task IDs follow the pattern TASK-YYYY-MM-DD-NNN (e.g., TASK-2026-02-27-001). They are generated automatically and are globally unique within a project.
Task statuses
| Status | Description |
|---|---|
backlog | Created, not yet triaged |
ready | Ready to be picked up by the scheduler |
in-progress | Agent is actively working (has a lease) |
blocked | Waiting on an external dependency |
review | Work complete, awaiting review |
done | Successfully completed |
cancelled | Cancelled by user or system |
deadletter | Failed dispatch 3 times, requires manual intervention |
CLI options for task creation
aof task create <title> [options]
Options: -p, --priority <priority> Priority: low, normal, high, critical (default: normal) -t, --team <team> Target team for routing -a, --agent <agent> Target agent (bypasses routing) --tags <tags> Comma-separated capability tags --project <id> Project ID (default: _inbox)Watch It Dispatch
Once the daemon is running and you have a task in ready status, the scheduler will:
- Scan for ready tasks on each poll cycle
- Match tasks to agents using routing rules and capability tags
- Acquire a lease on the matched task (preventing double-dispatch)
- Dispatch the task to the agent via the OpenClaw gateway
- Track the task through in-progress, review, and done states
Monitor progress
# List all tasks with their current statusaof scan
# Display a Kanban board viewaof board
# View recent events (task transitions, dispatches, lease operations)aof scan --recentExample: watching a task flow
$ aof scanSTATUS COUNT─────────────────────ready 1in-progress 0done 0
$ aof daemon statusDaemon: running (PID 12345)Last poll: 2s ago (42ms)Tasks: 1 ready, 0 in-progress, 0 done
# After the scheduler dispatches your task:$ aof scanSTATUS COUNT─────────────────────ready 0in-progress 1done 0
# After the agent completes the task:$ aof scanSTATUS COUNT─────────────────────ready 0in-progress 0done 1Next Steps
Now that you have AOF running with a dispatched task, explore these topics:
- Configuration Reference — Full org-chart schema, AOF config options, and OpenClaw plugin wiring
- CLI Reference — Complete command reference (auto-generated from source)
- Task Format — Full task frontmatter schema and body conventions
- Workflow DAGs — Define multi-stage review workflows
- Memory Module — Set up semantic memory with HNSW vector search
- Protocols — Inter-agent communication protocols
Troubleshooting
Daemon won’t start
# Check if another instance is runningaof daemon status
# Check for stale PID filels ~/.openclaw/aof/daemon.pid
# Force stop and restartaof daemon stop --forceaof daemon installTask stuck in ready
- Verify the daemon is running:
aof daemon status - Check that the target agent exists in your org chart and is
active: true - Ensure the agent’s
capabilities.tagsmatch the task’srouting.tags - Check for dispatch errors in the event log:
aof scan --recent
OpenClaw integration issues
- Verify OpenClaw is running:
openclaw gateway status - Check plugin registration: look for
"aof"in~/.openclaw/openclaw.jsonunderplugins - Re-run integration:
aof init