ambush

Crates.ioambush
lib.rsambush
version0.1.0
created_at2025-12-14 20:27:06.991547+00
updated_at2025-12-14 20:27:06.991547+00
descriptionTask decomposition and plan mode for AI agents - planning the attack
homepage
repositoryhttps://github.com/moltenlabs/molten
max_upload_size
id1985052
size91,468
Chris Mathew (chriscmathew-dorsia)

documentation

README

⚔️ Ambush

Task decomposition and plan mode for AI agents - planning the attack.

Crates.io Documentation License

Overview

Ambush provides task decomposition and planning capabilities for AI agents, breaking complex requests into manageable steps with agent assignments.

Features

  • 📋 Task decomposition into sub-steps
  • 🔍 Complexity analysis
  • 👥 Agent role assignment
  • 📊 Dependency graph generation
  • 💰 Token usage estimation

Installation

[dependencies]
ambush = "0.1"

Usage

use ambush::{TaskPlanner, PlanConfig};

#[tokio::main]
async fn main() -> Result<(), ambush::PlannerError> {
    let config = PlanConfig::default();
    let planner = TaskPlanner::new(config);

    // Generate a plan from a user request
    let plan = planner.plan("Add user authentication to my app").await?;

    println!("Plan has {} steps:", plan.steps.len());
    for step in &plan.steps {
        println!("  - {} ({:?})", step.description, step.complexity);
    }

    println!("Estimated tokens: {}", plan.estimated_tokens);

    Ok(())
}

Plan Granularity

use ambush::{TaskPlanner, PlanConfig};
use warhorn::PlanGranularity;

// Coarse-grained planning (fewer, larger steps)
let plan = planner.plan_with_granularity(
    "Refactor the database layer",
    PlanGranularity::Coarse
).await?;

// Detailed planning (more, smaller steps)
let plan = planner.plan_with_granularity(
    "Add login form",
    PlanGranularity::Detailed
).await?;

// Auto-detect based on request complexity
let plan = planner.plan_with_granularity(
    "Fix bug in parser",
    PlanGranularity::Auto
).await?;

Agent Assignment

The planner automatically assigns agent roles based on the task domain:

use warhorn::AgentRole;

for (step_id, role) in &plan.agent_assignments {
    match role {
        AgentRole::DomainLead { domain } => {
            println!("Step {} assigned to {} lead", step_id, domain);
        }
        AgentRole::Worker => {
            println!("Step {} assigned to worker", step_id);
        }
        _ => {}
    }
}

Part of the Goblin Family

License

MIT OR Apache-2.0

Commit count: 0

cargo fmt