fzf for your AI agent sessions — search, inspect and resume any Claude Code / Codex / pi session from a TUI. Quick notes with full-text search included.
One-liner (clones the repo into ~/.local/share/miscosas/app and installs the
miscosas / mc commands):
curl -fsSL https://miscosas.ceroclawd.com/install.sh | bashOr from a clone:
git clone https://github.com/gonzalonicolasr/miscosas
cd miscosas && ./install.sh- Bun — the TUI runs on Bun (OpenTUI's native renderer
uses
bun:ffi); tested on Bun 1.3+. The installer sets it up if missing. - Linux or macOS.
- tmux — optional but recommended: with tmux, ⏎ resumes the session in a dedicated tmux session. Without it, the resume command is copied to your clipboard instead.
- wl-copy / xclip / pbcopy — any one of them, for the clipboard fallback.
miscosas ships a local indexer: every time you open the TUI (and on
Ctrl-L) it scans the session files that the agent CLIs already keep on your
disk —
~/.claude/projects/**.jsonl(Claude Code)~/.codex/sessions/**.jsonl(Codex)~/.pi/agent/sessions/**.jsonl(pi)
— extracts the metadata (cwd, branch, dates, your real prompts) and indexes it into a local SQLite with FTS5. Incremental by mtime, fail-soft: a broken file never breaks the TUI.
Everything stays local. The index lives in
~/.local/share/miscosas/miscosas.sqlite (override with MISCOSAS_DB=...).
Nothing is uploaded anywhere. Tool dumps / internal CLI blocks are filtered
out of the index, and common secret patterns (API keys, tokens, passwords)
are redacted before they ever touch the database.
Selecting a session shows its detail (first/last prompt, a searchable summary
of the whole session, resume command). ⏎ resumes it: inside tmux it opens
claude --resume <id> / codex resume <id> / pi --session <id> in a
dedicated tmux session and switches you there (or re-attaches if it is already
alive); outside tmux it copies the resume command to your clipboard.
The search box is always active (fzf-style): open the TUI and just type.
| Key | Action |
|---|---|
| (type) | search-as-you-type over title/description/content/tags (FTS5) |
#tag (in the search box) |
filter by tag (prefix match) — combinable with text: retry #claude |
↑ / ↓ (or Ctrl-K / Ctrl-J) |
move selection |
Shift-↑ / Shift-↓ |
scroll the detail panel |
Shift-PgUp / Shift-PgDn |
scroll the detail half a page |
Esc |
clear the search |
Tab |
cycle filter: All / Notes / Sessions |
⏎ |
note → edit · session → resume (tmux or clipboard) |
Ctrl-N / Ctrl-E / Ctrl-D |
new / edit / delete note (confirm with y) |
Ctrl-R |
resume the selected session |
Ctrl-L |
refresh + re-index sessions |
Ctrl-C / Ctrl-Q |
quit |
| 🖱 mouse | click selects · double click opens/edits · right click copies (resume/content) · wheel scrolls · clickable buttons in the detail panel |
In the note form: Tab switches fields · Ctrl-E edits the content in
$EDITOR · Ctrl-S saves · Esc cancels (with unsaved changes it asks for a
second Esc).
mc add "an idea worth keeping" # capture without opening the TUI
echo "something" | mc add # also reads stdinNotes live in the same SQLite and the same search: type to find them, ⏎
to edit, content renders as markdown in the detail panel.
- The UI copy is currently Spanish (labels like
Primer prompt:are part of the on-disk item format). An English UI is on the roadmap. - The list auto-refreshes when another process writes to the DB (file watch); the cursor stays on the same item.
MIT — by Gonzalo Rocca.