Skip to main content

Executors: When To Use What

AutoAgents ships three execution strategies out of the box. Pick based on your task shape and integration needs.

BasicAgent​

  • Single-turn request with no intermediate tool calls.
  • Great for:
    • Prompt → response without orchestration
    • Simple chat replies
    • Fast endpoints or CLI utilities
  • Streaming: Yes (execute_stream yields delta content)
  • Output: BasicAgentOutput { response, done } — can be converted to your structured type with parse_or_map.
  • Reasoning/thinking deltas, when supported by the model/provider, are emitted via stream events (Event::StreamChunk(StreamChunk::ReasoningContent)).

Use if you need a quick, single-shot LLM call.

ReActAgent​

  • Multi-turn loop with tool calling support and memory integration.
  • Great for:
    • Tool-augmented tasks (retrieval, search, filesystem, MCP)
    • Step-by-step reasoning with intermediate state
    • Streaming UI with turn events
  • Streaming: Yes (delta content and tool-call accumulation)
  • Output: ReActAgentOutput { response, tool_calls, done } — parse via try_parse/parse_or_map or extract_agent_output.
  • Reasoning/thinking deltas are available through stream events (StreamChunk::ReasoningContent).

Use if your agent must call tools or orchestrate multiple turns.

CodeActAgent​

  • Multi-turn loop where the model writes sandboxed TypeScript to compose tools.
  • Great for:
    • Coding and data-processing workflows where tool composition matters
    • Tasks that benefit from local computation inside the executor instead of repeated model turns
    • Rich observability around code execution, console output, and nested tool calls
  • Streaming: Yes (delta content plus code-execution lifecycle events)
  • Output: CodeActAgentOutput { response, executions, done } — parse via try_parse/parse_or_map or extract_agent_output.
  • Requires the codeact cargo feature and a native target.

Use if your agent should plan with tools by writing small TypeScript programs instead of issuing direct tool calls.

Structured Output Helpers​

All prebuilt executors provide helpers to reduce parsing boilerplate:

// Best-effort parse with fallback to raw text mapping
let my_struct = output.parse_or_map(|raw| MyStruct { text: raw.to_string() });

// Strict parse
let parsed: MyStruct = output.try_parse()?;