From 550b72dd877c230ee78615ab058ca1ff24caa2fb Mon Sep 17 00:00:00 2001 From: BarnacleBoy Date: Mon, 8 Jun 2026 10:29:17 -0700 Subject: [PATCH] fix(cli): gate tool-rendering paths with tool_progress_mode, not quiet_mode quiet_mode was being used to suppress tool-result display when tool_progress_mode was 'off'. But quiet_mode also gates operational status messages, so users with /verbose + tool-progress off lost all status output. Adds a dedicated tool_progress_mode attribute to AIAgent; the tool_executor result-rendering path gates on tool_progress_mode != 'off'. The CLI passes its tool_progress_mode through agent setup and the tool-progress cycle command syncs it onto the live agent. Fixes #33860. --- agent/agent_init.py | 2 ++ agent/tool_executor.py | 2 +- cli.py | 4 ++++ hermes_cli/cli_agent_setup_mixin.py | 1 + run_agent.py | 2 ++ 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/agent/agent_init.py b/agent/agent_init.py index 62de3f2c540..30bb6d83705 100644 --- a/agent/agent_init.py +++ b/agent/agent_init.py @@ -169,6 +169,7 @@ def init_agent( save_trajectories: bool = False, verbose_logging: bool = False, quiet_mode: bool = False, + tool_progress_mode: str = "all", ephemeral_system_prompt: str = None, log_prefix_chars: int = 100, log_prefix: str = "", @@ -280,6 +281,7 @@ def init_agent( agent.save_trajectories = save_trajectories agent.verbose_logging = verbose_logging agent.quiet_mode = quiet_mode + agent.tool_progress_mode = tool_progress_mode agent.ephemeral_system_prompt = ephemeral_system_prompt agent.platform = platform # "cli", "telegram", "discord", "whatsapp", etc. agent._user_id = user_id # Platform user identifier (gateway sessions) diff --git a/agent/tool_executor.py b/agent/tool_executor.py index f908aedb806..36cbad4b886 100644 --- a/agent/tool_executor.py +++ b/agent/tool_executor.py @@ -702,7 +702,7 @@ def execute_tool_calls_concurrent(agent, assistant_message, messages: list, effe if agent._should_emit_quiet_tool_messages(): cute_msg = _get_cute_tool_message_impl(name, args, tool_duration, result=function_result) agent._safe_print(f" {cute_msg}") - elif not agent.quiet_mode: + elif getattr(agent, "tool_progress_mode", "all") != "off": _preview_str = _multimodal_text_summary(function_result) if agent.verbose_logging: print(f" ✅ Tool {i+1} completed in {tool_duration:.2f}s") diff --git a/cli.py b/cli.py index 2bc6e1f81ba..1c32065cf49 100644 --- a/cli.py +++ b/cli.py @@ -7669,6 +7669,10 @@ class HermesCLI(CLIAgentSetupMixin, CLICommandsMixin): if self.agent: self.agent.reasoning_callback = self._current_reasoning_callback() + # Keep the live agent's tool_progress_mode in sync so the + # tool_executor rendering path reflects the new mode this turn, + # without waiting for an agent rebuild. + self.agent.tool_progress_mode = self.tool_progress_mode # Use raw ANSI codes via _cprint so the output is routed through # prompt_toolkit's renderer. self.console.print() with Rich markup diff --git a/hermes_cli/cli_agent_setup_mixin.py b/hermes_cli/cli_agent_setup_mixin.py index 69011c51a94..1041e8fd0b5 100644 --- a/hermes_cli/cli_agent_setup_mixin.py +++ b/hermes_cli/cli_agent_setup_mixin.py @@ -355,6 +355,7 @@ class CLIAgentSetupMixin: disabled_toolsets=self.disabled_toolsets, verbose_logging=self.verbose, quiet_mode=not self.verbose, + tool_progress_mode=getattr(self, "tool_progress_mode", "all"), ephemeral_system_prompt=self.system_prompt if self.system_prompt else None, prefill_messages=self.prefill_messages or None, reasoning_config=self.reasoning_config, diff --git a/run_agent.py b/run_agent.py index 6a1304f42f9..9c720bcbfe0 100644 --- a/run_agent.py +++ b/run_agent.py @@ -358,6 +358,7 @@ class AIAgent: save_trajectories: bool = False, verbose_logging: bool = False, quiet_mode: bool = False, + tool_progress_mode: str = "all", ephemeral_system_prompt: str = None, log_prefix_chars: int = 100, log_prefix: str = "", @@ -430,6 +431,7 @@ class AIAgent: save_trajectories=save_trajectories, verbose_logging=verbose_logging, quiet_mode=quiet_mode, + tool_progress_mode=tool_progress_mode, ephemeral_system_prompt=ephemeral_system_prompt, log_prefix_chars=log_prefix_chars, log_prefix=log_prefix,