diff --git a/src/components/ChatMessage.tsx b/src/components/ChatMessage.tsx
index a959444..a57912b 100644
--- a/src/components/ChatMessage.tsx
+++ b/src/components/ChatMessage.tsx
@@ -539,6 +539,13 @@ export const ChatMessageComponent = memo(function ChatMessageComponent({ message
)}
{message.timestamp && }
+ {!isUser && message.generationTimeMs != null && (
+
+ · {message.generationTimeMs < 1000
+ ? `${message.generationTimeMs}ms`
+ : `${(message.generationTimeMs / 1000).toFixed(1)}s`}
+
+ )}
{isUser && message.sendStatus === 'sending' && (
)}
diff --git a/src/hooks/useGateway.ts b/src/hooks/useGateway.ts
index a155323..c7a2848 100644
--- a/src/hooks/useGateway.ts
+++ b/src/hooks/useGateway.ts
@@ -54,6 +54,8 @@ export function useGateway() {
const [activeSessions, setActiveSessions] = useState>(new Set());
const [unreadSessions, setUnreadSessions] = useState>(new Set());
const [agentIdentity, setAgentIdentity] = useState(null);
+ /** Map of runId → generation duration (ms), preserved across loadHistory reloads */
+ const generationTimesRef = useRef