diff --git a/packages/cli/src/commands/status.ts b/packages/cli/src/commands/status.ts index 785009ae1..9d3f3b6c3 100644 --- a/packages/cli/src/commands/status.ts +++ b/packages/cli/src/commands/status.ts @@ -380,13 +380,13 @@ async function showFallbackStatus(): Promise { // Use claude-code as default agent for fallback introspection const agent = getAgentByName("claude-code"); - for (const session of allTmux.sort()) { - const activityTs = await getTmuxActivity(session); - const lastActivity = activityTs ? formatAge(activityTs) : "-"; - console.log(` ${chalk.green(session)} ${chalk.dim(`(${lastActivity})`)}`); + const sortedSessions = allTmux.sort(); + + // Pre-fetch activity and introspection in parallel + const details = await Promise.all( + sortedSessions.map(async (session) => { + const activityTsPromise = getTmuxActivity(session).catch(() => null); - // Try introspection even without config - try { const sessionObj: Session = { id: session, projectId: "", @@ -402,12 +402,27 @@ async function showFallbackStatus(): Promise { lastActivityAt: new Date(), metadata: {}, }; - const introspection = await agent.getSessionInfo(sessionObj); - if (introspection?.summary) { - console.log(` ${chalk.dim("Claude:")} ${introspection.summary.slice(0, 65)}`); - } - } catch { - // Not critical + + const introspectionPromise = agent.getSessionInfo(sessionObj).catch(() => null); + + const [activityTs, introspection] = await Promise.all([ + activityTsPromise, + introspectionPromise, + ]); + + return { activityTs, introspection }; + }), + ); + + for (let i = 0; i < sortedSessions.length; i++) { + const session = sortedSessions[i]; + const { activityTs, introspection } = details[i]; + + const lastActivity = activityTs ? formatAge(activityTs) : "-"; + console.log(` ${chalk.green(session)} ${chalk.dim(`(${lastActivity})`)}`); + + if (introspection?.summary) { + console.log(` ${chalk.dim("Claude:")} ${introspection.summary.slice(0, 65)}`); } } console.log();