Shell Pilot 1.20.1

September 5, 2026 · Patch

Sessions spent inside a coding agent or any other interactive tool are now named after the tool. If a session that was nothing but pi ended up titled "Working On Update", this is the fix.

The symptom

Launch the pi agent and work inside it. The shell sees a history of pi, pi update, cle, clear, pi — and the session was titled "Working On Update", then left there. It named neither the tool nor the work. The same happened for claude, aider, codex, for REPLs like python, node and psql, and for ollama.

Root cause

Two independent halves, both in SessionTopicAnalyzer.

First, the headline. The analyzer classifies each command's first token into an activity class. pi has no entry in that map, so every command voted generic — and the generic class's headline verb is the literal fallback "Working On".

Second, the subject. Noun extraction skipped only a command's own grammar, via a table of subcommand words keyed per verb (git, npm, kubectl and friends). There is no entry for pi, so the first argument of pi update was taken as the thing the session is about: "Update".

Underneath both: the commands such a tool runs on your behalf happen inside its own process and never reach the shell hooks. The launch line is all the analyzer will ever see, so the tool's own name is the best description of the session that exists.

The new rules

Example titles

Tests

321 tests in 26 suites pass, up from 313. Eight new cases in SessionTopicAnalyzerTests cover the exact reported history, a Claude Code session, the Ollama model subject, an unrecognized tool, a path subject, a Python script, and regression guards for the git and brew headlines. Analysis stays pure, off the main actor, and well under 5 ms.

Known limits