Changelog
Full release history for Suvadu.
Also available on GitHub Releases and CHANGELOG.md.
v0.5.0
Latest- added Suvadu Home — a bare
suvat a terminal, orsuv home, opens a searchable map of everything Suvadu does, grouped by task. Typing searches the features, not your history, and each shows what it does and the real command behind it. Enter opens a screen and returns to the same place, opens a picker and shows the chosen command to copy — it is never run — or shows a short report inside Home. Anything that changes data or your shell is explained with copyable examples instead of run.F1lists the keys andF2opens the command reference. - added Suvadu tells you when a newer release is out — once a day, in the background, it looks up the newest release number and, when there is a newer one, says so in one line before a command you run at a terminal, with the update command for how you installed it. The command you ran never waits, and nothing about you or your history is sent. Hooks, recall, scripts, pipes and CI never check or print. Off with Check for Updates in
suv settings,[update] check = false, orSUVADU_NO_UPDATE_CHECK=1. - added A startup screen for a bare
suv— a baresuvat a terminal now opens Home instead of printing the command overview. To keep the overview, set Startup Screen to help insuv settings(or[home] startup = "help"inconfig.toml);suv --helpalways prints it. Scripts, pipes andTERM=dumbare unchanged: they get the overview on stderr with exit status 2, exactly as before. Only your own config sets it; a project's.suvadu.tomlcannot. - added Recall shows why each command matched — the characters your query matched are underlined and emphasised in every row, over the syntax colours: every occurrence of each word in
termsmode, the whole query inliteral, the start inprefix, and the characters the subsequence rule walked infuzzy. It applies when searching command text. - added The grouped view says when a command last ran and how often — in the Commands view, where recall now opens, each row is one command with a Last used age and a Runs count (
26×), and the detail pane labels its path, exit code and time as the last run's and states how many runs matched, instead of implying every run went the same way. In both views the detail pane now leads with where the command ran and how it ended. - added The install script can install without sudo —
curl -fsSL https://downloads.appachi.tech/suvadu/install.sh | bash -s -- --userinstalls into~/.local/bin, and--dir DIR(orSUVADU_INSTALL_DIR=DIR) into any directory. sudo is used only when the target directory is not writable, and the script says when that directory is not on yourPATH. The default is still/usr/local/bin. - added The install script can add the shell hook for you — run at a terminal, it shows the exact
eval "$(suv init zsh)"line and the file it would go in (~/.zshrc, or~/.bashrcon Linux), and adds it only if you answery, after saving the old file as.suvadu-backup. It never asks when a hook is already there, when thesuvonPATHis not the one just installed, whenZDOTDIRpoints elsewhere, for Bash on macOS, or with--no-modify-rc;suv uninstallremoves the line again. - added The install script checks the release signature when it can — with
minisigninstalled, it verifies the archive against the same public keysuv updateuses and aborts before installing anything if verification fails. Withoutminisignit says the signature was not checked; the SHA-256 checksum is verified either way. - added Recall defaults in
suv settings— the Search tab now has Default Match Mode, Starting Scope and Compact Recall, the three choices that previously needed a hand edit ofconfig.toml. Saving writes the same words--matchand--scopeaccept and keeps every other key in the file, including ones this build does not know. - changed
suv --helpstarts withhome— the overview has a Start here group listingsuv home. A mistyped command's error now showsUsage: suv [COMMAND], since a baresuvis itself valid. - changed Recall opens in the Commands view —
Ctrl+Randsuv searchnow start with identical command text grouped into one row, showing when it last ran and how many runs matched, because retrieving a command is the usual task and repeated runs pushed the other candidates down.Ctrl+Uswitches to Executions, every run with its time, directory and exit status, and back, keeping the selected command. Grouping is by exact text: whitespace, flags and case are never normalised. The default applies only whereconfig.tomldoes not setsearch.show_unique_by_default; a value already there, including onesuv settingswrote, is kept, sofalsestill opens Executions. - changed Recall's labels and layout make fewer claims and less noise — Enter is labelled Use rather than Run, since it puts the command on your prompt (or prints it) and never runs it. The results title says what it counts (
Executions 1-50 of 558, orCommands 1-50 of 139when identical commands are grouped, the view formerly called "unique") and offers the key that switches between them (· ^U group/· ^U every run). The[unique]and[N filters]badges leave the search box, the status row keeps room for an active filter at any width, a row too long for the list ends in…while the selected row wraps, and the footer keeps to the core keys, with everything else under?. The wide executions table drops its session and duration columns (both remain in the detail pane) and adds a Ran by column only when agent commands are shown. - changed Atuin import is tested through Atuin 18.23.0 — it ships the same history schema as 18.22.0, and a database written by the real 18.23.0 binary imports completely, leaves the Atuin database byte-identical, adds nothing on a second run, and rolls back with the printed backup.
scripts/test-atuin-import.sh <path/to/atuin>repeats that check for any Atuin release. - fixed Recall restores the terminal when it cannot finish setting it up — if a terminal accepted raw mode but refused a later step,
Ctrl+Rreturned an error and left raw mode on, so the shell stopped echoing. Every step already taken is now undone first. - fixed Switching between grouped and every-run views keeps your place —
Ctrl+U(andCtrl+S, which changes the ranking) reloaded the list and selected its first row, so an Enter right after switching could pick a different command. The selected command now stays selected, on whichever page it lands; going back to every run selects its most recent run, and a command deleted meanwhile is reported instead of replaced by another. Runs recorded in the same millisecond now have a fixed order. - fixed Commands that differ only in whitespace no longer look identical — leading and trailing whitespace is drawn as
·, runs of spaces are kept, and every tab, line break or other non-space whitespace character gets its own marker (⇥,↵,·). When a command holds anything that cannot be read off its text, including zero-width, bidi-override and byte-order-mark characters, the detail pane adds a Raw line that spells it out with escapes, andCtrl+Vopens that raw view for any command in a scrollable overlay with its length in characters and bytes. What is stored, returned to the prompt, or grouped does not change. - fixed Typing in
suv searchno longer waits for each search to finish — searches run on a background thread with their own read-only connection, a keystroke that changes the query interrupts the search in flight, and results for an older query are discarded; while a slow search runs, the results title showssearching…. Enter, navigation, paging and mode or scope changes wait for the results of what is typed now, so the command you accept always matches the query on screen; Esc leaves at once. - fixed
suv updateuses sudo only when it has to — it now replaces asuvin a directory you own (such as~/.local/bin) as you, instead of asking for a password and leaving a root-owned binary. It resolves links first, so on macOSsuvadu updatereplacessuvrather than thesuvadulink, and a Homebrew link on Intel macOS, a link to Cargo's binary, or one under a custom$CARGO_HOMEis recognised as the package manager's. The new binary is written beside the old one and renamed into place, so a failed update or a full disk leaves the previous version working. - fixed
suv uninstallnow removes an install-script install — it recognised only Homebrew and Cargo, and for a script install printed anrmcommand and left the shell hook line and agent hooks behind, so every new shell failed on the missingsuv. It now removessuvand itssuvadulink (with sudo only if that directory is not writable) and cleans the shell and agent integrations as for the other methods. Asuvin a system or package-manager location is never treated as a script install, and a~/.zshrcor~/.bashrcthat is a link stays a link. History and config are still kept. - fixed The bundled
uninstall.shremoves what the install script added, and only that — it takes--user/--dirlike the installer (or finds thesuvonPATHand removes it only if the install script put it there, deferring tosuv uninstallfor Homebrew and Cargo), uses sudo only when the directory is not writable, and edits only startup files that contain the hook line, keeping the previous version as.suvadu-backup. - fixed Re-running the install script no longer installs a second copy, or overwrites someone else's — it updates a script-installed
suvin the directory it is already in, and when thesuvonPATHbelongs to Homebrew or Cargo it stops and printsbrew upgrade suvaduorcargo install suvaduinstead; any othersuvis left alone. The new binary is renamed into place, so a failed install leaves the previous one working. - fixed
fuzzysearch now folds non-ASCII case, as the help and README already said —suv search --match fuzzy ÉCHOfound nothing wheretermsfoundecho écho.literalandprefixare unchanged and still fold ASCII only, because SQLite'sLIKEanswers them. - fixed The Homebrew install note now covers Bash —
brew install suvadugives the Zsh and Bash hook lines, says to open a new terminal and check withsuv status, and links the setup guide on suvadu.sh.
v0.4.2
- added Explicit matching modes and recall scopes —
--match terms|literal|prefix|fuzzy(Ctrl+Xin the UI) picks how a query matches, and--scope all|directory|workspace|session(Ctrl+Pto cycle,Ctrl+Rto reset) picks what it looks at: everything, exactly this directory, anywhere in this Git repository or linked worktree, or this shell session.--hereis now the spelling of--scope directory. Every mode narrows candidates in the database, so none of them falls back to scanning a recent window, and a scope that cannot apply here says so instead of silently doing something else. The config keyssearch.match_mode,search.scopeandsearch.compactall default to the previous behaviour. - added Inline recall —
suv search --compactdraws recall in a few rows under your prompt instead of taking over the screen, so the commands already on screen stay visible. - added Bash history import —
suv import --from bash-history <file>, with--dry-run. A timestamped file keeps its real times and its multi-line command boundaries; a plain file has neither, so each line is imported with an explicitly synthetic 1970-01-01 placeholder time rather than an invented one. Redaction and exclusions apply exactly as they do to live recording. - added Atuin migration —
suv import --from atuin-db <path/to/history.db>, with--dry-run. The Atuin database is opened read-only and read inside one transaction, so the source is never modified, and each row is identified by its Atuin id, so re-running an import does not duplicate what it already brought over. - added A session you can hand to another agent — the
suv sessionspicker gets a real column set (project, prompt preview, last activity, agent, and capture completeness as its own column, never inferred from exit codes), and a session header reports what Suvadu knows it missed instead of implying a complete record. - added
suv skills disable/enable/cleanup— a skill can now be stopped from syncing without being deleted, and cleanup removes exactly the agent files Suvadu generated for skills that are gone or disabled, reporting anything it will not touch.suv skills sync --dry-runnames the exact target file and shows the diff before anything is written. - added
suv doctorreports storage by category — what commands, sessions, summaries, skills and backups each use, measured from the database rather than estimated, with the retention rule that changes each one. - added
suv delete --dry-runpreviews the actual commands it would remove, not just a count, so a pattern broader than intended is visible before anything goes. - added A reproducible search benchmark — correctness and speed are measured separately over a generated corpus whose judged commands are planted as the oldest rows, so any recency-biased window shows up as a missing match.
BENCHMARKS.mdrecords the method and the baseline. - changed One response convention across every MCP tool and resource — RFC 3339 timestamps,
unknownfor a missing exit code instead of?,-1or a silent0, visible truncation, a stable id on every row, and a provenance line saying whether a line is a stored record, something derived from one, or text an agent wrote. - changed
suv statusseparates recording from capture — it used to claim history was being recorded whenever the config said so, which is configuration, not evidence. It now reports the configured state and the actual capture evidence as two independent facts. - changed
suv doctorgroups blockers apart from optional integrations and gives every check its own repair line, so an integration nobody uses no longer looks like a broken installation. - changed A risk verdict separates severity, the evidence that matched, and any uncertainty. The matched text is redacted and length-bounded, so a risk report can never be the thing that copies a secret into a log.
- changed README,
SECURITY.mdandsuv --helpwere rewritten against the code rather than against intent — the matching, ranking and scope semantics that actually ship, default read-only MCP access and its two write opt-ins, and the real stored-data inventory. - fixed Typed interactive search now matches across your whole history —
suv search/Ctrl+Rused to fetch the newest 5,000 eligible rows and match them in memory, so an exact match older than that vanished from the screen while still sitting in the database. Candidates are now selected in the database across everything eligible; the 5,000 limit remains, but it bounds how many matches are ranked by relevance, not how many are searched. - fixed Interactive search reports a result count it can actually page to — the ranking window doubled as the total, so a broad query claimed exactly 5,000 results, refused to go past page 100, and put older matches out of reach.
- fixed
--querynow goes through the same pipeline as typing,fuzzykeeps its own ordering rule, and an upper-case query intermsmode matches case-insensitively as documented —GITused to find nothing whilegitfound everything. - fixed
suv search --compactworks when the shell widget runs it — inline recall has to ask the terminal where the cursor is, and that question went to stdout, which the shell integration captures, so compact recall failed every time with "The cursor position could not be read within a normal duration". A terminal that will not answer now opens the full-screen surface instead of failing, and the command you selected there still reaches your prompt. - fixed
curl … install.shon macOS downloaded the wrong build, or nothing at all — the installer mapped architecture to an archive name without regard to the operating system, so Apple Silicon requested a file that is never published and an Intel Mac downloaded the arm64 build. All four published platform archives now resolve, and a release-time check fails if any of them stops resolving. - fixed
suv statusandsuv doctorno longer read imported or restored history as proof that capture is working — both treated any recent non-agent row as evidence that the shell hook was live, so importing a single command dated now made a machine with no hooks installed look healthy. - fixed
suv skills syncno longer deletes instructions written below its marker, and a project-scoped skill no longer uninstalls the global skill of the same name. - fixed
suv settingscovers every MCP tool and resource, including the two write opt-ins, so turning on saved session summaries or skill proposals no longer means hand-editingconfig.toml. Saving also stops discarding config keys this build does not recognise. - fixed
suv doctorno longer creates the database as a side effect of checking for it, andsuv uninstallprints the real config and data paths instead of an invented one. - security Session summaries saved over MCP now go through redaction and exclusions — a summary is derived text, and an agent that read a session can restate a secret the redactor caught on the way in. Text matching an exclusion is refused rather than silently trimmed.
- security The Zsh importer now applies redaction and exclusions like every other ingestion path — a secret already sitting in
~/.zsh_historyused to be copied in verbatim, and configured exclusions were never consulted. - security An Atuin
intentcan no longer smuggle a secret past redaction, and an Atuin import honours each source directory's own project policy rather than the global config alone. - security A recorded command can no longer forge an MCP row or repaint a terminal — command text is arbitrary bytes someone typed, so a newline inside one could split a response row in two and an ANSI escape reached whoever printed the response.
- security
suvadu://skills/indexhides skills scoped to an excluded directory, and capture diagnostics no longer name a directory thatmcp.exclude_dirshides — an excluded gap is counted, not named.
v0.4.1
- added Codex session capture — incremental native transcript import at Stop/SessionEnd captures prompts and final answers independent of shell commands, plus provider-reported token counters without double-counting cumulative updates. Inspect with
suv agent sessions/suv agent session, import withsuv agent import-session, remove withsuv agent delete-session. - added Claude Code session capture —
suv init claude-codeinstalls Stop/SessionEnd reconciliation hooks that incrementally capture human prompts, assistant text, every observed model, and deduplicated provider-reported usage (cache-read/cache-creation tokens normalized into total input while staying visible separately in the raw session data). Thinking blocks, attachments, images, file contents, and tool results are excluded. - added OpenCode session capture — prompts, assistant responses, model, and token usage are now captured in addition to the existing bash-command tracking, via OpenCode's own
session.messagesAPI when a session goes idle.suv init opencodenow also registers the plugin directory in OpenCode's config automatically, closing a gap where the plugin installed but was never actually loaded. - added Cross-agent MCP session summaries —
list_agent_sessions,get_agent_session, andresolve_current_agent_sessionlet any connected agent summarize a captured session by ID or resolve "current session" conservatively. Long sessions are processed page by page into compact running notes with evidence IDs; saved summaries are reusable checkpoints that extend safely from their last offsets, or rebuild fully if earlier evidence changed. - added Unified session browser —
suv sessionsnow combines human terminal sessions, command-backed agent sessions, and native Codex/Claude Code/OpenCode sessions in one picker (Ctrl+Tcycles All/Human/AI). AI timelines show captured prompts, responses, commands, model changes, and provider-reported token totals, including sessions with no commands. - added AI-session summary panel — press
son an AI session insuv sessionsto view its saved summaries in a scrollable overlay.Tabtoggles between a lightweight rendered view and the raw markdown,Ctrl+Ycopies the raw markdown, and[/]cycle between multiple saved summaries for the same session. - added Builtin session-memory skill —
suv init claude-codeandsuv skills syncnow seed and materialize a suvadu-ownedsuvadu-session-memoryskill (gated onmcp.allow_session_summaries = true) that steers connected agents toward Suvadu's own session-summary tools instead of writing a generic local memory note. Reaches Claude Code, and — since skills aren't host-restricted — Cursor's project rules and Codex'sAGENTS.mdtoo on a default sync. - fixed
suv mcp-serveno longer disconnects before completing the MCP handshake when the local database was already migrated to a newer schema by a different Suvadu build — every tool/resource call now reports the underlying database error instead of the connected host seeing an opaque "Connection closed". - fixed Codex
response_itemtranscripts now capture real user prompts and final assistant answers while excluding developer instructions, injected environment context, commentary, reasoning, and duplicate item-completion records; imports also accept bounded records up to 16 MiB for image-bearing prompts and compaction snapshots. - fixed Up/Down navigation now continues across page boundaries in Search, Sessions, Agent Dashboard, and both Prompt Explorer views (this also fixes trackpad/scroll-wheel gestures on terminals that send them as Up/Down key presses), while explicit Left/Right page navigation still works as before.
v0.4.0
- added Shared skills library —
suv skillskeeps reusable instructions in one place instead of every AI tool maintaining its own copy.suv skills add/list/show/edit/rmmanage skills scoped toglobalor a specific project directory; three new read-only MCP tools (list_skills,get_skill,search_skills) plus a client-readablesuvadu://skills/indexresource let any MCP-capable agent discover and read them directly. - added
suv skillsis now a full interactive management app — baresuv skills(no subcommand) launches a TUI to browse/filter skills with a live preview, add or edit one (body edited via$EDITOR), delete with confirmation, trigger a sync, and approve/reject pending agent-proposed skills.add/list/show/edit/rm/synckeep working exactly as before for scripting. - added
suv skills sync— materializes active skills into each agent's own native format (~/.claude/skills/<name>/SKILL.md,.cursor/rules/<name>.mdc, a managed block inAGENTS.mdfor Codex) for hosts that don't pull from MCP. Idempotent — only rewrites a file when its content actually changed, and never touches hand-written content around its managed section. - added
propose_skillMCP tool (off by default) — lets an agent propose a new skill, saved aspending_reviewonly, never active. Enable withmcp.allow_skill_proposals = trueinconfig.toml; a human approves or rejects proposals from the review queue insuv skills(Ctrl+P). Disabled by default since a skills store readable and writable by agents is a shared-memory poisoning target — the gate is checked before the proposal write connection is opened. - added MCP server now exposes 3 prompts —
project_briefing,check_recent_failures, andassess_command_riskare reusable, parameterized requests a client can surface directly (often as slash commands), instead of relying on the connected model to decide on its own to call a tool. Theinitializehandshake'sinstructionsfield is also now directive rather than purely descriptive, telling a connecting client when to proactively callproject_context/learn_from_failures/assess_risk/list_skills. - added Risk assessment now catches obfuscated commands —
eval, decoding base64 into a shell, and command substitution wrapping a destructive/network command (e.g.echo $(curl ... | sh)) are now flagged, closing a gap where wrapping a dangerous command in indirection let it slip past risk assessment entirely. You can also flag your own org-specific risky commands with a newagent.risk_extra_patternsconfig list (regex + level + description). - added Prompt Explorer gets an always-on search box and filters —
suv agent promptsnow live-filters by prompt text as you type, withCtrl+P/Ctrl+Acycling time period/executor andCtrl+Sjumping to a prompt's session timeline, mirroringsuv search's conventions. - added
suv guard <command>— assess a command's risk before it runs and exit non-zero if it's too dangerous, for use in git hooks, CI, or a zsh widget (documented in--help) that blocks risky commands interactively before they execute. - added Per-project config overlay — drop a
.suvadu.tomlin a project directory (or the nearest ancestor containing one) to supply project overrides for command recording, CLI risk rules, and the theme, e.g. a stricter risk policy or a different exclusions list for one sensitive repo. Table fields merge key-by-key, so the overlay only needs to name what it's actually changing. - added
suv bookmarks(renamed fromsuv bookmark, old name kept as an alias) opens a full interactive picker — fuzzy-search and recall a bookmarked command, or add, edit, and delete bookmarks right from the TUI (Ctrl+A/Ctrl+E/Ctrl+D) instead of separateadd/removeinvocations for every change. Opens even with zero bookmarks saved yet. - added
suv aliases(renamed fromsuv alias, old name kept as an alias) opens a full interactive manager — fuzzy-search your aliases, or add, edit, and delete them right from the TUI (Ctrl+A/Enter/Ctrl+D); TUI changes regenerate the sourcedaliases.shwhile aliases remain, so it's live in new shells without a separatesuv aliases apply.add/remove/list/apply/add-suggested/suggestkeep working exactly as before for scripting. - changed Command search is faster —
suv search/Ctrl+Rsubstring matching is now backed by a trigram full-text index instead of a full table scan, so search stays fast as your history grows. Same results, just quicker. - changed
suv --helpgroups commands by purpose (Setup, Search & recall, Insights & safety, Organize, Data, AI integration, Other) instead of one flat list, and surfaces theCtrl+R/arrow-key shortcuts up top. - changed Visual consistency pass across
suv search,suv agent dashboard,suv agent prompts,suv agent stats,suv stats,suv skills,suv bookmarks,suv aliases suggest, andsuv sessions— all now share the same centeredSUVADU <SCREEN>title and footer badge styling with Quit listed first; the search-driven screens also share an always-on live-filter search box andCtrl+<letter>shortcuts. The dashboard's agent/risk summary, the prompt detail view's session info, and the session timeline's session info are now shown in their own boxed panels instead of dense single lines, agent stats' cards use rounded borders, and its High Risk Commands table now fills the available width instead of truncating commands at a fixed 30 characters. - changed
suv sessionrenamed tosuv sessions(old name kept as an alias) — same session picker and timeline as before; the picker's search box is now always-on like every other search-driven screen (Esc quits immediately instead of clearing the query first, and letters/digits are always query text rather than doubling asq/vim-style navigation shortcuts). - fixed
mcp.exclude_dirsis now actually enforced — the setting was configurable viasuv settingsand saved toconfig.toml, but no MCP tool or resource handler applied it, so a directory you excluded could still surface in a connected agent's queries. Every MCP tool and resource now filters it out, matching the directory and its subtree, with~expanding to your home directory. - fixed Closing a session timeline from
suv sessionsnow returns to the session list instead of exiting straight back to the shell — previously the only way out of a timeline was closing the picker entirely. - fixed Pasting a multi-line skill into
suv skills' Add/Edit form no longer misfires — Enter used to submit the form (jumping straight to$EDITORfor the body) regardless of which field had focus, so a paste with an embedded line break could launch the editor before later fields were even filled in. Enter now advances fields like Tab, only submitting on the last one; the form is also bigger and each field caps at 200 characters. - fixed
suv stats's content boxes now use rounded borders, andsuv settings' title matches every other screen — the earlier visual-consistency pass fixed both screens' title/footer styling but missedsuv stats' border style and never touchedsuv settings' title casing. - fixed Prompt Explorer's Session field now shows the full session ID instead of truncating to 8 characters — for agent-run entries that ID is the underlying agent's own session ID (e.g. Claude Code's), and the truncated form wasn't enough to do anything useful with it, like
claude --resume <id>.
v0.3.7
- added Codex CLI is now a first-class agent integration —
suv init codexinstalls hooks that capture both prompts and shell commands, merging into any hooks you already have in~/.codex/hooks.jsonrather than overwriting them, and auto-registers the suvadu MCP server in~/.codex/config.tomlso Codex can query your shell history directly. The config file is edited in place, so existing comments and formatting survive untouched. - fixed
.bashrccommands sourced before the first prompt are no longer recorded as if you'd typed them — bash'sDEBUGtrap fires for every command bash runs, not just ones typed interactively, so setup lines left in.bashrcafter theeval "$(suv init bash)"line were getting captured at the first prompt.
v0.3.6
- added
PageUp/PageDown/Home/Endnavigation in the search TUI —PageUp/PageDownscroll 10 rows at a time,Home/Endjump to the first/last result. Works in both normal and vim-normal modes. - fixed Codex CLI commands are now auto-recognized as agent activity — detection checked for
CODEX_CLI, which Codex never actually sets; it now checksCODEX_THREAD_ID, the variable Codex really exports. - fixed
cargo testno longer backgrounds itself under Bash/Zsh alias detection — concurrent interactive alias-detection shells could raiseSIGTTOUand suspend the whole test process. These shells are now detached into their own session.
v0.3.5
- added "Bookmarks only" search filter —
Ctrl+Oin the search TUI shows just your bookmarked commands. - fixed
brew installon Linux installed the wrong binary — the Homebrew formula only ever pointed at the macOS build, causing an "Exec format error" on Linux (x86_64 and aarch64). Release automation now publishes and selects the correct binary per OS/architecture. - fixed Shell hooks now self-heal a stale
suvbinary path after switching install methods (e.g.cargo install→brew), instead of silently breaking command recording. - fixed Recorded timestamps and durations were wrong under comma-decimal locales (Polish, German, French, and others) —
$EPOCHREALTIMEparsing now forcesLC_ALL=C.
v0.3.4
- changed Recall now hides AI-agent commands by default — Up-arrow and
Ctrl+Rshow your own commands only. Toggle live withCtrl+A/Alt+A, per-run with--include-agents, or setsearch.recall_show_agentsin config. Up-arrow is also recency-first, so a command typed in another directory isn't buried aftercd. - changed Search ranking overhauled — results must contain your typed words as literal substrings (loose character-subsequence matching removed), ranked prefix → contiguous → in-order words → any-order. Searching for something absent now returns nothing.
- added
suv backup [--out PATH]— snapshot the history database; one is also taken automatically before any destructivesuv delete(--no-backupto skip). - added
suv bookmark pick— interactive picker that recalls a saved bookmark into your prompt. - added "Failed only" search filter —
Ctrl+Ein the search TUI orsuv search --failed. - added
suv stats --human— analytics excluding agent activity (also thehtoggle in the stats TUI). - added
suv agent report --fail-on <low|medium|high|critical>— non-zero exit for local CI checks and git hooks. - added Configurable
agent.prompt_capture_max_chars(default raised 500 → 4000) andredaction.extra_patterns(your own secret regexes). - added Idempotent JSONL import —
suv importdeduplicates (--allow-duplicatesto opt out); new risk patterns forgit clean -f, world-writablechmod, andchown -R. - fixed Secret redaction no longer mangles
docker -p/ssh -p/curl -u, and now redacts@-in-password and password-only database URIs; fixed MCP UTF-8 panics on multibyte output. - fixed Destructive prompts (
suv delete/suv uninstall) refuse a pipedywhen stdin is not an interactive terminal.
v0.3.3
- fixed Cross-machine
suv export→suv importno longer dies with a FOREIGN KEY error on a fresh database — the importer auto-creates a placeholder session for unknownsession_ids and re-maps each entry'stag_idvia the carried-overtag_name(creating the tag locally if it doesn't exist). - fixed
suv importrejects non-JSONL files (e.g. an accidentally-piped CSV) up front with a clear, single-line error pointing atsuv export > history.jsonl, instead of spewing a parse error for every line. - fixed
suv export --format jsonwith zero matching entries now emits[]instead of an empty file, so downstream JSON parsers accept it.
v0.3.2
- added Paste support in search TUI —
Cmd+V/Ctrl+Vworks in the search pane and all dialog inputs (filter, note, go-to-page). Pasted text is sanitized and respects the 2000-char limit. - fixed Reduced false positives in secret redaction — env vars like
AUTHOR_NAME,TOKENIZERS_PARALLELISM,PASSWORD_FILEare no longer incorrectly redacted. Sensitive keywords must now appear as the final segment of the variable name. - fixed Bash octal parsing error — fixed
value too great for basecrash whenEPOCHREALTIMEmilliseconds had a leading zero (e.g.,068).
v0.3.1
- added
suv history— non-interactive history dump with all standard filters,--jsonoutput, and-nlimit. Pipeable to other tools. - added
suv doctor— diagnostic command that checks shell version, hooks, config, database health, recording state, MCP registration, and agent hooks. - added Configurable search scoring —
length_threshold,human_boost_percent,cwd_boost_percentin[search]config. Tune ranking viasuv settings. - added pi.dev agent integration —
suv init piinstalls a TypeScript extension for command and prompt capture. - changed Session filenames now use full UUID instead of truncated 8-character prefix.
v0.3.0
- added
find_agent_session— search past AI agent sessions by prompt text, directory, executor, or date range. Returns summaries with command counts, success rates, and resume commands. - added
replay_agent_session— full chronological timeline of a specific agent session with prompts interleaved between commands. - added
learn_from_failures— analyze recurring command failures with agent vs human comparison and failure rate tracking. - added
project_context— on-demand project briefing: common commands, build/test/lint patterns, failure rates, agent activity. - added
suvadu://agents/sessionsresource — auto-injected summary of 5 most recent agent sessions. - added
suvadu://context/projectresource — auto-injected project context at session start. Agents know your workflow before you ask. - changed MCP server expanded from 11 tools + 5 resources to 15 tools + 7 resources.
v0.2.1
- added Vim keybindings — optional vim-style modal navigation in the search TUI. Enable via
suv settingsorvim_mode = truein config. - changed Slimmed down README from 840 to ~120 lines, linking to suvadu.sh for full docs.
v0.2.0
- added MCP Server —
suv mcp-serveexposes shell history to AI agents via Model Context Protocol. 11 tools includingassess_risk. 5 auto-injected resources. 100% local. - added MCP auto-configuration —
suv init claude-codeandsuv init cursorautomatically register the MCP server. Zero extra setup. - added Cursor agent integration —
suv init cursorinstalls hooks for command capture with exit codes and prompts. - added Enhanced
suv status— shows database path, total commands, detected agents, and tips. - fixed Cursor executor detection, unique mode sort, relative date parsing, settings list scrolling.
- changed Unified TUI styling across Stats, Agent Dashboard, and Agent Stats.
v0.1.5
- added Prompt Explorer — two-screen TUI to browse agent prompts and drill into triggered commands.
- added Cursor agent integration —
suv init cursorinstalls hooks for command and prompt capture. - added Executor selector in search filter — Up/Down picker showing actual executors from the database.
- fixed Dead text bug in
suv searchstandalone — selected commands now inject into the editing buffer correctly. - fixed Claude Code exit codes — agent commands no longer stored with NULL exit codes.
v0.1.4
- added Custom agent detection — configurable
[agents]section and Agents tab insuv settingsTUI. - added
suv init opencode— OpenCode integration via plugin with prompt capture. - fixed Regex lookahead in secret redaction causing errors on first use.
v0.1.3
- fixed Powerlevel10k compatibility — Ctrl+R search now works correctly with p10k instant prompt.
- added
suv updatenow checks version before downloading and shows release notes.
v0.1.2
- fixed Linux self-update — "Text file busy" error resolved.
- added Universal installer script with OS/arch auto-detection and SHA256 verification.
v0.1.0
- added Major milestone:
suv alias,suv gc,suv sessiontimeline,suv wrapfor AI agents. - added Secrets redaction — API keys, tokens, and passwords auto-redacted before storage.
- added Minisign signature verification for self-update.
- added Command syntax highlighting across all TUI views.
- added 975 tests (up from ~100). Architecture overhaul with module decomposition.
- fixed 40+ bug fixes including UTF-8 safety, SQL injection prevention, atomic file writes, and streaming exports.
v0.0.1
- added Initial release — interactive TUI search, session tracking, AI agent monitoring, statistics dashboard, self-update.