From 2354bc571e6dc1f220db06b489c72c471c57ba93 Mon Sep 17 00:00:00 2001 From: scutifer Date: Wed, 21 Jan 2026 03:35:32 +0530 Subject: [PATCH] feat(coding-agent): show session name in terminal title and footer (#876) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ⏺ feat(tui): show session name in terminal title and footer - Add updateTerminalTitle() method that sets terminal title to "π - session-name - dirname" (or "π - dirname" if no name) - Update title when session name changes via /name or extension API - Display session name in footer after git branch with bullet separator * chore: update CHANGELOG --- packages/coding-agent/CHANGELOG.md | 1 + .../src/modes/interactive/components/footer.ts | 6 ++++++ .../src/modes/interactive/interactive-mode.ts | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 3579371c..f4de7060 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -10,6 +10,7 @@ - Fixed `write` tool not displaying errors in the UI when execution fails ([#856](https://github.com/badlogic/pi-mono/issues/856)) - Fixed HTML export using default theme instead of user's active theme +- Show session name in the footer and terminal / tab title ## [0.49.2] - 2026-01-19 diff --git a/packages/coding-agent/src/modes/interactive/components/footer.ts b/packages/coding-agent/src/modes/interactive/components/footer.ts index 29d66ce4..255df2ae 100644 --- a/packages/coding-agent/src/modes/interactive/components/footer.ts +++ b/packages/coding-agent/src/modes/interactive/components/footer.ts @@ -109,6 +109,12 @@ export class FooterComponent implements Component { pwd = `${pwd} (${branch})`; } + // Add session name if set + const sessionName = this.session.sessionManager.getSessionName(); + if (sessionName) { + pwd = `${pwd} • ${sessionName}`; + } + // Truncate path if too long to fit width if (pwd.length > width) { const half = Math.floor(width / 2) - 2; diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index b71defdb..2d19ad07 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -447,8 +447,7 @@ export class InteractiveMode { this.isInitialized = true; // Set terminal title - const cwdBasename = path.basename(process.cwd()); - this.ui.terminal.setTitle(`pi - ${cwdBasename}`); + this.updateTerminalTitle(); // Initialize extensions with TUI-based UI context await this.initExtensions(); @@ -469,6 +468,19 @@ export class InteractiveMode { }); } + /** + * Update terminal title with session name and cwd. + */ + private updateTerminalTitle(): void { + const cwdBasename = path.basename(process.cwd()); + const sessionName = this.sessionManager.getSessionName(); + if (sessionName) { + this.ui.terminal.setTitle(`π - ${sessionName} - ${cwdBasename}`); + } else { + this.ui.terminal.setTitle(`π - ${cwdBasename}`); + } + } + /** * Run the interactive mode. This is the main entry point. * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop. @@ -678,6 +690,7 @@ export class InteractiveMode { }, setSessionName: (name) => { this.sessionManager.appendSessionInfo(name); + this.updateTerminalTitle(); }, getSessionName: () => { return this.sessionManager.getSessionName(); @@ -3391,6 +3404,7 @@ export class InteractiveMode { } this.sessionManager.appendSessionInfo(name); + this.updateTerminalTitle(); this.chatContainer.addChild(new Spacer(1)); this.chatContainer.addChild(new Text(theme.fg("dim", `Session name set: ${name}`), 1, 0)); this.ui.requestRender();