Skip to main content

Crate enact_runner

Crate enact_runner 

Source
Expand description

enact-runner — The Robust Agent Loop for Enact

This crate fills the gap between enact-core’s deterministic kernel and the applications (CLI, API) that assume the Rust layer handles retries, context compaction, and multi-format tool call parsing.

§Architecture

┌─────────────────────────────────────────────────────┐
│  CLI / API / Web (thin clients)                     │
└──────────────────────┬──────────────────────────────┘
                       │ Execution Intent
                       ▼
┌─────────────────────────────────────────────────────┐
│  enact-runner (THIS CRATE)                          │
│  ┌─────────────────────────────────────────────┐    │
│  │  AgentRunner::run()                         │    │
│  │  • Multi-iteration tool call loop           │    │
│  │  • Retry with exponential backoff           │    │
│  │  • Auto context compaction                  │    │
│  │  • Multi-format parsing (JSON/XML/MD)       │    │
│  │  • Checkpoint at intervals                  │    │
│  │  • Stream event emission                    │    │
│  └─────────────────────────────────────────────┘    │
└──────────────────────┬──────────────────────────────┘
                       │ Callable::run()
                       ▼
┌─────────────────────────────────────────────────────┐
│  enact-core kernel (deterministic DAG engine)       │
└─────────────────────────────────────────────────────┘

§Quick Start

use enact_runner::{AgentRunner, RunnerConfig, DefaultAgentRunner};

// Create runner with default config
let mut runner = DefaultAgentRunner::default_new();

// Or configure for long-running tasks
let mut runner = DefaultAgentRunner::with_config(RunnerConfig::long_running());

// Run an agent through the robust loop
// let outcome = runner.run(&my_callable, "user input").await?;

Re-exports§

pub use approval::checker_from_approval_config;
pub use approval::checker_from_config;
pub use approval::AlwaysApprove;
pub use approval::AlwaysDeny;
pub use approval::ApprovalChecker;
pub use approval::ApprovalPrompter;
pub use approval::AskApprovalChecker;
pub use approval::AskOnceApprovalChecker;
pub use approval::CliPrompter;
pub use approval::PatternApprovalChecker;
pub use approval::PolicyWithOverrides;
pub use commands::dispatch as dispatch_command;
pub use commands::load_commands;
pub use commands::load_commands_for_run;
pub use commands::CommandDef;
pub use compaction::HistoryMessage;
pub use config::ObservabilityConfig;
pub use config::RetryConfig;
pub use config::RunnerConfig;
pub use hooks::load_global_hooks;
pub use hooks::HookRegistry;
pub use loop_driver::AgentRunner;
pub use loop_driver::DefaultAgentRunner;
pub use loop_driver::LoopOutcome;
pub use parser::ParseResult;
pub use parser::ParsedToolCall;
pub use parser::ToolCallFormat;
pub use registry::LiveSessionInfo;
pub use registry::LiveSessionRegistry;
pub use retry::classify_error;
pub use retry::ErrorKind;
pub use retry::RetryHandler;
pub use session::SessionDetails;
pub use session::SessionEvent;
pub use session::SessionQuery;
pub use session::SessionReader;
pub use session::SessionRecorder;
pub use session::SessionStatus;
pub use session::SessionSummary;
pub use session::SortOrder;

Modules§

approval
Human-in-the-loop approval — check before tool execution.
commands
Slash commands — user-invokable commands from ~/.enact/commands/, .enact/commands/, and plugins.
compaction
Context compaction for long-running agent loops
config
Runner configuration
hooks
Hook configuration and registry — load hooks from ~/.enact/hooks.yaml, plugins, and agent YAML.
loop_driver
Core agent loop driver
parser
Multi-format tool call parser
registry
Live Session Registry — tracks currently running sessions for message routing
retry
Retry handler with exponential backoff and error classification
session
Session recorder and reader — one JSONL file per run under agents//sessions/ and optionally projects//sessions/.