diff --git a/src/renderer/components/ChatPane.tsx b/src/renderer/components/ChatPane.tsx
index 73bb69b..728a5ce 100644
--- a/src/renderer/components/ChatPane.tsx
+++ b/src/renderer/components/ChatPane.tsx
@@ -530,7 +530,7 @@ export function ChatPane({
)}
{isSessionBusy && !pendingApproval && !pendingUserInput && (() => {
- const label = summarizeSessionActivity(sessionActivity);
+ const label = session.currentIntent ?? summarizeSessionActivity(sessionActivity);
return (
@@ -593,6 +593,7 @@ export function ChatPane({
isActive={isTurnActive(item, itemIndex)}
turnStartedAt={item.turnStartedAt}
sessionId={session.id}
+ currentIntent={session.currentIntent}
agentNames={item.agentNames}
isLastRunPanel={item.isLastRunPanel}
onDiscard={onDiscardRunChanges}
diff --git a/src/renderer/components/chat/TurnActivityPanel.tsx b/src/renderer/components/chat/TurnActivityPanel.tsx
index 0e7a278..11d4ce7 100644
--- a/src/renderer/components/chat/TurnActivityPanel.tsx
+++ b/src/renderer/components/chat/TurnActivityPanel.tsx
@@ -41,6 +41,7 @@ export interface TurnActivityPanelProps {
isActive: boolean;
turnStartedAt?: string;
sessionId: string;
+ currentIntent?: string;
agentNames?: ReadonlySet;
isLastRunPanel?: boolean;
onDiscard?: (sessionId: string, runId: string, files?: ProjectGitFileReference[]) => Promise;
@@ -418,6 +419,7 @@ export function TurnActivityPanel({
isActive,
turnStartedAt,
sessionId,
+ currentIntent,
agentNames,
isLastRunPanel,
onDiscard,
@@ -471,8 +473,12 @@ export function TurnActivityPanel({
return groupActivityStream(stream);
}, [thinkingMessages, scopedEvents]);
- // Extract intent text for the header
- const intentText = useMemo(() => extractLatestIntent(scopedEvents), [scopedEvents]);
+ // Prefer the session-level normalized intent when active; fall back to
+ // scanning run timeline for report_intent tool calls (backward compat).
+ const intentText = useMemo(
+ () => (isActive ? currentIntent : undefined) ?? extractLatestIntent(scopedEvents),
+ [isActive, currentIntent, scopedEvents],
+ );
const fallbackSummary = useMemo(
() => !intentText ? generateActivitySummary(scopedEvents) : undefined,
[intentText, scopedEvents],