Skip to content

fix(tui): make the skills browser searchable + paginated (1.13.1)#102

Merged
whykusanagi merged 2 commits into
mainfrom
feat/skills-browser-search
Jul 15, 2026
Merged

fix(tui): make the skills browser searchable + paginated (1.13.1)#102
whykusanagi merged 2 commits into
mainfrom
feat/skills-browser-search

Conversation

@whykusanagi

Copy link
Copy Markdown
Owner

Small usability fix to the skills browser. With 69 MCP tools it had become one endless list — scrolling forever, and to the user it read as a hung tool.

Changes

  • Pagination — renders a height-sized window starting at the top, with a N–M of T ↓ K more position indicator instead of dumping every row.
  • Type-ahead search — start typing to filter. Ranks BM25 hits first (tools.RankDocs, the same index as find_tools), then a case-insensitive substring fallback so partial words match too (tasktask_create and tasks_list).
  • Readable descriptions — the highlighted tool's full description renders (wrapped, up to 2 lines) below the list, so a truncated inline row doesn't hide what a tool does. Inline width tracks the terminal instead of a fixed 60 chars.
  • Keys: letters filter · ↑/↓ move · PgUp/PgDn/Home/End page · Enter select · Esc clears the filter then leaves.

Verification

go test ./cmd/celeste/..., golangci-lint (0 issues), gofmt clean. Both browser states captured in the render harness (skills-browser, skills-browser-search) so they're part of make tui-snapshots.

Ships as 1.13.1 — a patch fix to an existing view (release-please forced via Release-As on merge).

🤖 Generated with Claude Code

With 69 MCP tools the skills browser was one endless list — scrolling forever,
and to the user it read as a hung tool. Rework it into a searchable, paginated
picker:

- Type-ahead filter: start typing to narrow the list. Ranks BM25 hits first
  (tools.RankDocs, the same index as find_tools), then a case-insensitive
  substring fallback so partial words still match ("task" → tasks_list too).
- Pagination: renders a height-sized window starting at the top, with a
  "N–M of T  ↓ K more" position indicator instead of dumping everything.
- Keys: letters feed the filter, ↑/↓ move, PgUp/PgDn/Home/End page, Enter
  selects, Esc clears the filter then leaves. app.go no longer swallows q/Q/esc
  before the browser (letters must reach the filter); it acts on the browser's
  skillsBrowserBackMsg instead. Browser is sized at creation so pagination has
  a height immediately.

tools/discovery_index.go: RankDocs — BM25 over free-text docs, empty query
returns all in order. render_smoke_test.go snapshots both browser states.
Verified: go test ./cmd/celeste/..., golangci-lint, gofmt clean.
…wser

The inline rows still truncate (kept scannable), but the highlighted skill's
full description now renders wrapped (up to 2 lines) below the list, so you can
read what a tool actually does. Inline description width tracks the terminal
width instead of a fixed 60 chars. Harness sample uses realistic per-tool
descriptions so the snapshot represents reality rather than one repeated string.
Reuses chat.go's wrapText via descLines (line-capped).
@whykusanagi
whykusanagi merged commit 0b3dafa into main Jul 15, 2026
5 checks passed
This was referenced Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant