diff --git a/src/cli/App.tsx b/src/cli/App.tsx
index b7fc2e8..4efe3aa 100644
--- a/src/cli/App.tsx
+++ b/src/cli/App.tsx
@@ -134,7 +134,7 @@ import { PendingApprovalStub } from "./components/PendingApprovalStub";
import { PinDialog, validateAgentName } from "./components/PinDialog";
import { ProviderSelector } from "./components/ProviderSelector";
import { ReasoningMessage } from "./components/ReasoningMessageRich";
-import { formatUsageStats } from "./components/SessionStats";
+import { formatDuration, formatUsageStats } from "./components/SessionStats";
// InlinePlanApproval kept for easy rollback if needed
// import { InlinePlanApproval } from "./components/InlinePlanApproval";
import { StatusMessage } from "./components/StatusMessage";
@@ -166,6 +166,7 @@ import {
} from "./helpers/diff";
import { setErrorContext } from "./helpers/errorContext";
import { formatErrorDetails } from "./helpers/errorFormatter";
+import { formatCompact } from "./helpers/format";
import { parsePatchOperations } from "./helpers/formatArgsDisplay";
import {
buildMemoryReminder,
@@ -9795,55 +9796,61 @@ Plan file path: ${planFilePath}`;
{/* Exit stats - shown when exiting via double Ctrl+C */}
- {showExitStats && (
-
-
- {formatUsageStats({
- stats: sessionStatsRef.current.getSnapshot(),
- })}
-
- {/* Alien + Resume commands */}
-
- {" ▗▖▗▖ "}
- Resume this agent with:
-
-
- {"▙█▜▛█▟ "}
-
- {/* Show -n "name" if agent has name and is pinned, otherwise --agent */}
- {agentName &&
- (settingsManager.getLocalPinnedAgents().includes(agentId) ||
- settingsManager.getGlobalPinnedAgents().includes(agentId))
- ? `letta -n "${agentName}"`
- : `letta --agent ${agentId}`}
-
-
- {/* Only show conversation hint if not on default (default is resumed automatically) */}
- {conversationId !== "default" ? (
- <>
+ {showExitStats &&
+ (() => {
+ const stats = sessionStatsRef.current.getSnapshot();
+ return (
+
+ {/* Alien + Stats (3 lines) */}
- {"▝▜▛▜▛▘ "}
- Resume this conversation with:
-
-
- {" ▀ ▀ "}
-
- {`letta --conv ${conversationId}`}
+ {" ▗▖▗▖ "}
+
+ Total duration (API): {formatDuration(stats.totalApiMs)}
- >
- ) : (
- <>
- {"▝▜▛▜▛▘ "}
+ {"▙█▜▛█▟ "}
+
+ Total duration (wall):{" "}
+ {formatDuration(stats.totalWallMs)}
+
- {" ▀ ▀ "}
+ {"▝▜▛▜▛▘ "}
+
+ Session usage: {stats.usage.stepCount} steps,{" "}
+ {formatCompact(stats.usage.promptTokens)} input,{" "}
+ {formatCompact(stats.usage.completionTokens)} output
+
- >
- )}
-
- )}
+ {/* Resume commands (no alien) */}
+
+ Resume this agent with:
+
+ {/* Show -n "name" if agent has name and is pinned, otherwise --agent */}
+ {agentName &&
+ (settingsManager
+ .getLocalPinnedAgents()
+ .includes(agentId) ||
+ settingsManager
+ .getGlobalPinnedAgents()
+ .includes(agentId))
+ ? `letta -n "${agentName}"`
+ : `letta --agent ${agentId}`}
+
+ {/* Only show conversation hint if not on default (default is resumed automatically) */}
+ {conversationId !== "default" && (
+ <>
+
+ Resume this conversation with:
+
+ {`letta --conv ${conversationId}`}
+
+ >
+ )}
+
+ );
+ })()}
{/* Input row - always mounted to preserve state */}
diff --git a/src/cli/components/AgentInfoBar.tsx b/src/cli/components/AgentInfoBar.tsx
index 5efc3f7..2c2cd80 100644
--- a/src/cli/components/AgentInfoBar.tsx
+++ b/src/cli/components/AgentInfoBar.tsx
@@ -44,7 +44,7 @@ export const AgentInfoBar = memo(function AgentInfoBar({
}
// Alien ASCII art lines (4 lines tall, with 2-char indent + extra space before text)
- const alienLines = [" ▗▖▗▖ ", " ▙█▜▛█▟ ", " ▝▜▛▜▛▘ ", " ▀ ▀ "];
+ const alienLines = [" ▗▖▗▖ ", " ▙█▜▛█▟ ", " ▝▜▛▜▛▘ ", " "];
return (
@@ -107,9 +107,9 @@ export const AgentInfoBar = memo(function AgentInfoBar({
{agentId}
- {/* Alien + Conversation ID */}
+ {/* Phantom alien row + Conversation ID */}
- {alienLines[3]}
+ {alienLines[3]}
{conversationId && conversationId !== "default" ? (
{conversationId}
) : (