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();