Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Organize sessions by prompt: find, rename, archive, prune.
.claude/skills/nousresearch-session-librarian/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -40% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -41% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 45% | 0% |
Manage the user's session library conversationally: find past sessions about a topic, summarize what they decided, rename them meaningfully, split work into parallel sessions, and propose stale ones for archive or deletion — all from a plain-language request like "find my sessions about Q3 pricing, keep the useful ones, and clean up the duplicates."
Inspired by Perplexity Computer's prompt-driven session management (Aug 2026): the agent starts, organizes, and cleans up the user's own session library, and always shows the plan before touching anything.
| Task | Surface | |---|---| | Find sessions by topic, read content, summarize decisions | session_search tool (FTS5 over the message store) | | List/filter by metadata (age, source, cost, tokens, workspace) | hermes sessions list / stats via terminal | | Rename | hermes sessions rename <session_id> <title...> | | Bulk soft-hide (reversible) | hermes sessions archive <filters> | | Delete (destructive) | hermes sessions delete / hermes sessions prune <filters> | | Export before deleting anything valuable | hermes sessions export --session-id <id> --format md | | Continue work in a new place | /branch (fork current session) or start a fresh session and cite the summary |
① Discover. Use session_search(query=..., limit=5-10) with topic keywords; vary phrasing (feature name, symptom, project name). For metadata sweeps ("sessions older than 60 days from telegram"), use hermes sessions list --source telegram --limit 50 instead.
② Summarize per session. The discovery result's bookend_start (goal), match window, and bookend_end (resolution) usually suffice — only dump a full session (session_search(session_id=...)) when the user asks for decisions in depth. Report each as: link (@session: form) — one-line goal — one-line outcome.
③ Plan before acting (MANDATORY for anything that mutates). Present a plan table first: which sessions get renamed to what, which get archived, which are proposed for deletion and why (duplicate of which keeper, stale, empty). Wait for the user's go-ahead. Exception: a single rename the user explicitly dictated can be done directly.
④ Act with the safest primitive.
archive (reversible soft-hide) over delete/prune.--dry-run first and show the output,then re-run with --yes after confirmation.
hermes sessions export --format md as a backup.
⑤ Report. Renames applied, sessions archived (count + how to undo: archived sessions remain in the DB and are listed with --include-archived), anything exported, anything skipped and why.
For "one session per ticket, investigate each, report back": do NOT try to drive other live sessions. Use delegate_task with one task per workstream — each subagent runs in its own session automatically — then synthesize their summaries. Mention that each delegation's transcript is itself searchable later via session_search.
conversation. A standing "clean things up" is authority to propose, not to prune.
session_search finds content, not metadata. Age/cost/source filterslive in the CLI; combine both when the request mixes them ("old sessions about pricing").
/resume <title>. When renaming, keep titlesshort, unique, and prefix-friendly; warn the user if a rename collides with an existing title.
Say which one you did.
@session:<profile>/<id>) are read-onlyfrom another profile; management commands act on the current profile's DB.
After a cleanup pass, re-run the discovery query and hermes sessions list to confirm the library reflects the plan (keepers present with new titles, archived ones gone from the default listing).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 11,563 | 16,101 | +39% | 1 | 1 | 0% | 920 | 1,503 | +63% | 0 | 0 | — |
case-03 | fail→fail | 15,068 | 30,298 | +101% | 1 | 1 | 0% | 2,514 | 1,689 | -33% | 0 | 0 | — |
case-01 | fail→fail | 10,079 | 14,254 | +41% | 1 | 1 | 0% | 763 | 1,298 | +70% | 0 | 0 | — |
case-04 | fail→fail | 21,018 | 7,017 | -67% | 1 | 1 | 0% | 2,716 | 1,380 | -49% | 0 | 0 | — |
case-05 | pass→pass | 11,999 | 8,854 | -26% | 1 | 1 | 0% | 999 | 1,707 | +71% | 0 | 0 | — |
case-06 | pass→pass | 15,103 | 8,031 | -47% | 1 | 1 | 0% | 705 | 1,560 | +121% | 0 | 0 | — |
case-07 | fail→pass | 20,156 | 7,038 | -65% | 1 | 1 | 0% | 2,313 | 1,394 | -40% | 0 | 0 | — |
case-08 | fail→pass | 14,150 | 7,923 | -44% | 1 | 1 | 0% | 1,372 | 1,552 | +13% | 0 | 0 | — |
case-09 | fail→fail | 26,183 | 15,188 | -42% | 1 | 1 | 0% | 611 | 1,385 | +127% | 0 | 0 | — |
case-10 | pass→pass | 15,379 | 10,001 | -35% | 1 | 1 | 0% | 1,592 | 1,906 | +20% | 0 | 0 | — |
case-11 | fail→pass | 19,120 | 6,753 | -65% | 1 | 1 | 0% | 2,317 | 1,359 | -41% | 0 | 0 | — |
case-12 | fail→pass | 19,242 | 9,568 | -50% | 1 | 1 | 0% | 1,111 | 1,840 | +66% | 0 | 0 | — |
case-13 | fail→pass | 14,799 | 10,996 | -26% | 1 | 1 | 0% | 1,477 | 2,139 | +45% | 0 | 0 | — |
case-14 | fail→pass | 19,323 | 13,263 | -31% | 1 | 1 | 0% | 2,406 | 2,434 | +1% | 0 | 0 | — |
case-15 | fail→pass | 13,745 | 7,972 | -42% | 1 | 1 | 0% | 1,408 | 1,585 | +13% | 0 | 0 | — |
case-16 | fail→pass | 12,740 | 9,650 | -24% | 1 | 1 | 0% | 1,179 | 1,772 | +50% | 0 | 0 | — |
case-17 | fail→pass | 16,459 | 9,587 | -42% | 1 | 1 | 0% | 1,873 | 1,849 | -1% | 0 | 0 | — |
case-18 | fail→pass | 17,881 | 8,699 | -51% | 1 | 1 | 0% | 2,013 | 1,674 | -17% | 0 | 0 | — |
case-19 | pass→pass | 17,357 | 14,217 | -18% | 1 | 1 | 0% | 1,964 | 2,724 | +39% | 0 | 0 | — |
case-20 | pass→pass | 16,816 | 15,193 | -10% | 1 | 1 | 0% | 2,105 | 2,966 | +41% | 0 | 0 | — |
case-21 | pass→pass | 20,235 | 17,109 | -15% | 1 | 1 | 0% | 2,752 | 3,497 | +27% | 0 | 0 | — |
case-22 | pass→pass | 9,858 | 7,765 | -21% | 1 | 1 | 0% | 844 | 1,488 | +76% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 18 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.