Skip to main content

SkillTool

Struct SkillTool 

Source
pub struct SkillTool { /* private fields */ }
Expand description

Loads skill bodies, and remembers which it has loaded.

Implementations§

Source§

impl SkillTool

Source

pub fn new(available: Vec<Skill>) -> Self

Source

pub fn loaded(&self) -> Vec<String>

What has been loaded, for a UI or a test.

Source

pub fn available(&self) -> &[Skill]

What this run actually carries — the level-1 set, after config selection and --skill narrowing.

For a UI answering “what does this agent know how to do”. It has to come from here rather than from re-reading the store beside the config, because --skill narrows the run without touching either: mecha skills shipped with exactly that bug, marking every config-selected skill as carried while the run carried one.

Source

pub fn clear(&self)

Forget what is loaded, because the conversation that loaded it ended.

A loaded skill is the agent’s state and a conversation is the scope it belongs to. Where one agent serves one conversation nothing needs to call this; where a front-end starts a fresh one — /clear, the next batch item — it has to, or a tools: narrowing outlives the task that asked for it and silently constrains the next one. There is no unload within a conversation on purpose: a procedure that has been read cannot be un-read, and the narrowing is the fail-closed direction.

Trait Implementations§

Source§

impl Tool for SkillTool

Source§

fn read_only(&self) -> bool

Reading a local file the user wrote, with no side effect anyone can observe. Skipping the approval gate matters more than it looks: a procedure the user authored should not need a click to be read, or every run that follows instructions costs an extra interruption.

Source§

fn carried_state(&self) -> Option<CarriedState>

Loaded skills cross a compaction verbatim.

A summariser preserves what is true and drops how far you got — and for a procedure it does something worse, because a paraphrased procedure is a different procedure. The steps would survive as a plausible gist with the specifics gone, which is exactly the failure the user wrote the skill to prevent. rebuild places carried state after the summary, as the part of the rebuilt head known to be current rather than paraphrased.

Source§

fn forget_conversation_state(&self)

The union of what the loaded skills declared, or None if none did.

A skill with no tools key is an opinion-free skill and must not drag the surface down to whatever its neighbour declared, so the union is taken over declaring skills only — and if none declares, nothing narrows. See Tool::narrows_surface_to for the composition rule. A conversation ending is the one thing that unloads a skill: loaded skills are its state, and a tools: narrowing that outlived it would silently constrain the next task.

Source§

fn name(&self) -> &str

Source§

fn description(&self) -> &str

Source§

fn input_schema(&self) -> Value

Source§

fn capabilities(&self) -> Capabilities

Declared risk surface. The default is the conservative one for a tool nobody has classified: assume it does nothing special.
Source§

fn call<'life0, 'life1, 'async_trait>( &'life0 self, input: Value, _ctx: &'life1 ToolCtx, ) -> Pin<Box<dyn Future<Output = Result<ToolOutput>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn narrows_surface_to(&self) -> Option<Vec<String>>

Tool names this tool is currently restricting the surface to, if it is restricting it at all. Read more
Source§

fn denial_remedy(&self) -> Option<String>

How the operator could make a call like the one just refused safe — one sentence appended to a trifecta denial, or None when nothing short of policy would change the answer. Read more
Source§

fn fixed_workspace(&self) -> Option<PathBuf>

The root this tool’s relative paths actually resolve against, when the tool was constructed over a fixed directory rather than following the per-run ToolCtx workspace. Read more
Source§

fn spec(&self) -> ToolSpec

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> 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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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