@nicknisi/pi-turn-timer
v0.1.3
Published
Per-turn elapsed timer row below each response
Maintainers
Readme
@nicknisi/pi-turn-timer
Shows how long a complete run took — from the moment you send a message until the agent settles and is awaiting your next message — as a dim one-line row rendered below the response, similar to Claude Code's per-turn elapsed timer. It exists because pi has no built-in per-run timing display. A run that spans multiple LLM responses and tool-call rounds still produces a single timer row.
What it adds
- UI: a custom transcript entry renderer that draws a dim text row of the form
· 12.3s(or· 1m 23sfor ≥ 60s) after each completed turn. - Events hooked:
agent_start(records the start timestamp),agent_settled(computes elapsed time and appends the entry).agent_settledfires only once the agent is idle and won't continue automatically (no retry/compaction/follow-up remaining), so the timer covers the whole run. - Custom entry type:
turn-duration, with data shape{ seconds: number }.
No slash commands, tools, keybindings, or overlays. No configuration.
Behavior details
- The entry is a custom transcript entry that does not participate in LLM context, so it never pollutes the conversation.
/copyreads only assistant message text, so it never picks up the timer rows.- Timing starts from
Date.now()onagent_start. Elapsed time is computed withDate.now()atagent_settled. - If
agent_settledfires without a prioragent_start(e.g. extension loaded mid-run), the event is ignored. - Duration formatting:
< 60s→Ns.s(one decimal, e.g.0.8s);≥ 60s→Mm Ss(e.g.1m 23s).
Configuration
None. No config files, no options, no environment variables.
Dependencies
@earendil-works/pi-coding-agent(peer) —ExtensionAPI:registerEntryRenderer,on,appendEntry.@earendil-works/pi-tui(peer) —Textcomponent used to render the row.
No npm runtime dependencies, no workspace deps.
Caveats
- Depends on pi extension internals:
registerEntryRenderer,appendEntry, and theagent_start/agent_settledevent names. A pi release that renames these APIs or events breaks the extension. - Relies on the theme's
"dim"foreground color existing; unusual themes could render the row differently. - Uses wall-clock time (
Date.now()), so the measurement includes any time the session sat idle mid-turn (e.g. waiting on an interactive tool prompt or permission prompt). - No platform-specific behavior; works anywhere pi runs.
Install
pi install /Users/nicknisi/Developer/pi-extensions/packages/turn-timer