Warning
Unmaintained — retired on 2026-10-03.
Terminal title state handling is now built into OMP 18.5; use tui.titleState and tui.titleSpinner instead of this extension.
Best-effort cross-platform terminal title status extension for Oh My Pi / Pi coding agent sessions.
It prefixes the visible terminal title with:
✳when idle⠂/⠐alternating while running, including while OMP is compacting the session?!when theasktool is waiting for input
- OMP 18.5 ships a complete terminal title state machine in
src/utils/title-generator.ts(setTerminalTitle/writeTerminalTitle, lines 585-638), which usesSetConsoleTitleWon Windows and OSC 0 elsewhere — the same mechanism this extension relied on. - Built-in titles already carry the same
idle | working | attentionstates throughbuildTerminalTitleWithState(src/utils/title-generator.ts:826-857), rendered with theπglyph and theTERMINAL_TITLE_SPINNER_STYLESspinners (braille/pulse/dots/line). - The built-in attention detection is structurally identical to this extension: both listen for
tool_execution_startwithtoolName === 'ask'(src/modes/controllers/event-controller.ts:1744-1747here versussrc/extension.ts:501-510in this plugin). - Because both writers target the same tab title, they overwrite each other: the built-in updater clears this extension's idle prefix, so the two produce visible title flicker when installed together.
- Every built-in behavior this extension offered as customization is now exposed as configuration keys:
tui.titleState(boolean, defaulttrue) andtui.titleSpinner(enum, defaultbraille) insrc/modes/settings.ts:454-472.
Remove this extension from your --extension path or extensions settings entry, then configure the built-in behavior instead:
tui:
titleState: true
titleSpinner: brailletui.titleState: false disables built-in title state updates, and tui.titleSpinner selects one of the built-in spinner styles (braille, pulse, dots, line).
By default the extension uses ✳ for idle, alternates ⠂ / ⠐ while running, and uses ?! while the ask tool is waiting for input. Configure icons.running to use a static running prefix instead.
For per-user overrides, define ompTitleIcon.icons in ~/.omp/agent/config.yml:
ompTitleIcon:
icons:
idle: "✳"
running: "⟳"
ask: "?!"~/.omp/agent/config.yml is the primary config source. If that file does not define an ompTitleIcon.icons block, the extension falls back to the legacy ~/.omp/agent/settings.json location:
If the canonical ~/.omp/agent/config.yml exists but is unreadable, cannot be parsed, or has an invalid structure, the extension does not consult legacy ~/.omp/agent/settings.json and uses the built-in defaults instead.
Once ~/.omp/agent/config.yml defines ompTitleIcon.icons, the extension does not merge missing fields from the legacy ~/.omp/agent/settings.json file. Any icon values omitted there fall back to the built-in defaults instead.
{
"ompTitleIcon": {
"icons": {
"idle": "✳",
"running": "⟳",
"ask": "?!"
}
}
}Set any icon to an empty string to remove the prefix for that state.
ompTitleIcon:
icons:
idle: ""
running: "⟳"
ask: "?!"The title update remains best-effort: the configured prefixes are only visible when your terminal host accepts OSC title changes and does not immediately overwrite them.
This repository now includes a marketplace catalog for anton1615/omp-title-icon at .claude-plugin/marketplace.json, but current OMP marketplace/plugin-root loading does not execute extension modules declared only through package.json -> omp.extensions. In the current OMP architecture, marketplace install is prepared but not yet functional for this plugin type.
Use one of the local extension loading paths below until upstream marketplace support for extension-module plugins exists.
bun --cwd <path-to-oh-my-pi>/packages/coding-agent src/cli.ts --extension <path-to-omp-title-icon>Add the plugin root as an explicit extension path in .omp/settings.json:
{
"extensions": [
"<path-to-omp-title-icon>"
]
}- Interactive terminal host that supports OSC title updates
- Best-effort support across Windows, macOS, and Linux terminal environments
- The host terminal must allow applications to set the visible title (for example, Windows Terminal profiles must not set
suppressApplicationTitle: true)
The extension subscribes to session, agent, and tool lifecycle events, computes the visible title from session name -> cwd basename -> π, and writes it through OSC-compatible terminal title updates. It briefly force-reasserts idle titles after key state transitions, and keeps reasserting animated running/ask titles until those states end.
This is a best-effort takeover strategy. It improves title stability, but does not guarantee permanent ownership if your terminal ignores OSC title writes or another tool continuously rewrites the title.
bun install
bun run check- Open an interactive terminal host that supports OSC title updates, such as Windows Terminal, iTerm2, or a Linux terminal emulator with application-title support.
- If you are using Windows Terminal, make sure the active profile does not set
suppressApplicationTitle: true. - Start OMP with the local extension path, substituting your own checkout paths:
bun --cwd <path-to-oh-my-pi>/packages/coding-agent src/cli.ts --extension <path-to-omp-title-icon>- Start a normal prompt. While the model is responding, the title should alternate between the built-in running frames or keep your configured running prefix.
- Trigger a compact cycle. While OMP is compacting the session, the title should keep the same running animation or configured running prefix.
- Use a prompt that triggers the
asktool. While the question is waiting for input, the title should start with your configured ask prefix. - When the turn is idle again, the title should return to your configured idle prefix.
- If the title never changes, confirm your terminal host supports OSC title updates and allows applications to set the visible title.
- If the title changes briefly and snaps back, check whether your shell profile or prompt module rewrites the title.
- If the visible tab never updates in Windows Terminal, check
suppressApplicationTitlein the active profile. - If you want less competition from OMP's built-in auto-title generation, try launching with
PI_NO_TITLE=1.
- Marketplace metadata for
anton1615/omp-title-iconis checked in at.claude-plugin/marketplace.json. - Current OMP marketplace/plugin-root loading does not activate extension-module plugins that rely only on
package.json -> omp.extensions. - Until upstream support exists, load this plugin via
--extensionor an explicitextensionssetting path.