diff --git a/AgentCrew/modules/chat/message/tool_manager.py b/AgentCrew/modules/chat/message/tool_manager.py index 72b8590f..7869f89c 100644 --- a/AgentCrew/modules/chat/message/tool_manager.py +++ b/AgentCrew/modules/chat/message/tool_manager.py @@ -22,6 +22,13 @@ def __init__(self, message_handler): self._pending_confirmations = {} # Store futures for confirmation requests self._next_confirmation_id = 0 # ID counter for confirmation requests self.yolo_mode = False # Enable/disable auto-approval mode + self.session_overrided_yolo_mode: bool | None = None # Session-level override for yolo mode + + def get_effective_yolo_mode(self) -> bool: + """Determine the effective YOLO mode considering session override.""" + if self.session_overrided_yolo_mode is not None: + return self.session_overrided_yolo_mode + return self.yolo_mode def _load_persistent_auto_approved_tools(self): """Load persistent auto-approved tools from config.""" @@ -73,7 +80,7 @@ async def execute_tool(self, tool_use: Dict[str, Any]): if ( not self.message_handler.is_non_interactive - and not self.yolo_mode + and not self.get_effective_yolo_mode() and tool_name not in self._auto_approved_tools ): # Request confirmation from the user diff --git a/AgentCrew/modules/console/command_handlers.py b/AgentCrew/modules/console/command_handlers.py index 7f2ca8b7..94a9e21d 100644 --- a/AgentCrew/modules/console/command_handlers.py +++ b/AgentCrew/modules/console/command_handlers.py @@ -128,6 +128,16 @@ def handle_edit_config_command(self) -> None: config_mgmt = ConfigManagement() config_mgmt.reload_agents_from_config() + def handle_toggle_session_yolo_command(self) -> None: + """ + Toggle session-level YOLO mode override for auto-approval of tool calls. + """ + new_status = not self.message_handler.tool_manager.get_effective_yolo_mode() + self.message_handler.tool_manager.session_overrided_yolo_mode = new_status + + status_text = Text(f"🚀 YOLO mode is now {'enabled' if new_status else 'disabled'} for this session", style=RICH_STYLE_YELLOW) + self.console.print(status_text) + def handle_export_agent_command( self, agent_names_str: str, output_file: str ) -> None: diff --git a/AgentCrew/modules/console/completers.py b/AgentCrew/modules/console/completers.py index 43b3d79a..31e7266f 100644 --- a/AgentCrew/modules/console/completers.py +++ b/AgentCrew/modules/console/completers.py @@ -214,6 +214,7 @@ def get_command_completions(self, document): ("/help", "Show help message"), ("/retry", "Retry the last assistant response"), ("/toggle_transfer", "Toggle agent transfer enforcement on/off"), + ("/toggle_session_yolo", "Toggle Auto-Approve Mode for Tool Calls (this session only)"), ("/exit", "Exit the application"), ("/quit", "Exit the application"), ] diff --git a/AgentCrew/modules/console/console_ui.py b/AgentCrew/modules/console/console_ui.py index 2b502dd6..453f7330 100644 --- a/AgentCrew/modules/console/console_ui.py +++ b/AgentCrew/modules/console/console_ui.py @@ -18,6 +18,7 @@ import AgentCrew from AgentCrew.modules.chat.message_handler import MessageHandler, Observer from AgentCrew.modules import logger +from AgentCrew.modules.config import ConfigManagement from .utils import agent_evaluation_remove from .constants import ( @@ -73,6 +74,12 @@ def __init__(self, message_handler: MessageHandler): ) self.command_handlers = CommandHandlers(self.console, self.message_handler) + config_manager = ConfigManagement() + global_config = config_manager.read_global_config_data() + yolo_mode_config = global_config.get("global_settings", {}).get("yolo_mode", False) + self.message_handler.tool_manager.yolo_mode = yolo_mode_config + self.message_handler.tool_manager.session_overrided_yolo_mode = yolo_mode_config + def listen(self, event: str, data: Any = None): """ Update method required by the Observer interface. Handles events from the MessageHandler. @@ -420,6 +427,11 @@ def start(self): self.print_welcome_message() continue + # Handle toggle_session_yolo command directly (console only, session-based) + elif user_input.strip() == "/toggle_session_yolo": + self.command_handlers.handle_toggle_session_yolo_command() + continue + elif user_input.strip().startswith("/export_agent "): # Extract arguments after "/export_agent " args = user_input.strip()[14:].strip() diff --git a/AgentCrew/modules/console/display_handlers.py b/AgentCrew/modules/console/display_handlers.py index 8fc954ba..8eef75ed 100644 --- a/AgentCrew/modules/console/display_handlers.py +++ b/AgentCrew/modules/console/display_handlers.py @@ -312,6 +312,10 @@ def print_welcome_message(self, version: str): "Use '/toggle_transfer' to toggle agent transfer enforcement.", style=RICH_STYLE_YELLOW, ), + Text( + "Use '/toggle_session_yolo' to toggle YOLO mode (auto-approval of tool calls) in this session only.", + style=RICH_STYLE_YELLOW, + ), Text("Use '/list' to list saved conversations.", style=RICH_STYLE_YELLOW), Text( "Use '/load ' or '/load ' to load a conversation.", diff --git a/AgentCrew/modules/console/input_handler.py b/AgentCrew/modules/console/input_handler.py index 93f27faa..8e7de3f8 100644 --- a/AgentCrew/modules/console/input_handler.py +++ b/AgentCrew/modules/console/input_handler.py @@ -305,6 +305,11 @@ def get_user_input(self): ) self.clear_buffer() + # Display YOLO mode indicator if enabled + if self.message_handler.tool_manager.get_effective_yolo_mode(): + yolo_indicator = Text("🔥 YOLO MODE ENABLED 🔥", style=RICH_STYLE_YELLOW_BOLD) + self.console.print(yolo_indicator) + # Wait for input while allowing events to be processed while True: try: