Agent trees
LLM agents, sequential and parallel stages, agent-as-tool calls and handoffs, nested up to eight levels.
Self-hosted multi-agent workflow platform
Describe a team of agents in one file, give them skills and tools, and run them as jobs through a REST API. Every agent run, LLM call and tool call is recorded, so you can see exactly what happened and what it cost.
One YAML file describes the tree: a single agent, a supervisor with specialists, a router, or stages in sequence or in parallel. It's validated when you upload it.
Skills are Markdown files uploaded with the workflow: a runbook, a style guide, a resume. Each agent gets only the skills you give it.
Submit a job with POST /jobs. A worker picks it up from Postgres and runs the tree. Poll for the answer, and read every step with its input, output, duration and tokens.
Every workflow is one tree of agents. These are the shapes it can take, and they combine: a stage in a pipeline can be a supervisor, and a specialist can run its own pipeline.
name: summarizer
kind: llm
model: claude-sonnet-5-5
instruction: Summarize the text you are given.
skills: [house-style]
Pattern 1
One LLM agent with an instruction, and optionally tools and skills. The request goes in, the answer comes out.
http_get let it fetch what it needs.Use it when the task is one well-defined job: summarise, classify, extract, rewrite.
name: analyst
kind: llm
model: claude-sonnet-5-5
instruction: Answer the question. Delegate web
pages to page_researcher.
tools: [current_time]
agent_tools:
- name: page_researcher
description: Reads one page, answers a question.
kind: llm
model: claude-sonnet-5-5
instruction: Fetch the URL, answer briefly.
tools: [http_get]
- name: summarizer
description: Summarizes text it is given.
kind: llm
model: claude-sonnet-5-5
instruction: Summarize as asked.
Pattern 2
A supervisor calls specialist agents as if they were tools, reads their answers and keeps working until it can reply.
Use it when a task breaks into research or sub-tasks whose results you combine.
name: support_desk
kind: llm
model: claude-sonnet-5-5
instruction: Route the request to the right
specialist. Do not answer it yourself.
sub_agents:
- name: billing
kind: llm
model: claude-sonnet-5-5
instruction: You handle billing questions.
- name: tech
kind: llm
model: claude-sonnet-5-5
instruction: You handle technical issues.
Pattern 3
A router reads the request and hands it to the right specialist. The specialist's answer becomes the final answer.
transfer_to_<name> tool.Use it when requests fall into clear categories that need different expertise.
name: blog_pipeline
kind: sequential
sub_agents:
- name: researcher
kind: llm
model: claude-sonnet-5-5
instruction: List the key facts about the topic.
- name: writer
kind: llm
model: claude-sonnet-5-5
instruction: Write a short post from these facts.
Pattern 4
Stages run in order, and each stage's output becomes the next stage's input.
Use it when the work naturally splits into steps, like research, then draft, then edit.
name: parallel_review
kind: sequential
sub_agents:
- name: reviewers
kind: parallel
sub_agents:
- name: security_review
kind: llm
model: claude-sonnet-5-5
instruction: Review for security problems.
- name: clarity_review
kind: llm
model: claude-sonnet-5-5
instruction: Review for clarity problems.
- name: merger
kind: llm
model: claude-sonnet-5-5
instruction: Merge the reviews into one list.
Pattern 5
Several agents work on the same input at the same time. Their outputs are joined, one section per agent, usually for a following stage to merge.
Use it when you want independent perspectives on the same thing, like reviews or checks.
LLM agents, sequential and parallel stages, agent-as-tool calls and handoffs, nested up to eight levels.
Markdown guidance attached per agent and versioned with the workflow, so behaviour changes without touching the logic.
No broker to run. Workers claim jobs with SKIP LOCKED, crashed jobs are picked up again after a lease, and the API and workers scale on their own.
Each agent run, LLM call and tool call is recorded with its input, output, duration and token counts, and can be read through the API.
Point your alerts at it: secrets are redacted, repeats deduplicated, volume capped, and the analysis posted to your team's Slack.
Per-job LLM call budgets and timeouts, capped tool output, and a web fetch tool that refuses private and internal addresses.