pub trait Tool: Send + Sync {
Show 13 methods
// Required methods
fn name(&self) -> &'static str;
fn description(&self) -> &'static str;
fn input_schema(&self) -> Value;
fn call<'life0, 'life1, 'async_trait>(
&'life0 self,
input: Value,
ctx: &'life1 ToolContext,
) -> Pin<Box<dyn Future<Output = Result<ToolResult, ToolError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
// Provided methods
fn prompt(&self) -> String { ... }
fn is_read_only(&self) -> bool { ... }
fn is_concurrency_safe(&self) -> bool { ... }
fn is_destructive(&self) -> bool { ... }
fn is_enabled(&self) -> bool { ... }
fn max_result_size_chars(&self) -> usize { ... }
fn check_permissions<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
input: &'life1 Value,
checker: &'life2 PermissionChecker,
) -> Pin<Box<dyn Future<Output = PermissionDecision> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn validate_input(&self, _input: &Value) -> Result<(), String> { ... }
fn get_path(&self, _input: &Value) -> Option<PathBuf> { ... }
}Expand description
The core trait that all tools must implement.
Tools are the bridge between the LLM’s intentions and the local environment. Each tool defines its input schema (for the LLM), permission requirements, concurrency behavior, and execution logic.
Required Methods§
Sourcefn description(&self) -> &'static str
fn description(&self) -> &'static str
Human-readable description sent to the LLM.
Sourcefn input_schema(&self) -> Value
fn input_schema(&self) -> Value
JSON Schema for the tool’s input parameters.
Provided Methods§
Sourcefn is_read_only(&self) -> bool
fn is_read_only(&self) -> bool
Whether this tool only reads state (no mutations).
Sourcefn is_concurrency_safe(&self) -> bool
fn is_concurrency_safe(&self) -> bool
Whether this tool can safely run concurrently with other tools. Read-only tools are typically concurrency-safe.
Sourcefn is_destructive(&self) -> bool
fn is_destructive(&self) -> bool
Whether this tool is destructive (deletes data, force-pushes, etc.).
Sourcefn is_enabled(&self) -> bool
fn is_enabled(&self) -> bool
Whether this tool is currently enabled in the environment.
Sourcefn max_result_size_chars(&self) -> usize
fn max_result_size_chars(&self) -> usize
Maximum result size in characters before truncation.
Sourcefn check_permissions<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
input: &'life1 Value,
checker: &'life2 PermissionChecker,
) -> Pin<Box<dyn Future<Output = PermissionDecision> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn check_permissions<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
input: &'life1 Value,
checker: &'life2 PermissionChecker,
) -> Pin<Box<dyn Future<Output = PermissionDecision> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Check permissions for executing this tool with the given input.