From d6a9870b9ee9f22a780008665588dd39a7dc22ca Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 11 Apr 2026 20:53:29 -0400 Subject: [PATCH] fix: run_one_agent uses memory tools as base, not filter When def.tools was non-empty, it was filtering to ONLY those tools instead of using memory tools as base + adding extras. This broke digest agent (and any agent with explicit tools list) by removing all 13 base memory tools. Fixed to match the pattern in unconscious.rs: - base = memory_tools() - extras from journal_tools() if listed in def.tools Co-Authored-By: Proof of Concept --- src/agent/oneshot.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/agent/oneshot.rs b/src/agent/oneshot.rs index 9a2fed9..8f4fd3d 100644 --- a/src/agent/oneshot.rs +++ b/src/agent/oneshot.rs @@ -307,14 +307,21 @@ pub fn run_one_agent( defs::run_agent(store, &def, effective_count, &Default::default())? }; - // Filter tools based on agent def, add filesystem output tool - let all_tools = super::tools::memory_and_journal_tools(); + // Base memory tools + extras from agent def (matching unconscious.rs pattern) + let base_tools = super::tools::memory::memory_tools().to_vec(); + let extra_tools = super::tools::memory::journal_tools().to_vec(); let mut effective_tools: Vec = if def.tools.is_empty() { - all_tools.to_vec() + let mut all = base_tools; + all.extend(extra_tools); + all } else { - all_tools.into_iter() - .filter(|t| def.tools.iter().any(|w| w == &t.name)) - .collect() + let mut tools = base_tools; + for name in &def.tools { + if let Some(t) = extra_tools.iter().find(|t| t.name == *name) { + tools.push(t.clone()); + } + } + tools }; effective_tools.push(super::tools::Tool { name: "output",