JohnXu22786/session-titler
Two-phase session captioning: instant keyword titles while the conversation is busy, then cheapest-budget-model refinement plus a one-line summary once it goes idle.
Two-phase session captioning so long session lists are scannable instead of timestamp-numbered. Phase 1 runs the moment a user message lands: keywords are extracted and a title appears with near-zero latency and no model call. Phase 2 runs once the session has been idle for 5 seconds: a single auxiliary call upgrades the title from a keyword string to a natural phrase and also produces a one-line session summary written to the session log via the session/caption-note event within the same request. Cost guardrails route refinement to the cheapest tier among registered models (flash/haiku/mini etc.) by name pattern, with an explicit model override and full phase-2 disabling available. Titles follow the message language (Latin titles are capped by word count, CJK titles by character count), duplicates are not written twice and cross-session duplicates get a numbered suffix, and automatic generation stops completely after a manual rename.
Install
dsh plugin --profile demo add github:JohnXu22786/session-titlerREADME "Installing in DSH" quoted verbatim — the README's example profile is demo; substitute your own profile name. The README describes the plugin as a standard dsh bundle (configuration layer + plugin code) and documents two further local forms: a directory (dsh plugin --profile demo add /path/to/dsh-session-caption) and a built tarball (dsh plugin --profile demo add ./dsh-session-caption-0.1.0.tgz); removal is dsh plugin --profile demo remove dsh-session-caption. No npm package is claimed by the README, so the GitHub source form is used.
Compatibility
A DSH bundle installed into a profile. The README notes the session-title service is single-provider by design: if another plugin also registers a title provider the two replace each other, and this plugin's bundle layer disables the built-in session-title-llm line by default. Phase 2 needs at least one registered model to refine with.
Details
- Repo: JohnXu22786/session-titler
- Category: Sessions & Messages
- Stars: 1
- Version: README tarball name suggests 0.1.0 (dsh-session-caption-0.1.0.tgz); no npm version published
- Last push: 2026-08-17
- First seen: 2026-08-16
Recent updates
The README documents the two-phase pipeline, configuration and loading internals rather than a release table; the only version in the README is the example tarball name dsh-session-caption-0.1.0.tgz.
FAQ
- Does it call a model on every turn?
- No — the README's phase 1 extracts keywords with no model call at all, and phase 2 makes one auxiliary call only after the session has been idle for 5 seconds.
- Will it overwrite a title I set myself?
- No — the README says automatic generation stops completely after a manual rename and is never written back, even if a refinement call was in flight.
- How is the refinement cost controlled?
- The README routes refinement to the cheapest registered model tier by name pattern, caches the pick, and supports both an explicit model override and disabling phase 2 entirely.
Alternatives
beijingwahw/dsh-companion · chouyong/dsh-fork-graph · ChuanTianML/dsh-local-share