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 image_generation_tool;
24pub mod knowledge_tool;
25pub mod marketplace_tool;
26pub mod mount_tool;
27pub mod persona_tool;
28pub mod project_tool;
29pub mod resource_tool;
30pub mod security_tool;
31pub mod skill_forge_tool;
32
33pub use agent_tool::AgentTool as KernelAgentTool;
34pub use budget_tool::BudgetTool;
35pub use calendar_tool::CalendarTool;
36pub use cron_tool::CronTool;
37pub use email_tool::EmailTool;
38pub use image_generation_tool::ImageGenerationTool;
39pub use knowledge_tool::KnowledgeTool;
40pub use marketplace_tool::MarketplaceTool;
41pub use mount_tool::MountTool;
42pub use persona_tool::PersonaTool;
43pub use project_tool::ProjectTool;
44pub use resource_tool::ResourceTool;
45pub use security_tool::SecurityTool;
46pub use skill_forge_tool::SkillForgeTool;
47
48use crate::KernelHandle;
49use crate::tools::{AskUserTool, MemoryReadTool, MemorySearchTool, MemoryWriteTool};
50use crate::types::AgentId;
51use oxi_sdk::ToolRegistry;
52
53/// Register all kernel domain tools into the registry.
54///
55/// Called by [`super::kernel_bridge::OxiosKernelBridge`] during agent build.
56/// This is the canonical list of kernel tools available in oxios agents.
57pub fn register_all_kernel_tools(registry: &ToolRegistry, kernel: &KernelHandle, _agent_id: &str) {
58    let agent_uuid = AgentId::new_v4();
59
60    // ExecTool (stores Arc<KernelHandle>)
61    registry.register(crate::tools::ExecTool::from_kernel(kernel));
62
63    // Memory tools — MemoryManager-backed, registered unconditionally.
64    // Oxios is a personal agent OS: every agent gets memory read + write.
65    // The CSpace-gated path in registration.rs is removed (redundant).
66    // See docs/designs/2026-07-11-memory-system-overhaul-design.md Phase 1.
67    registry.register(MemoryWriteTool::from_kernel(kernel));
68    registry.register(MemoryReadTool::from_kernel(kernel));
69    registry.register(MemorySearchTool::from_kernel(kernel));
70
71    // Subagent tool — oxi-agent's native `subagent` tool (RFC-035 gap 3).
72    // Wired via AgentConfig.subagent_runner (set in agent_runtime.rs).
73    // When the runner is Some, executes in-process; when None, falls back
74    // to the CLI spawn path (which is dormant in oxios — no `oxi` binary).
75    registry.register(oxi_agent::SubagentTool::new());
76
77    // Kernel domain tools (take &KernelHandle)
78    registry.register(ProjectTool::from_kernel(kernel));
79    registry.register(MountTool::from_kernel(kernel));
80    registry.register(KernelAgentTool::from_kernel(kernel));
81    registry.register(PersonaTool::from_kernel(kernel));
82    registry.register(CronTool::from_kernel(kernel));
83    registry.register(SecurityTool::from_kernel(kernel));
84    registry.register(BudgetTool::from_kernel(kernel));
85    registry.register(ResourceTool::from_kernel(kernel));
86
87    // A2A tools (each stores Arc<KernelHandle>)
88    registry.register(crate::tools::A2aDelegateTool::from_kernel(
89        kernel, agent_uuid,
90    ));
91    registry.register(crate::tools::A2aSendTool::from_kernel(kernel, agent_uuid));
92    registry.register(crate::tools::A2aQueryTool::from_kernel(kernel));
93
94    // MCP tool wrapper (stores Arc<KernelHandle>)
95    registry.register(crate::tools::McpToolWrapper::from_kernel(
96        kernel,
97        "",
98        "",
99        "MCP tools via bridge".into(),
100        serde_json::json!({"type": "object", "properties": {}}),
101    ));
102
103    // KnowledgeTool (markdown note management)
104    registry.register(KnowledgeTool::from_kernel(kernel));
105
106    // ask_user (RFC-027): agent-driven clarification via event bus + oneshot
107    registry.register(AskUserTool::new(
108        kernel.infra.pending_ask_user(),
109        kernel.infra.event_bus_clone(),
110    ));
111
112    // Marketplace (ClawHub — search, install, update)
113    registry.register(MarketplaceTool::from_kernel(kernel));
114
115    // Skill Forge (authoring: create/validate/package/import/list/get/delete)
116    registry.register(SkillForgeTool::from_kernel(kernel));
117
118    // Calendar (optional — only if [calendar] is enabled)
119    if let Some(calendar_tool) = CalendarTool::try_from_kernel(kernel) {
120        registry.register(calendar_tool);
121    }
122
123    // Email — always registered; returns a helpful setup error when unconfigured.
124    // The shared RwLock<Option<EmailApi>> slot is swapped in at runtime via the
125    // web UI setup endpoint, so no daemon restart is needed to activate email.
126    registry.register(EmailTool::from_kernel(kernel));
127    // Image generation (opt-in — only when [image-gen].enabled = true).
128    if kernel.infra.config().image_gen.enabled {
129        registry.register(ImageGenerationTool::from_kernel(kernel));
130    }
131}