Introduction to the Forest of Agents

The Forest of Agents is a multi-agent system where multiple AI agents collaborate to solve complex tasks. Each agent can have specialized roles, tools, and prompts, enabling sophisticated workflows.

Key Concepts

  • Forest: The container that manages multiple agents
  • Coordinator: An optional special agent that plans and delegates tasks
  • Worker Agents: Specialized agents that execute specific tasks
  • Task Planning: Automatic decomposition of complex tasks into subtasks
  • Agent Communication: Agents can pass messages and results to each other
graph TD
    A[Task] --> B(Forest);
    B -- Manages --> C{Coordinator};
    B -- Manages --> D[Worker Agent 1];
    B -- Manages --> E[Worker Agent 2];
    B -- Manages --> F[Worker Agent N];
    C -- Delegates To --> D;
    C -- Delegates To --> E;
    C -- Delegates To --> F;
    D -- Communicates With --> E;
    E -- Communicates With --> F;

Basic Usage

Creating a Simple Forest

use helios_engine::{Agent, Config, ForestBuilder};

#[tokio::main]
async fn main() -> helios_engine::Result<()> {
    let config = Config::from_file("config.toml")?;

    let mut forest = ForestBuilder::new()
        .config(config)
        .agent("worker1".to_string(),
            Agent::builder("worker1")
                .system_prompt("You are a data analyst."))
        .agent("worker2".to_string(),
            Agent::builder("worker2")
                .system_prompt("You are a report writer."))
        .max_iterations(15)
        .build()
        .await?;

    // Execute a task
    let result = forest.execute("Analyze sales data and write a report").await?;
    println!("Result: {}", result);

    Ok(())
}

Adding Multiple Agents at Once

Instead of chaining multiple .agent() calls, you can use the .agents() method:

#![allow(unused)]
fn main() {
let mut forest = ForestBuilder::new()
    .config(config)
    .agents(vec![
        ("coordinator".to_string(), Agent::builder("coordinator")
            .system_prompt("You coordinate and plan tasks.")),
        ("researcher".to_string(), Agent::builder("researcher")
            .system_prompt("You research information.")),
        ("analyst".to_string(), Agent::builder("analyst")
            .system_prompt("You analyze data.")),
        ("writer".to_string(), Agent::builder("writer")
            .system_prompt("You write clear documentation.")),
    ])
    .max_iterations(25)
    .build()
    .await?;
}