Skip to main content

AgentRuntime

Struct AgentRuntime 

Source
pub struct AgentRuntime<P: LlmProvider> { /* private fields */ }
Expand description

The main agent runtime.

Implementations§

Source§

impl<P: LlmProvider + 'static> AgentRuntime<P>

Source

pub fn new( llm: P, mcp: McpClient, audit: AuditLog, sessions: SessionStore, crypto: KeyPair, config: RuntimeConfig, ) -> Self

Create a new runtime.

Source

pub fn new_arc( llm: P, mcp: McpClient, audit: AuditLog, sessions: SessionStore, crypto: KeyPair, config: RuntimeConfig, hooks: Option<HookManager>, ) -> Arc<Self>

Create a new runtime wrapped in Arc with the self-reference pre-set.

Uses Arc::new_cyclic to avoid the two-step new() + set_self_arc() pattern. Accepts an optional HookManager since with_hooks() can’t be chained after Arc wrapping.

Source

pub fn create_session(&self, workspace_override: Option<&Path>) -> AgentSession

Create a new session.

Uses build_system_prompt() to dynamically assemble a workspace-aware prompt with tool guidelines and project instructions. If the user has explicitly set a custom system_prompt in config, that takes priority.

An optional workspace_override can be supplied to use a different workspace root than the one in the runtime config (e.g. the CLI client’s actual working directory).

Source

pub fn save_session(&self, session: &AgentSession) -> RuntimeResult<()>

Save a session.

§Errors

Returns an error if the session cannot be serialized or written to disk.

Source

pub fn load_session( &self, id: &SessionId, ) -> RuntimeResult<Option<AgentSession>>

Load a session.

§Errors

Returns an error if the session file cannot be read or deserialized.

Source

pub fn list_sessions(&self) -> RuntimeResult<Vec<SessionSummary>>

List sessions.

§Errors

Returns an error if the session directory cannot be read or session files cannot be parsed.

Source

pub async fn run_turn_streaming<F: Frontend + 'static>( &self, session: &mut AgentSession, input: &str, frontend: Arc<F>, ) -> RuntimeResult<()>

Run a single turn with streaming output.

The frontend parameter is wrapped in Arc so it can be registered as an approval handler for the duration of the turn.

§Errors

Returns an error if:

  • The LLM provider fails to generate a response
  • An MCP tool call fails
  • An approval request fails
  • Session persistence fails
Source

pub async fn run_subagent_turn<F: Frontend + 'static>( &self, session: &mut AgentSession, prompt: &str, frontend: Arc<F>, parent_subagent_id: Option<SubAgentId>, ) -> RuntimeResult<()>

Run a single turn for a sub-agent session.

Like run_turn_streaming but without hooks, summarization, or session persistence. The session is ephemeral and owned by the caller (SubAgentExecutor).

parent_subagent_id is the pool handle ID of this sub-agent, passed so that nested sub-agents (if the sub-agent calls task tool) can declare their parent.

§Errors

Returns an error if the LLM or tool execution fails.

Source

pub fn config(&self) -> &RuntimeConfig

Get runtime configuration.

Source

pub fn audit(&self) -> &Arc<AuditLog>

Get the audit log.

Source

pub fn mcp(&self) -> &McpClient

Get the MCP client.

Source

pub fn key_id(&self) -> [u8; 8]

Get the runtime key ID.

Source

pub fn boundary(&self) -> &WorkspaceBoundary

Get the workspace boundary.

Source

pub fn with_hooks(self, hooks: HookManager) -> Self

Set a pre-configured hook manager.

Source

pub fn hooks(&self) -> &Arc<HookManager>

Get the hook manager.

Source

pub fn subagent_pool(&self) -> &Arc<SubAgentPool>

Get the sub-agent pool.

Source

pub async fn set_self_arc(self: &Arc<Self>)

Store a weak self-reference for sub-agent spawner injection.

Important: Callers must wrap the runtime in Arc and call this method for sub-agent support to work. Without it, the task tool will return “not available in this context”.

let runtime = Arc::new(AgentRuntime::new(/* ... */));
runtime.set_self_arc(&runtime).await;

Auto Trait Implementations§

§

impl<P> !Freeze for AgentRuntime<P>

§

impl<P> !RefUnwindSafe for AgentRuntime<P>

§

impl<P> Send for AgentRuntime<P>

§

impl<P> Sync for AgentRuntime<P>

§

impl<P> Unpin for AgentRuntime<P>

§

impl<P> UnsafeUnpin for AgentRuntime<P>

§

impl<P> !UnwindSafe for AgentRuntime<P>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> GetSetFdFlags for T

Source§

fn get_fd_flags(&self) -> Result<FdFlags, Error>
where T: AsFilelike,

Query the “status” flags for the self file descriptor.
Source§

fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>
where T: AsFilelike,

Create a new SetFdFlags value for use with set_fd_flags. Read more
Source§

fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>
where T: AsFilelike,

Set the “status” flags for the self file descriptor. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more