Sub-Agents

A Brute::Tools::SubAgent is an AgentPipeline that also exposes a tool interface (name, description, params, execute). Hand it to a parent agent’s ToolPipeline and the parent’s model can call it like any other tool. When invoked, the sub-agent builds a fresh conversation from the tool arguments, runs its own full middleware pipeline, and returns its final assistant message as the tool result.

This is how delegation and parallel exploration work: a coordinator agent fans work out to focused sub-agents (a read-only explorer, a researcher), each with its own tools, prompt, and iteration budget.

Defining one

researcher = Brute::Tools::SubAgent.new(
  name:        "research",
  description: "Delegate a research task to a read-only sub-agent.",
) do
  use Brute::Middleware::SystemPrompt
  use Brute::Middleware::Loop::ToolResult
  use Brute::Middleware::MaxIterations, max_iterations: 10
  use Brute::Middleware::ToolPipeline, tools: [Brute::Tools::FSRead, Brute::Tools::FSSearch]
  run do |env|
    # the sub-agent's own LLM call — same MessageTransport pattern as any agent
  end
end

The default parameter is task (a string); override params: for a richer argument schema.

Using one

A SubAgent is a tool, so it drops straight into a parent’s tool list:

main = Brute.agent do
  use Brute::Middleware::SystemPrompt
  use Brute::Middleware::Loop::ToolResult
  use Brute::Middleware::MaxIterations
  use Brute::Middleware::ToolPipeline, tools: [Brute::Tools::FSRead, researcher]
  run ->(env) { ... }
end

main.start("Research how sessions are persisted, then summarize.")

When the parent’s model calls research, the sub-agent runs start on a fresh log seeded with the task argument, loops through its own tool cycle, and hands back the last non-empty assistant message. If it produces no text, the result is a placeholder note rather than an error.

Why it composes

SubAgent < AgentPipeline < Pipeline, and the Adapter recognizes it directly — so a sub-agent is subject to the same concurrent execution, output truncation, and error-capture as every other tool. Nesting agents costs nothing beyond another pipeline; there is no special “delegation” machinery to learn.


This site uses Just the Docs, a documentation theme for Jekyll.