diff --git a/agent/tool_executor.py b/agent/tool_executor.py index 358c1a0a8..b249de3de 100644 --- a/agent/tool_executor.py +++ b/agent/tool_executor.py @@ -753,10 +753,14 @@ def execute_tool_calls_sequential(agent, assistant_message, messages: list, effe elif function_name == "delegate_task": tasks_arg = function_args.get("tasks") if tasks_arg and isinstance(tasks_arg, list): - spinner_label = f"๐Ÿ”€ delegating {len(tasks_arg)} tasks" + spinner_label = f"๐Ÿ”€ delegating {len(tasks_arg)} tasks ยท (/agents to monitor)" else: goal_preview = (function_args.get("goal") or "")[:30] - spinner_label = f"๐Ÿ”€ {goal_preview}" if goal_preview else "๐Ÿ”€ delegating" + spinner_label = ( + f"๐Ÿ”€ {goal_preview} ยท (/agents to monitor)" + if goal_preview + else "๐Ÿ”€ delegating ยท (/agents to monitor)" + ) spinner = None if agent._should_emit_quiet_tool_messages() and agent._should_start_quiet_spinner(): face = random.choice(KawaiiSpinner.get_waiting_faces()) diff --git a/ui-tui/src/components/thinking.tsx b/ui-tui/src/components/thinking.tsx index 0d9ecee87..ce90cca21 100644 --- a/ui-tui/src/components/thinking.tsx +++ b/ui-tui/src/components/thinking.tsx @@ -1073,6 +1073,10 @@ export const ToolTrail = memo(function ToolTrail({ const branch: TreeBranch = index === groups.length - 1 ? 'last' : 'mid' const childRails = nextTreeRails(rails, branch) const hasInlineSubagents = inlineDelegateKey === group.key + // Surface the /agents hint the moment a delegate group appears โ€” + // while it's still in-flight and before any subagent has + // registered โ€” so users can open the live monitor immediately. + const isDelegateGroup = group.label.startsWith('Delegate Task') return ( @@ -1083,6 +1087,11 @@ export const ToolTrail = memo(function ToolTrail({ <> โ— {toolLabel(group)} + {isDelegateGroup ? ( + + {' (/agents to monitor)'} + + ) : null} } rails={rails}