Skip to main content

oxios_kernel/tools/builtin/
mod.rs

1//! Kernel tools — AgentTool wrappers for KernelHandle API domains.
2//!
3//! These tools expose kernel system calls to the agent's tool-calling loop.
4//! Each tool wraps a specific domain API and uses an action-based parameter
5//! schema to dispatch operations.
6//!
7//! ## Tools
8//!
9//! - [`ProjectTool`] — Project management (list, get, link_memory, unlink_memory)
10//! - [`AgentTool`] — Agent lifecycle (list, kill, budget)
11//! - [`PersonaTool`] — Persona management (list, set_active, get)
12//! - [`CronTool`] — Cron scheduling (list, add, remove, trigger)
13//! - [`SecurityTool`] — Security audit (verify_chain, query_audit, audit_count)
14//! - [`BudgetTool`] — Budget management (check, set, reserve, reset)
15//! - [`ResourceTool`] — Resource monitoring (snapshot, history, overloaded)
16//! - [`CalendarTool`] — Calendar events (create, update, delete, list, search, freebusy)
17
18pub mod agent_tool;
19pub mod budget_tool;
20pub mod calendar_tool;
21pub mod cron_tool;
22pub mod email_tool;
23pub mod knowledge_tool;
24pub mod marketplace_tool;
25pub mod persona_tool;
26pub mod project_tool;
27pub mod resource_tool;
28pub mod security_tool;
29
30pub use agent_tool::AgentTool as KernelAgentTool;
31pub use budget_tool::BudgetTool;
32pub use calendar_tool::CalendarTool;
33pub use cron_tool::CronTool;
34pub use email_tool::EmailTool;
35pub use knowledge_tool::KnowledgeTool;
36pub use marketplace_tool::MarketplaceTool;
37pub use persona_tool::PersonaTool;
38pub use project_tool::ProjectTool;
39pub use resource_tool::ResourceTool;
40pub use security_tool::SecurityTool;
41
42use crate::types::AgentId;
43use crate::KernelHandle;
44use oxi_sdk::ToolRegistry;
45
46/// Register all kernel domain tools into the registry.
47///
48/// Called by [`super::kernel_bridge::OxiosKernelBridge`] during agent build.
49/// This is the canonical list of kernel tools available in oxios agents.
50pub fn register_all_kernel_tools(registry: &ToolRegistry, kernel: &KernelHandle, _agent_id: &str) {
51    let agent_uuid = AgentId::new_v4();
52
53    // ExecTool (stores Arc<KernelHandle>)
54    registry.register(crate::tools::ExecTool::from_kernel(kernel));
55
56    // Memory tools (each stores Arc<KernelHandle>)
57    registry.register(crate::tools::MemoryReadTool::from_kernel(kernel));
58    registry.register(crate::tools::MemorySearchTool::from_kernel(kernel));
59    registry.register(crate::tools::MemoryWriteTool::from_kernel(kernel));
60
61    // Kernel domain tools (take &KernelHandle)
62    registry.register(ProjectTool::from_kernel(kernel));
63    registry.register(KernelAgentTool::from_kernel(kernel));
64    registry.register(PersonaTool::from_kernel(kernel));
65    registry.register(CronTool::from_kernel(kernel));
66    registry.register(SecurityTool::from_kernel(kernel));
67    registry.register(BudgetTool::from_kernel(kernel));
68    registry.register(ResourceTool::from_kernel(kernel));
69
70    // A2A tools (each stores Arc<KernelHandle>)
71    registry.register(crate::tools::A2aDelegateTool::from_kernel(
72        kernel, agent_uuid,
73    ));
74    registry.register(crate::tools::A2aSendTool::from_kernel(kernel, agent_uuid));
75    registry.register(crate::tools::A2aQueryTool::from_kernel(kernel));
76
77    // MCP tool wrapper (stores Arc<KernelHandle>)
78    registry.register(crate::tools::McpToolWrapper::from_kernel(
79        kernel,
80        "",
81        "",
82        "MCP tools via bridge".into(),
83        serde_json::json!({"type": "object", "properties": {}}),
84    ));
85
86    // KnowledgeTool (markdown note management)
87    registry.register(KnowledgeTool::from_kernel(kernel));
88
89    // Browser (optional feature, stores Arc<KernelHandle>)
90    #[cfg(feature = "native-browser")]
91    {}
92
93    // Marketplace (ClawHub — search, install, update)
94    registry.register(MarketplaceTool::from_kernel(kernel));
95
96    // Calendar (optional — only if [calendar] is enabled)
97    if let Some(calendar_tool) = CalendarTool::try_from_kernel(kernel) {
98        registry.register(calendar_tool);
99    }
100
101    // Email (optional — only if [email] is enabled)
102    if let Some(email_tool) = EmailTool::try_from_kernel(kernel) {
103        registry.register(email_tool);
104    }
105}