From 3cdee2e78f30e6e790e516d8bdeef4eef396ff87 Mon Sep 17 00:00:00 2001 From: Charles Packer Date: Fri, 2 Jan 2026 22:16:28 -0800 Subject: [PATCH] fix: include client_tools in streaming requires_approval_tools (#8230) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When streaming, the LLM adapter needs to know which tools require approval so it can emit ApprovalRequestMessage instead of ToolCallMessage. Client-side tools were being passed to the agent but not included in the requires_approval_tools list passed to the streaming interface. This caused the streaming interface to emit tool_call_message for client tools, but the stop_reason was still requires_approval, resulting in empty approvals arrays on the client side. 🤖 Generated with [Letta Code](https://letta.com) Co-authored-by: Letta --- letta/agents/letta_agent_v3.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/letta/agents/letta_agent_v3.py b/letta/agents/letta_agent_v3.py index 06e6d508..8e13500b 100644 --- a/letta/agents/letta_agent_v3.py +++ b/letta/agents/letta_agent_v3.py @@ -669,7 +669,8 @@ class LettaAgentV3(LettaAgentV2): use_assistant_message=False, # NOTE: set to false requires_approval_tools=self.tool_rules_solver.get_requires_approval_tools( set([t["name"] for t in valid_tools]) - ), + ) + + [ct.name for ct in self.client_tools], step_id=step_id, actor=self.actor, )