Amplifier Module

Name Every Tab

Self-describing terminal titles, zero LLM overhead

A wall of AI terminals that all say the same thing is a tracking problem

amplifier-module-auto-title makes each tab say what it's actually doing, so you never click tab-to-tab guessing again.

First: is this a real, shipped thing? →

zsh
zsh
my-project | Build: Dashboard UI
zsh

kenotron-ms/amplifier-module-auto-title is MIT-licensed and tested

A single-author project by Ken Chau — 12 commits, in active use as of its last commit — ships with a unit-test suite that all passes.

So what's the pain it earns the right to solve? →

14
tests, all passing (pytest re-run)
12
commits, single author (Ken Chau)
MIT
licensed · © 2026 Ken Chau
0
pull requests & issues

Multiple sessions open, and every tab reads the same generic title

One session in one terminal is trivial to track. Open several and they all show the same shell default — so you fly blind, clicking tab to tab to rediscover which is which.

The fix: give every tab a title that describes itself. →

zsh
zsh
zsh
zsh
zsh

Each tab gets a self-describing title: [project] | [task]

The format is '[dir-name] | [session name]'. At a glance you read the project and exactly what that session is doing.

But how does it stay free of extra model calls? →

# Real examples from the README my-project | Build: Dashboard UImy-project | Debug: Auth Flowmy-project | Test: Payment Module # Optional prefix via CLAUDE_TITLE_PREFIX export CLAUDE_TITLE_PREFIX='🤖' 🤖 my-project | Build: Dashboard UI

A prompt:complete hook reuses a name it already has

The hook fires at priority 200 — after hooks-session-naming at 100 — so the session name is already in metadata.json. It emits an ANSI OSC0 escape. No separate LLM call.

This clean form wasn't the first attempt. →

1
hooks-session-naming runspriority 100 — computes the session name into metadata.json
2
auto-title fires on prompt:completepriority 200 — reads the name already computed, no LLM inference
3
Writes the OSC0 escape to /dev/ttyreaches the terminal even when stdout/stderr are piped

Three approaches hardened a trick into reliable clarity

Skill-driven bash first, then a fire-and-forget delegate, then the tested prompt:complete hook that writes to /dev/tty (piped-safe) and de-dupes redundant updates.

The result: clarity you install once. →

  1. 2026-02-26 — skill-driven bash (96c98e4), adapted from bluzername/claude-code-terminal-title
  2. 2026-03-12 — fire-and-forget delegate pattern (2e94692)
  3. 2026-03-30 — prompt:complete hook + unit tests (0ce6837, 5f8a75b)

Install once with --app and the whole wall labels itself

A global app bundle auto-composes with every session — no per-project config. Every tab becomes '[project] | [task]', with no extra LLM call. The wall of terminals reads itself.

And there's a pattern worth keeping. →

# One global install, every session covered amplifier bundle add \ git+https://github.com/kenotron-ms/amplifier-module-auto-title@main \ --app # Registers a global app bundle in ~/.amplifier/
The pattern to keep

Reuse what you've already computed

The cheapest UX win is surfacing data you already have — not calling the model again. Auto-title turned a name it already had into instant clarity, for free.

Sources

Research Methodology

Data as of: last commit 2026-03-30 (corpus snapshot)

Feature status: Shipped and in active use · bundle/behavior v2.0.0, hook package v1.0.0

Repository: kenotron-ms/amplifier-module-auto-title (default branch main)

Commands run:

Gaps: No numeric CPU/latency figure claimed — "zero overhead" means "no extra LLM call" (verified in code/docs). The "5 tabs / zsh" scenario is illustrative framing (README.md:11), not verbatim. hooks-session-naming's own repo was not inspected this pass.

Primary contributor: Ken Chau (sole author, 12/12 commits).

More Amplifier Stories