Skip to main content

CliSpec

Struct CliSpec 

Source
pub struct CliSpec {
Show 16 fields pub command: String, pub command_env: Option<String>, pub args: Vec<String>, pub prompt_delivery: PromptDelivery, pub prompt_flag: String, pub model_flag: String, pub default_model: String, pub output_format_flag: String, pub output_format_value: String, pub system_prompt_flag: String, pub output_mode: OutputMode, pub result_json_paths: JsonPaths, pub ndjson_match: LineMatchers, pub extra_args: Vec<String>, pub timeout: Option<Duration>, pub env_remove: Vec<String>,
}
Expand description

Everything needed to call one agent CLI once.

Built by CliSpec::resolve from a preset plus [llm.cli]; pure data, so CliSpec::invocation is testable without spawning anything.

Fields§

§command: String

Binary name or path.

§command_env: Option<String>

Environment variable that overrides command when config does not.

§args: Vec<String>

Fixed arguments before every generated flag.

§prompt_delivery: PromptDelivery

How the prompt reaches the process.

§prompt_flag: String

Flag carrying the prompt under PromptDelivery::Flag.

§model_flag: String

Flag selecting the model; empty omits it.

§default_model: String

Model used when the config names none.

§output_format_flag: String

Flag selecting the output format; empty omits it.

§output_format_value: String

Value for output_format_flag; empty passes the flag alone.

§system_prompt_flag: String

Flag carrying the system prompt; empty prepends it to the message.

§output_mode: OutputMode

Shape of the CLI’s stdout.

§result_json_paths: JsonPaths

Candidate paths to the answer inside JSON output; empty means stdout is the answer.

§ndjson_match: LineMatchers

Predicates selecting the answer’s line under OutputMode::Ndjson.

§extra_args: Vec<String>

Arguments after the generated flags.

§timeout: Option<Duration>

Per-call limit; None waits forever.

§env_remove: Vec<String>

Variables unset before spawning.

Implementations§

Source§

impl CliSpec

Source

pub fn preset(preset: CliPreset) -> Self

Defaults for a known CLI.

Verified on live calls against the installed binaries: claude 2.1.x, grok (JSON envelope confirmed) and codex 0.146.x (NDJSON stream confirmed). gemini 0.27.x is flags-only — its success field could not be checked without auth, so that preset tries several and falls back to stdout. See the provider table in the README.

Source

pub fn resolve( provider: &Provider, section: &CliSection, ) -> Result<Self, RecallError>

Resolve the spec for a provider: its preset, then [llm.cli] on top.

Fails for the HTTP providers, which have no CLI to spawn, and for a spec left unusable — no command, or flag delivery with no flag.

Source

pub fn resolve_command(&self) -> String

The binary to spawn: config first, then the preset’s environment override, then the preset default.

Source

pub fn resolve_model(&self, configured: &str) -> String

The model this spec uses, given what the config asked for.

Source

pub fn invocation( &self, model: &str, system_prompt: &str, user_message: &str, ) -> Invocation

Build the exact argv and stdin payload for one completion.

Source

pub fn argv_preview(&self, model: &str) -> String

A human-readable, single-line argv for config show, with the prompts as placeholders.

Trait Implementations§

Source§

impl Clone for CliSpec

Source§

fn clone(&self) -> CliSpec

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for CliSpec

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for CliSpec

Source§

impl PartialEq for CliSpec

Source§

fn eq(&self, other: &CliSpec) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for CliSpec

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<U> As for U

Source§

fn as_<T>(self) -> T
where T: CastFrom<U>, U: Sized,

Casts self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more
Source§

impl<T> AsyncFriendly for T
where T: Send + Sync + 'static,

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Generator<T> for T
where T: Clone,

Source§

fn generate(&mut self) -> T

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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
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: Sized + 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: Sized + 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> 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<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
Source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

Source§

fn is_within(&self, b: &G2) -> bool