use rusty_claw::options::AgentDefinition;
use rusty_claw::prelude::*;
use std::collections::HashMap;
#[tokio::main]
async fn main() {
println!("=== Rusty Claw Subagent Example ===\n");
let researcher = AgentDefinition {
description: "Research agent specialized in code analysis".to_string(),
prompt: "You are a research assistant focused on analyzing code and finding patterns."
.to_string(),
tools: vec!["Read".to_string(), "Grep".to_string(), "Glob".to_string()],
model: Some("claude-sonnet-4".to_string()),
};
let writer = AgentDefinition {
description: "Writing agent specialized in documentation".to_string(),
prompt: "You are a technical writer focused on creating clear documentation.".to_string(),
tools: vec!["Read".to_string(), "Write".to_string(), "Edit".to_string()],
model: None, };
let mut agents = HashMap::new();
agents.insert("researcher".to_string(), researcher);
agents.insert("writer".to_string(), writer);
println!("Configured {} agents:", agents.len());
for (name, agent) in &agents {
println!(
" - {}: {} (tools: {})",
name,
agent.description,
agent.tools.join(", ")
);
}
println!();
let mut hooks = HashMap::new();
let subagent_start_hook = HookMatcher::tool("Bash");
hooks.insert(HookEvent::SubagentStart, vec![subagent_start_hook]);
let subagent_stop_hook = HookMatcher::tool("Bash");
hooks.insert(HookEvent::SubagentStop, vec![subagent_stop_hook]);
println!("Registered {} hook events:", hooks.len());
for (event, matchers) in &hooks {
println!(" - {:?}: {} matcher(s)", event, matchers.len());
}
println!();
let options = ClaudeAgentOptions::builder()
.agents(agents.clone())
.hooks(hooks.clone())
.build();
println!("ClaudeAgentOptions configured:");
println!(" - Agents: {} defined", options.agents.len());
println!(" - Hooks: {} events registered", options.hooks.len());
println!();
println!("Example completed successfully!");
println!();
println!("Key Takeaways:");
println!(" 1. AgentDefinition specifies prompts, tools, and optional model overrides");
println!(" 2. SubagentStart/SubagentStop hooks track agent lifecycle");
println!(" 3. Agents are registered in Initialize control request");
println!(" 4. Tool restrictions limit what each agent can access");
}