AACWorkflow Docs

Runtime Capability Registry

Understand runtime capabilities and how AACWorkflow routes agents to appropriate runtimes based on features they support.

The runtime capability registry is a structured database of what each runtime can do — which AI providers it supports, which operating systems it runs on, which MCP tools it has access to, and whether it supports advanced features like skill imports and task resumption.

Why capabilities matter

When you assign an agent a task, AACWorkflow needs to know:

  • Which runtimes can run this agent? — A daemon running on macOS can't execute Docker tasks
  • Which AI providers are available? — Some runtimes have Claude, others have both Claude and Cursor
  • Which MCP tools are connected? — A GitHub-connected runtime can talk to GitHub; one without it cannot
  • Can the runtime resume tasks? — For long-running tasks, some runtimes support resuming from a checkpoint

The capability registry answers all these questions automatically.

Viewing runtime capabilities

Via the UI

  1. Go to Settings → Runtimes
  2. Click on a runtime to see its detail page
  3. Scroll to Capabilities section

You'll see:

  • OS and architecture — Linux x86_64, macOS ARM64, etc.
  • Executor type — host (direct process) or docker (containerized)
  • AI providers — which providers are installed (Claude, Codex, Cursor, etc.)
  • Model selection — whether the provider supports model choice
  • MCP transports — how the runtime communicates with MCP servers (stdio, SSE, HTTP)
  • Advanced features — resume support, skill imports, etc.

Via the API

Runtime capabilities are also available in the API response for /workspaces/{ws}/runtimes/{id}:

{
  "id": "runtime-123",
  "name": "My macOS daemon",
  "capabilities": {
    "schema_version": 1,
    "os": "macos",
    "arch": "arm64",
    "executor": "host",
    "providers": [
      {
        "provider": "claude",
        "cli_version": "1.2.3",
        "model_selection": true,
        "models": ["claude-opus-4", "claude-sonnet-4"]
      }
    ],
    "mcp_transports": ["stdio", "sse"],
    "supports_resume": true,
    "supports_skill_path": true,
    "labels": ["macos", "arm64", "claude", "mcp-stdio"]
  }
}

Understanding capability fields

OS and architecture

  • OSmacos, linux, or windows
  • Archarm64, amd64 (x86-64), arm, or 386

This matters if your agent needs to run OS-specific scripts or tools.

Executor type

  • host — tasks run directly on the daemon's OS with full access
  • docker — tasks run in a containerized environment, more isolated

Docker runtimes are useful for sandboxing untrusted code or ensuring reproducibility.

Providers

Each provider entry shows:

  • Provider nameclaude, codex, cursor, etc.
  • CLI version — the version of the AI tool installed
  • Model selection — whether the daemon supports choosing a specific model
  • Models list — which models are available (if known)

If an agent is configured to use a specific model, AACWorkflow checks this list to ensure the runtime supports it.

MCP transports

MCP (Model Context Protocol) supports multiple transport mechanisms:

  • stdio — communication via standard input/output (default, local)
  • sse — Server-Sent Events (HTTP streaming)
  • http — direct HTTP requests

A runtime with only stdio support can only connect to stdio-based MCP servers; it cannot use HTTP-based remote MCP servers.

Advanced features

  • Resume support — can the runtime pause and resume long-running tasks?
  • Skill path support — can the runtime load skills from local file paths in addition to the database?

Routing based on capabilities

When you assign an agent a task, AACWorkflow's router uses capabilities to find a suitable runtime:

  1. Filter by provider — select runtimes that support the agent's configured AI provider
  2. Filter by labels — if you've assigned labels to a task or runtime, match them
  3. Filter by OS — if the task requires a specific OS, filter accordingly
  4. Check advanced requirements — verify resume, skill imports, MCP transports
  5. Pick the best match — prefer runtimes with the most spare capacity

If no runtime matches, the task is queued and waits for a suitable runtime to come online.

See Runtime labels and routing for more details on custom routing.

Labels and routing

Capabilities include a labels field — a derived set of searchable tags that the routing engine uses:

  • macos, linux, windows — OS
  • arm64, amd64 — architecture
  • claude, codex, cursor — providers
  • mcp-stdio, mcp-sse, mcp-http — MCP transports
  • Custom labels you assign via runtime labels

Use labels in task assignments:

assign @agent-name with label="macos" 
  because task requires macOS-specific tools

The router will then direct the task to a macOS runtime.

Updating capabilities

Capabilities are automatically detected when a daemon starts and on each heartbeat. You don't manually update them.

To refresh capabilities:

  • Reboot the daemon — next start refreshes all capabilities
  • Reconnect the daemon — stop and restart the daemon
  • Wait for heartbeat — heartbeats occur every 30 seconds, so changes are picked up quickly

If you install a new provider (e.g., install the Cursor CLI) on a running daemon:

  1. Stop the daemon
  2. Install the provider
  3. Restart the daemon

On the next heartbeat, the new provider appears in capabilities.

Fallback behavior

If a runtime's capabilities are incomplete or malformed:

  • AACWorkflow degrades gracefully and treats unknown capabilities as "not supported"
  • The runtime still appears in the UI and is available for manual assignment
  • Automatic routing simply treats it as having fewer capabilities
  • No crashes or white-screen errors occur

This ensures backward compatibility with older daemons that may not send the full capability structure.

Best practices

  • Check capabilities before assigning — if you need a specific OS or provider, verify the runtime has it
  • Use labels for complex routing — if you have many runtimes, tag them with labels and include label requirements in task assignments
  • Keep daemons updated — newer daemon versions support more capabilities
  • Monitor for unsupported tasks — check your task queue for jobs waiting for non-existent runtimes

Next steps