Skip to content

Agents, teams & swarms

The agent identity model, delegate sub-agents, swarms, and team topologies for multi-agent orchestration.

Revka is multi-agent from the ground up. Your primary agent can hand work to specialized sub-agents, run several of them as a coordinated swarm, or spawn whole teams of agents that report to one another over a dependency graph. This page explains the agent identity model and the three orchestration layers, so you can pick the right one for a task.

There are two distinct surfaces, and it helps to keep them straight:

  • Config-level orchestration[agents.<name>] sub-agents and [swarms.<name>] swarms, driven by the built-in delegate and swarm tools. Lightweight, defined in config.toml, available to any agent.
  • Operator-level orchestration — the Agent Template Pool and Agent Teams, managed by the Operator MCP and stored in Kumiho graph memory. Persistent, graph-backed, with trust scoring and wave execution.

Use config-level orchestration for fast, declarative fan-out inside a single chat. Use teams when you need durable, reusable agent rosters with explicit topology. For the patterns that string agents together (review-fix loops, handoffs, group chat, supervisor delegation, map-reduce), see Spawning & coordinating agents.

Every Revka agent has an identity made of a few first-class fields. The primary agent draws its identity from SOUL.md and the [identity] config section; sub-agents and pooled agents carry the same shape so behavior is consistent wherever an agent runs.

FieldMeaning
identityWho the agent is — its name, role, and remit.
soulPersona, values, and voice that shape how it responds.
expertiseThe domains it is good at (e.g. ["Rust", "async"]).
toneCommunication style (e.g. direct, friendly).
roleFunctional slot: coder, reviewer, researcher, tester, architect, or planner.
modelPreferred provider/model for instantiating the agent.
system_hintOptional extra system-prompt guidance.

The [identity] config section controls the format of the identity document injected into the primary agent’s system prompt:

[identity]
format = "aieos" # "openclaw" or "aieos"
aieos_path = "identity.json" # workspace-relative
# or: aieos_inline = '{"name": "Revka", ...}'

Pooled and dashboard-managed agents store the same identity/soul/expertise/tone fields in Kumiho. See the Agent Template Pool and Agent Teams sections below for how those fields are persisted and reused.

A delegate sub-agent is a named agent defined in config.toml that your primary agent can hand a subtask to with the delegate tool. Each sub-agent has its own provider, model, system prompt, and — in agentic mode — its own tool allowlist.

[agents.researcher]
provider = "openrouter"
model = "anthropic/claude-sonnet-4-6"
system_prompt = "You are a research assistant."
max_depth = 2
agentic = true
allowed_tools = ["web_search", "http_request", "file_read"]
max_iterations = 8
agentic_timeout_secs = 600
[agents.coder]
provider = "ollama"
model = "qwen2.5-coder:32b"
temperature = 0.2
timeout_secs = 60
[agents.code_reviewer]
provider = "anthropic"
model = "claude-opus-4-5"
system_prompt = "You are an expert code reviewer focused on security and performance."
agentic = true
allowed_tools = ["file_read", "shell"]
skills_directory = "skills/code-review"
KeyTypeDefaultMeaning
providerstringrequiredProvider name (anthropic, openrouter, ollama, …).
modelstringrequiredModel for the sub-agent.
system_promptstringunsetSystem-prompt override.
api_keystringunsetAPI key override (encrypted when secrets.encrypt = true).
temperaturefloatunsetTemperature override.
max_depthint3Max recursion depth for nested delegation.
agenticboolfalseEnable the multi-turn tool-call loop.
allowed_toolsarray[]Tool allowlist for agentic mode.
max_iterationsint10Max tool-call iterations in agentic mode.
timeout_secsint120Timeout for non-agentic calls (1–3600).
agentic_timeout_secsint300Timeout for agentic loops (1–3600).
skills_directorystringunsetWorkspace-relative skills dir for scoped skill loading.

Global delegate defaults live in their own section and apply to any sub-agent that does not set its own timeouts:

[delegate]
timeout_secs = 120 # non-agentic calls
agentic_timeout_secs = 300 # agentic loops

In agentic mode a sub-agent receives an enriched system prompt — its allowed tools and their parameters, a skills section (from skills_directory or the default workspace skills/ dir), the workspace path, the current date/time, safety constraints, and the shell policy when shell is in its tool list.

The delegate tool runs one sub-agent. By default it sends a single prompt → response; in the background it returns a task_id you check later, and with parallel it fans out to several named agents at once.

{ "agent": "researcher",
"prompt": "Summarize the top 5 recent papers on diffusion models",
"background": false }
FieldMeaning
actiondelegate (default), check_result, list_results, cancel_task.
agentSub-agent name from [agents.<name>].
promptThe subtask prompt.
contextOptional context prepended to the prompt.
backgroundReturn immediately with a task_id.
parallelArray of agent names to run concurrently.
task_idUsed with check_result / cancel_task.

The background workflow is: delegate with background: true → receive task_id → later delegate with action: "check_result". Sub-agent providers are validated by revka doctor, so a typo in a provider name surfaces before runtime.

A swarm runs a group of named sub-agents together under one strategy. Where delegate drives a single agent, the swarm tool coordinates several at once.

[swarms.analysis]
agents = ["researcher", "coder"]
strategy = "sequential"
description = "Research a topic, then implement the findings."
timeout_secs = 300
KeyTypeDefaultMeaning
agentsarrayrequiredAgent names; must reference keys in [agents].
strategystringrequiredsequential, parallel, or router.
router_promptstringunsetPrompt the router uses to pick the best agent.
descriptionstringunsetShown to the LLM when choosing a swarm.
timeout_secsint300Max total swarm execution time.

The three strategies:

  • sequential — a pipeline. Each agent’s output feeds the next, in the order listed in agents.
  • parallel — fan-out / fan-in. Every agent runs on the same prompt and all outputs are collected.
  • router — the LLM reads router_prompt and picks the single best agent for the task.

Invoke a swarm with the swarm tool:

{ "swarm": "analysis",
"prompt": "Analyze the competitive landscape for AI code assistants" }
FieldMeaning
swarmSwarm name from [swarms.<name>].
promptThe task prompt.
contextOptional additional context.

Beyond config-level sub-agents, the Operator MCP maintains a persistent Agent Template Pool in Kumiho (under the harness project’s AgentPool space). A template is a reusable agent definition — its type, role, capabilities, identity, soul, tone, preferred model, and default working directory — that the operator instantiates on demand.

Templates carry the full identity model:

  • role: coder, reviewer, researcher, tester, architect, planner
  • agent_type: claude, codex, agy, agent, opencode

The operator exposes pool management as MCP tools:

ToolPurpose
save_agent_templateCreate or update a template (name, type, role, capabilities, identity, soul, tone, model, …).
search_agent_poolKeyword search the pool, e.g. {"query": "rust testing agent"}.
list_agent_templatesList templates, sorted by usage count.
get_agent_trustSuccess rate and recent outcomes per template.

Templates are referenced by name when spawning agents. The operator’s create_agent tool can inherit a template and override fields per call:

{ "title": "rust-coder",
"cwd": "/home/user/myproject",
"agent_type": "codex",
"template": "rust-coder",
"initial_prompt": "Implement the auth module" }

Usage counts are tracked automatically, and get_agent_trust feeds trust-aware patterns — for example, the refinement loop auto-switches its critic when a template’s trust drops below 0.7. You can also manage pooled agents from the dashboard’s Agents, teams & canvas page or the Agents API.

An Agent Team is a bundle of agent templates wired together with directed relationship edges, stored in Kumiho under Revka/Teams. The edges define a topology (a DAG) that the operator executes in waves: every agent with no unresolved dependencies runs in parallel, then the next wave, and so on.

Edge types describe how members relate:

  • REPORTS_TO
  • SUPPORTS
  • DEPENDS_ON

Teams are managed with operator MCP tools:

ToolPurpose
create_teamCreate/update a team bundle from member krefs and edges.
get_teamFull team detail — members and edges.
list_teams / search_teamsDiscover existing teams.
spawn_teamExecute the team in dependency waves.
get_spawn_progressPer-wave progress, completions, and halt reasons.
lint_teamCheck role balance, naming, capability coverage, and edge completeness.

spawn_team accepts execution controls:

ParamDefaultMeaning
taskrequiredThe work given to the team.
cwdrequiredWorking directory for spawned agents.
halt_on_failuretrueStop downstream waves when an upstream agent fails.
resume_fromunsetCheckpoint ID to resume a halted spawn without re-running completed waves.
dry_runfalseValidate and preview waves without spawning agents.

When a spawn halts mid-run, the response includes a checkpoint ID you pass to resume_from to continue. Team execution is static — the DAG is fixed up front — which contrasts with dynamic supervisor delegation, where a supervisor picks the next specialist based on results so far.

Teams are also first-class in the gateway and dashboard. They are Kumiho bundles of agent members linked by REPORTS_TO / SUPPORTS / DEPENDS_ON edges, can designate a supervisor member, and can be referenced from a workflow’s team: field. Manage them over the Agents, skills & teams API:

GET /api/teams?include_deprecated=false
POST /api/teams
GET /api/teams/{*kref}
PUT /api/teams/{*kref}
DELETE /api/teams/{*kref}
POST /api/teams/avatar

All /api/teams/* routes require Authorization: Bearer <token> from the pairing flow.

Delegate a subtask

One specialized agent, defined in [agents.<name>], invoked with the delegate tool. Best for quick, scoped hand-offs inside a chat.

Run a swarm

Several config sub-agents under one sequential, parallel, or router strategy via the swarm tool. Best for pipelines and fan-out.

Spawn a team

A persistent, graph-backed roster with explicit dependency edges, executed in waves with checkpoint resume. Best for durable, reusable topologies.

Coordinate dynamically

Review-fix loops, refinement, handoff, group chat, supervisor delegation, and map-reduce — see Spawning & coordinating agents.