Skip to main content

CliBackend

Struct CliBackend 

Source
pub struct CliBackend {
    pub command: String,
    pub args: Vec<String>,
    pub prompt_mode: PromptMode,
    pub prompt_flag: Option<String>,
    pub output_format: OutputFormat,
}
Expand description

A CLI backend configuration for executing prompts.

Fields§

§command: String

The command to execute.

§args: Vec<String>

Additional arguments before the prompt.

§prompt_mode: PromptMode

How to pass the prompt.

§prompt_flag: Option<String>

Argument flag for prompt (if prompt_mode is Arg).

§output_format: OutputFormat

Output format emitted by this backend.

Implementations§

Source§

impl CliBackend

Source

pub fn from_config(config: &CliConfig) -> Result<Self, CustomBackendError>

Creates a backend from configuration.

§Errors

Returns CustomBackendError if backend is “custom” but no command is specified.

Source

pub fn claude() -> Self

Creates the Claude backend.

Uses -p flag for headless/print mode execution. This runs Claude in non-interactive mode where it executes the prompt and exits. For interactive mode, stdin is used instead (handled in build_command).

Emits --output-format stream-json for NDJSON streaming output. Note: --verbose is required when using --output-format stream-json with -p.

Source

pub fn claude_interactive() -> Self

Creates the Claude backend for interactive prompt injection.

Runs Claude without -p flag, passing prompt as a positional argument. Used by SOP runner for interactive command injection.

Note: This is NOT for TUI mode - Ralph’s TUI uses the standard claude() backend. This is for cases where Claude’s interactive mode is needed. Uses = syntax for --disallowedTools to prevent variadic consumption of the positional prompt argument.

Source

pub fn kiro() -> Self

Creates the Kiro backend.

Uses kiro-cli in headless mode with all tools trusted.

Source

pub fn kiro_with_agent(agent: String, extra_args: &[String]) -> Self

Creates the Kiro backend with a specific agent and optional extra args.

Uses kiro-cli with –agent flag to select a specific agent.

Source

pub fn from_name_with_args( name: &str, extra_args: &[String], ) -> Result<Self, CustomBackendError>

Creates a backend from a named backend with additional args.

§Errors

Returns error if the backend name is invalid.

Source

pub fn from_name(name: &str) -> Result<Self, CustomBackendError>

Creates a backend from a named backend string.

§Errors

Returns error if the backend name is invalid.

Source

pub fn from_hat_backend( hat_backend: &HatBackend, ) -> Result<Self, CustomBackendError>

Creates a backend from a HatBackend configuration.

§Errors

Returns error if the backend configuration is invalid.

Source

pub fn gemini() -> Self

Creates the Gemini backend.

Source

pub fn codex() -> Self

Creates the Codex backend.

Source

pub fn amp() -> Self

Creates the Amp backend.

Source

pub fn copilot() -> Self

Creates the Copilot backend for autonomous mode.

Uses GitHub Copilot CLI with --allow-all-tools for automated tool approval. Output is plain text (no JSON streaming available).

Source

pub fn copilot_tui() -> Self

Creates the Copilot TUI backend for interactive mode.

Runs Copilot in full interactive mode (no -p flag), allowing Copilot’s native TUI to render. The prompt is passed as a positional argument.

Source

pub fn for_interactive_prompt( backend_name: &str, ) -> Result<Self, CustomBackendError>

Creates a backend configured for interactive mode with initial prompt.

This factory method returns the correct backend configuration for running an interactive session with an initial prompt. The key differences from headless mode are:

BackendInteractive + Prompt
Claudepositional arg (no -p flag)
Kiroremoves --no-interactive
Geminiuses -i instead of -p
Codexno exec subcommand
Ampremoves --dangerously-allow-all
Copilotremoves --allow-all-tools
OpenCoderun subcommand with positional prompt
§Errors

Returns CustomBackendError if the backend name is not recognized.

Source

pub fn kiro_interactive() -> Self

Kiro in interactive mode (removes –no-interactive).

Unlike headless kiro(), this allows the user to interact with Kiro’s TUI while still passing an initial prompt.

Source

pub fn gemini_interactive() -> Self

Gemini in interactive mode with initial prompt (uses -i, not -p).

Critical quirk: Gemini requires -i flag for interactive+prompt mode. Using -p would make it run headless and exit after one response.

Source

pub fn codex_interactive() -> Self

Codex in interactive TUI mode (no exec subcommand).

Unlike headless codex(), this runs without exec and --full-auto flags, allowing interactive TUI mode.

Source

pub fn amp_interactive() -> Self

Amp in interactive mode (removes –dangerously-allow-all).

Unlike headless amp(), this runs without the auto-approve flag, requiring user confirmation for tool usage.

Source

pub fn copilot_interactive() -> Self

Copilot in interactive mode (removes –allow-all-tools).

Unlike headless copilot(), this runs without the auto-approve flag, requiring user confirmation for tool usage.

Source

pub fn opencode() -> Self

Creates the OpenCode backend for autonomous mode.

Uses OpenCode CLI with run subcommand. The prompt is passed as a positional argument after the subcommand:

opencode run "prompt text here"

Output is plain text (no JSON streaming available).

Source

pub fn opencode_tui() -> Self

Creates the OpenCode TUI backend for interactive mode.

Runs OpenCode with run subcommand. The prompt is passed as a positional argument:

opencode run "prompt text here"
Source

pub fn opencode_interactive() -> Self

OpenCode in interactive TUI mode.

Runs OpenCode TUI with an initial prompt via --prompt flag:

opencode --prompt "prompt text here"

Unlike opencode() which uses opencode run (headless mode), this launches the interactive TUI and injects the prompt.

Source

pub fn custom(config: &CliConfig) -> Result<Self, CustomBackendError>

Creates a custom backend from configuration.

§Errors

Returns CustomBackendError if no command is specified.

Source

pub fn build_command( &self, prompt: &str, interactive: bool, ) -> (String, Vec<String>, Option<String>, Option<NamedTempFile>)

Builds the full command with arguments for execution.

§Arguments
  • prompt - The prompt text to pass to the agent
  • interactive - Whether to run in interactive mode (affects agent flags)

Trait Implementations§

Source§

impl Clone for CliBackend

Source§

fn clone(&self) -> CliBackend

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CliBackend

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<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