//! The `Tool` trait agents expose to the LLM during an agentic loop. use async_trait::async_trait; use serde_json::Value; #[async_trait] pub trait Tool: Send + Sync { fn name(&self) -> &str; fn description(&self) -> &str; /// JSON Schema (object) describing the tool's input. fn input_schema(&self) -> Value; async fn execute(&self, input: Value) -> anyhow::Result; }