@tmustier/pi-session-recap
One-line recap above the editor when you refocus a Pi session. Keeps you in flow when multi-agenting.
Package details
Install @tmustier/pi-session-recap from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@tmustier/pi-session-recap- Package
@tmustier/pi-session-recap- Version
0.1.1- Published
- Apr 24, 2026
- Downloads
- 235/mo · 193/wk
- Author
- tmustier
- License
- MIT
- Types
- extension
- Size
- 368.9 KB
- Dependencies
- 0 dependencies · 0 peers
Pi manifest JSON
{
"extensions": [
"index.ts"
],
"image": "https://raw.githubusercontent.com/tmustier/pi-extensions/main/session-recap/assets/recap.png"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
session-recap
Claude-Code-style session recap for Pi. When you switch focus away from a Pi session and come back, a one-line recap appears above the editor so you can re-enter flow without re-reading scrollback.

Built for multi-clauding / multi-pi workflows where several agent sessions run in parallel tabs.
How it triggers
Two complementary triggers. You get whichever fires first.
- Terminal focus reporting (DECSET
?1004). The extension enables focus events on session start and listens forESC[O(focus-out) andESC[I(focus-in). On focus-out it drafts a recap in the background; on focus-in it reveals the recap above the editor, as long as you were away for at least--recap-focus-min-seconds(default 3s — suppresses quick glances). - Idle fallback. After the last
turn_end, if you don't type for--recap-idle-seconds(default 45s), the recap is generated and shown anyway. This covers terminals that don't report focus events.
Also fires automatically on /resume and /fork so you know where the prior session left off.
Clears cleanly on: next user input, new turn start, session reload, or session shutdown.
Terminal compatibility
| Terminal | Focus reporting | Notes |
|---|---|---|
| iTerm2, Ghostty, Alacritty, Kitty, WezTerm, xterm | ✅ | Works out of the box. |
| VS Code integrated terminal, Warp | ✅ | Works. |
| Apple Terminal | ⚠️ Partial | Idle fallback covers it. |
| tmux | ✅ (with config) | Add set -g focus-events on to ~/.tmux.conf, then tmux source-file ~/.tmux.conf. |
If focus events cause any weirdness in your terminal, run with --recap-disable-focus and the idle fallback still works.
Model
Defaults to the currently active model in your Pi session with reasoning: "minimal" where the model supports it. This piggybacks on whatever auth you already have (including custom providers registered via pi.registerProvider), so there are no login surprises.
- Reasoning-capable model (Opus 4-7, GPT-5.4, etc.) → runs at minimal thinking for speed/cost.
- Non-reasoning model → no reasoning params passed.
- No active model or missing API key → the recap is skipped silently.
Override with --recap-model "<provider>/<id>" if you want a specific model regardless of the session's active one.
Install
Pi package manager
pi install git:github.com/tmustier/pi-extensions
Filter to just this extension in ~/.pi/agent/settings.json:
{
"packages": [
{
"source": "git:github.com/tmustier/pi-extensions",
"extensions": ["session-recap/index.ts"]
}
]
}
Local clone
{
"extensions": [
"~/pi-extensions/session-recap/index.ts"
]
}
Flags
| Flag | Default | Description |
|---|---|---|
--recap-idle-seconds <n> |
45 |
Seconds after turn_end before the idle-fallback recap fires. |
--recap-focus-min-seconds <n> |
3 |
Minimum focus-out duration before a recap is revealed on refocus. |
--recap-disable-focus |
false |
Disable DECSET ?1004 focus reporting. Idle fallback still runs. |
--recap-disable |
false |
Disable the automatic recap entirely. /recap still works. |
--recap-model "<p/id>" |
(active model) | Override the default, e.g. anthropic/claude-sonnet-4-6. |
Command
| Command | Description |
|---|---|
/recap |
Force-generate a recap right now, bypassing the activity gate. |
Behaviour notes
- Uses
turn_end, notagent_end, so a turn that errors or is aborted still gets recapped. - No duplicate drafts: the last-drafted branch-leaf is stamped; if you focus out / in repeatedly without any new session activity, the recap is reused rather than regenerated.
- Aborts on new input: any in-flight recap request is cancelled when you start typing or a new turn begins.
- No session persistence: the recap lives only in the widget for the active session — nothing is stored.
Design
See DESIGN.md for the design-of-record and open questions.
License
MIT
