Changelog
Full release history for Suvadu.
Also available on GitHub Releases and CHANGELOG.md.
v0.5.3
Latest- upgrade Run
suv redact --dry-run, thensuv redact, to apply this release's redaction rules to history you recorded before it: recording masks a secret before it is written, so new rules never reach older rows on their own. Rerunsuv init opencodeand relaunch OpenCode to install the plugin that records sub-session parents. - added
suv redactmasks secrets in what is already stored — commands, command context, failure output, agent prompts, replies and summaries, git snapshots, cached prompts and the backups in the backups directory, using today's rules and each project's.suvadu.toml. A value a rule masks is also masked wherever else it appears, when it is a literal of at least 16 characters rather than a reference such as${DB_PASSWORD}.--dry-runlists every change, masked, and writes nothing. A real run asks first, cannot be undone, and copieshistory.dbtopreredact-*.dbfirst; that copy still holds every secret, no later run touches it, and every run names it until you delete it. Search indexes are rebuilt and each changed file is compacted, so the old text is gone from the files, not only from the rows. Bookmarks, notes and aliases are only counted. - added Open a command's session from recall —
^Kinsuv searchor Ctrl+R opens the timeline of the session the selected command ran in, the same onesuv sessionsshows.Esccomes back to recall where you left it, and Ctrl+C closes both. Compact recall says to use full-screen recall instead. - added Rename a skill or move it to another scope —
suv skills edit <name> --rename <new-name>and--move-to global|here|<path>keep its content, history and version count. If the new name is taken in that scope, nothing changes. The nextsuv skills syncwrites it to its new place and removes the files generated under the old name or scope. - added OpenCode sub-sessions name the session that started them, in
parent_idinsuv agent sessionand theget_agent_sessionMCP tool, as Codex forks already did. A sub-session captured earlier gets its parent at its next capture. - security Secrets are masked in the forms agents write them: a value of any length under a secret name in JSON, YAML or code (
curl -d '{"password":"…"}',password = "…"in a heredoc,api_key: …); credential flags such as--client-secret,--auth-token,--access-tokenand--passphrase;x-api-key,X-Auth-TokenandPRIVATE-TOKENheaders,Authorizationunder any scheme, and cookies;DB_PASS=,MYSQL_PWD=andAPIKEY=; thekey=,sig=andX-Amz-Signature=of a URL; tokens from Google, GitLab, OpenRouter, Hugging Face, Groq, xAI, DigitalOcean, SendGrid, Linear, Notion and Sentry; Slack and Discord webhook URLs and Telegram bot URLs; the password flags ofredis-cli, the Mongo tools,sqlcmd,ldapsearch,zip,opensslandaz login;PASSWORD '…'andIDENTIFIED BY '…'in SQL; andgh secret set --body,kubectl --from-literalandfly secrets set. - security A JWT is masked whole.
{"access_token":"<jwt>"}was stored as***REDACTED***.<payload>.<signature>, which hid only the header, the one part that is not sensitive, and a JWT with a short header or not under a key name was not masked at all. - security The bundled SQLite is 3.54.1, for CVE-2026-119375 (RUSTSEC-2026-0459): earlier versions could return uninitialized memory to queries on a database opened with a
-walfile of a different page size. Suvadu only opens databases it wrote itself. - changed Recording is faster for most commands: a command with none of the words the redaction rules need skips them, 7.6 ms p50 against 13.5 ms in 0.5.2. One that needs them takes 15.0 ms against 13.1 ms, because there are about twice as many rules.
- changed
suv sessionsshows the whole session ID and a Started column on a terminal at least 190 columns wide. Codex IDs drop theircodex-prefix like the other agents' IDs. - fixed The x86_64 Linux binary starts on older distributions again. 0.5.2's was linked against glibc 2.39, so on Ubuntu 22.04, Debian 12, RHEL/Rocky 9, Amazon Linux 2023 and older it failed with
GLIBC_2.39 not found. It now needs glibc 2.28 at most, and before each release the x86_64 binary is run on Ubuntu 18.04–24.04, Debian 11–12, Rocky Linux 8–9 and Amazon Linux 2023, and the arm64 one on Ubuntu 20.04 and Debian 12. - fixed Searching for a secret's name keeps the whole command: in
grep "PASSWORD=" .env | grep "foo", the quote closing the pattern was read as opening a value and everything up to the next quote was masked.
v0.5.2
- added
cargo install suvadualso installssuvadu— the same command assuv, under the package's name, as Homebrew and the install script already provide with a link. It runs thesuvinstalled beside it with the same arguments, output and exit status, sosuvadu mcp-serveworks however Suvadu was installed. That is the name MCP clients use when they install Suvadu from the official MCP Registry, where Suvadu is described by itsserver.json(io.github.AppachiTech/suvadu). - added
cargo binstall suvadudownloads the release binaries instead of building from source, and verifies each tarball's minisign signature with the same keysuv updateuses. Release tarballs also hold asuvadulink tosuv, which the installers ignore. - changed Homebrew describes Suvadu by what it does:
brew searchandbrew infoshow "Shell history search with AI agent command tracking and an MCP server" instead of "Total recall for your terminal."
v0.5.1
- upgrade Rerun
suv init opencodeandsuv init cursorafter upgrading, then fully quit and reopen OpenCode and Cursor: OpenCode gets a plugin that keeps long sessions captured, and Cursor gets the two new hooks behind full session capture. - upgrade If you use Antigravity, run
suv init antigravityand restart it. It now adds a marked block to~/.zshenv, backing up the previous file as.zshenv.suvadu-backup-<id>. - upgrade A bookmark you saved earlier that contains a
{{word}}meant literally now asks for a value when you pick it. Write it as\{{word}}to keep it literal. Other double braces that are not placeholders, such as Go templates'{{.State.Status}}, stay as typed. - upgrade The database upgrades itself on the first run after the update, one process at a time, so several shells opening at once wait rather than fail. It builds the new search indexes once: about 0.7 s, 0.1 s and 60 ms for 100,000 commands on an Apple M4 Max (BENCHMARKS.md). The separator-free index adds 12–25% to the database, the prefix index about 6–8%.
- upgrade
cargo install suvadunow needs Rust 1.95 or newer, which its SQLite dependency already required; an older toolchain is told so up front. - added
hiveagentfindshive-agent— when atermssearch (the default) matches nothing, recall tries again ignoring separators (whitespace,-,_,.,/,:) in both your query and your history, sohiveagentfindshive-agent,hive_agent,hive.agent,hive/agentandhive:agent, and the other way round. The results are labelledignoring punctuation (-_./:)and never mixed with exact matches: if anything matches as typed, only that is shown. The MCPsearch_commandstool falls back the same way and says so. - added Smart rank learns your habits — within a match tier, recall now also weighs frecency: how often and how recently you ran that exact command (each run counts 16 in its first hour, down to 0.25 after a month), so twenty runs a day or two ago beat one run five minutes ago. A command that usually fails (more than half of at least three runs; Ctrl+C is not a failure) is scaled down, to a quarter when it has never succeeded. A closer textual match still always wins, and Recent rank (
^S) orders exactly as before. - added Smart rank knows what you usually run next — after
git add -A,git commitnow comes before thegit statusyou run far more often. Recall looks at what followed the newest 500 runs of this shell's last command (within 10 minutes, in the same session) and boosts a command seen there at least twice by up to ×3. Turn off this boost alone with Sequence Boost insuv settingsor[search] sequence_boost = false. - added Bookmarks with placeholders — save
ssh {{user:root}}@{{host}}and picking it insuv bookmarksopens a small Fill Placeholders popup, one field per placeholder, prefilled with its default and with the filled command previewed.Enteron the last field puts the command on your prompt; it is never run. Without a terminal,suv bookmarks get <label|command|id> --set host=db1prints the filled command, and fails naming any placeholder left without a value or default. Values are inserted verbatim and never stored. - added
list_snippetsMCP tool — read-only and on by default: lists your bookmarked commands with their ids and labels, and for a template its placeholders and defaults, so an agent can fill one withsuv bookmarks get … --set …instead of retyping it.query,parameterised_only,limitandoffsetnarrow and page it. - added Keep the end of a failed command's output (opt-in) — with Keep Failure Output in
suv settings([capture] failure_output = true, off by default), a command that exits non-zero keeps the last 4 KB it printed, where Suvadu already has that output: Claude Code'sPostToolUseFailureerror text, Cursor'safterShellExecutionoutput, a CodexPostToolUseresponse with an exit code and output, OpenCode's bash output, andsuv wrap, which passes stderr through unchanged while keeping its end. Commands typed in your shell never have it. Escape codes are stripped and the text is redacted before it is cut;suv gc --failure-outputdeletes all of it and keeps the commands. - added Recall and the MCP failure tools say why a command failed — when a failed command has recorded output, recall's detail pane shows it under an Output row, and
what_failed,command_status,learn_from_failuresand thefailures/recentresource show its last three lines (all of it withdetail=true), marked as the command's own text, not instructions. Without it they now say why it is missing and how to turn it on. - added "Last time this failed, you fixed it with …" — for a failed command, recall's detail pane says what fixed it before, most often first (
you fixed it with: npm install, then reran it (3×)), andwhat_failedandlearn_from_failuresadd afixed before (inferred)line. It is worked out from your history when asked, storing nothing: what succeeded next in the same session and directory within 15 minutes, a similar command or the setup step before a rerun. It is an inference from what ran next, never an observed cause. - added Agent sessions record which files changed in git — a Claude Code, Codex, OpenCode or Cursor session working in a git repository gets a git snapshot at its first prompt and at each turn end: the commit and branch checked out and which paths
git statusreports as changed. Paths only, never contents or diffs; at most 500 paths, with your exclusions and redaction applied.gitruns only at those moments, never per command, with a 2-second limit. In a 10,000-file repository a snapshot adds about 30–35 ms to the hook that takes it (Apple M4 Max; BENCHMARKS.md). Off with Record Agent Git Snapshots insuv settingsor[agent] record_git_snapshots = false. - added
what_changedreports what an agent session changed instead of guessing — given asession_id, it compares the session's two snapshots and answers withprovenance: observed: the HEAD movement, the commits made in between with their subjects, and every path whose git status changed. It says plainly that a path changed in the repository, not necessarily by the agent. Without both snapshots it reads the session's commands for their likely effect, as before, and says why nothing was observed. - added The AI session timeline and handoff show what changed — in
suv sessions, an agent session's timeline header addsChanged: 3 files, 1 commiton terminals at least 100 columns wide, and the handoff scaffold (h) lists the commits and changed paths under Changed-file evidence, citing the two snapshots. - added Each command keeps the git branch it ran on — every command recorded live inside a git repository, by the zsh and Bash hooks or an agent integration, keeps the branch checked out (or the short hash of a detached HEAD), read from the repository's own files with no
gitprocess: about 10–20 µs (Apple M4 Max; BENCHMARKS.md). Recall's detail pane shows a Branch row and detailed MCP rows addbranch <name>. Off with Record Git Branch insuv settingsor[shell] capture_git_branch = false. - added A zsh-autosuggestions strategy —
ZSH_AUTOSUGGEST_STRATEGY=(suvadu history)makes zsh-autosuggestions suggest what Up-arrow would recall, with AI-agent commands hidden unlessAlt+Arevealed them, falling back to zsh's own history. Each suggestion is one lookup of 5–8 ms p95 at 100,000 commands on an Apple M4 Max, most of it starting the process (BENCHMARKS.md), fetched asynchronously by zsh-autosuggestions 0.7. - added
suv doctorsays when Up-arrow is no longer Suvadu's — a plugin loaded aftereval "$(suv init zsh)"(oh-my-zsh's key bindings, zsh-history-substring-search, zsh-vi-mode, fzf, atuin, mcfly) can rebind Up and silently replace Suvadu's recall. The zsh hook now checks once per shell, at the first prompt, and doctor's new Up-arrow line warnsbound to … by something loaded after Suvaduwith the fix: put theevalline last in~/.zshrc, thenexec zsh. The check prints nothing and costs about 0.8 ms per shell start (Apple M4 Max; BENCHMARKS.md); it is skipped when arrow navigation is off, and Bash keeps its own Up-arrow history. - added Scroll recall's detail pane —
Shift+Tabmoves focus into the detail pane when its contents don't fit, and↑↓,PgUp/PgDn,Home/End(orj/k/g/Gin vim mode) scroll it, with a scrollbar and the rows in view in the title.EscorShift+Tabreturns to the list. - added Cursor sessions are captured —
suv init cursoralso registers Cursor'safterAgentResponseandstophooks, so each Cursor conversation is a full agent session (cursor-<conversation_id>) insuv sessions,suv agent sessionsand the MCP session tools: prompts, final responses, how each turn ended and the model, with its commands under the turn they ran in. Cursor's hooks report no token usage, so a Cursor session shows usage as unavailable, never zero. - added Antigravity agent commands are recorded — Antigravity's agent runs each command as
zsh -c '<command>', a shell that never reads~/.zshrc, so the shell hook never saw them.suv init antigravitynow writes a capture script and a marked block in~/.zshenv($ZDOTDIR/.zshenvwhen set) that loads it only in a non-interactive zsh running a-ccommand with$ANTIGRAVITY_AGENTset; every other shell skips it. Each agent command is recorded when its shell exits, with exit code, duration and directory, in one session per Antigravity run. Zsh only, no prompts, and a command started withexecor killed by a signal is not recorded. To make the shell wait for the command, the script sets a no-opEXITtrap, which in those shells replaces one set earlier in~/.zshenv.suv doctorchecks both the script and the block, andsuv uninstallremoves the block. - added Team skills committed in the repository — Markdown files in
.suvadu/skills/*.mdare skills for that project, listed bysuv skillswith originrepo. Because they arrive with whatever you clone, they are untrusted untilsuv skills trustrecords a hash of each file; only then doessuv skills syncwrite them into your agent files. A file changed since (after a pull, say) stops syncing until trusted again, andsuv skills untrusttakes trust back. Over MCP an untrusted repo skill is listed by name and path only; its text is never served. Suvadu never writes, moves or deletes these files. - changed Prefix search seeks an index —
suv get --prefix, which Up-arrow and the zsh-autosuggestions strategy run, fell from 12–25 ms to 5–8 ms p95 at 100,000 commands, about 1–4 ms beyond starting the process, and recall'sprefixmode from 15 ms to 70 µs (Apple M4 Max; BENCHMARKS.md). Results are unchanged. - changed Substring search uses the trigram index as intended —
termsandliteralqueries used to scan the whole history. On the 100,000-entry benchmark corpus (Apple M4 Max; BENCHMARKS.md) most judged queries now return in well under a millisecond instead of 10–40 ms, with the same results, andfuzzyis about twice as fast. - changed The risk rules check every command of a line —
suv guardandassess_risksplit chained, piped and wrapped commands (&&,;,|,sudo,env,bash -c,ssh host,$(…),find -exec) and rate each one. They catch every spelling of recursivermand force push, add rules forkubectl delete,terraform destroy,find -delete,shred,truncate,docker system prune,git checkout ./git restore ., SQLTRUNCATE/DELETEwithoutWHERE,crontab -randdiskutil erase*, and no longer blockchmod 755,pip install -r requirements.txtor./build.sh. - changed A project
.suvadu.tomlcan only tighten privacy — it can no longer turn redaction off or recording back on, and itsexclusionsandredaction.extra_patternsadd to your global lists instead of replacing them. - changed
suv updateinstalls only a strictly newer release, and refuses a download whose signed version does not match the release it advertises. - changed
suv skills syncremoves what it generated for skills that are gone — the files of a skill removed withsuv skills rmor stopped withsuv skills disableused to stay until a separatesuv skills cleanup. The next sync removes them, with the same ownership check: a file edited since is reported and kept.--dry-runlists them as would remove. - fixed Bash records the whole line you typed — the hook stored only the last simple command, so
cd /tmp && lswas recorded aslsand a pipeline as its last stage. An empty Enter no longer re-records a prompt command, leading-space lines are skipped underignorespace/ignoreboth, and an existing multi-lineDEBUGtrap keeps working. Zsh keeps recording underOCTAL_ZEROES,SH_WORD_SPLIT,NO_UNSETor asuvpath containing a space. - fixed A config file that doesn't load no longer stops recording or agent capture — recording, transcript imports and the agent prompt caches fall back to the global config, or to the defaults with redaction on, and
suv doctornames the broken file. - fixed Fewer lost commands — commands over 64 KB are stored cut to 64 KB (redacted in full first) instead of dropped; several shells starting together after an upgrade no longer fail with "database is locked"; parallel first commands of one agent session are kept; and commands that start with
-are recorded and recalled. - fixed Agent capture keeps going — long OpenCode sessions are no longer rejected once their history passes 16 MB (rerun
suv init opencode); a Bash call with megabytes of output is still recorded from Claude Code, Cursor and Codex; one torn transcript line no longer stops a Codex or Claude Code session's capture for good; and forked and subagent Codex sessions are captured as their own sessions, linked to their parent. - fixed Search folds Unicode case rather than only lowercasing it —
σfindsΟΔΟΣandstraßefindsSTRASSEinterms,fuzzy, the separator fallback, ranking and highlighting. A word typed in plain ASCII still folds ASCII only, asliteralandprefixdo. Theworkspacescope, and the MCP tools that take a project directory, now compare paths case-sensitively. - fixed Filters say when they cannot read what you typed — recall's filter popup, the session picker's filter popup, and the
--after/--beforeflags ofsuv history,replay,search,sessions,exportandagentused to drop a date they could not read (last tuesday) and show everything. They now refuse it, list the accepted formats, and keep the filters already applied; a tag that does not exist or a non-numeric exit code is refused the same way. - fixed Screens behave alike — Ctrl+C closes every interactive screen in one press; the session picker keeps your query, filters, page and selection when you come back from a timeline; a timeline says Back, Home or Quit by where
q/Escgoes; screens opened from Home sayEsc Home; pasted and typed text keep to the same byte limits; the terminal is restored if a screen fails to start; andsuv agent dashboard,prompts,statsandsuv aliases suggestexit 1 when the screen fails. - fixed
suv doctorfinds a search index that no longer matches your history, andsuv gcrebuilds it — shells that raced an older schema upgrade could index every command twice.suv gc --dry-runsays whether a rebuild is needed. Search also lists every entry its total counts. - fixed
suv import --from zsh-historydecodes non-ASCII text correctly, adds nothing on a re-import, keeps both runs of a command run twice in one second, and no longer duplicates commands already captured live. - fixed
suv settingskeeps comments and unknown keys when saving, refuses a blank exclusion pattern, always adds a directory onCtrl+Ain the MCP tab, and accepts a search page limit up to 10,000. Auto-tags and custom agents deleted there stay deleted. - fixed
suv skills syncnever replaces an AGENTS.md, SKILL.md or.mdcit cannot read, even with--force, and writing through a symlink keeps the link. The agent dashboard, Prompts and agent stats show the newest 10,000 agent commands, not the oldest.suv aliases add-suggestedasks before writing and never overwrites an alias, andsuv aliases removetakes effect in new shells.suv tag associateas a new shell's first command keeps the tag.suv delete --helpshows an example that runs. - fixed MCP server — a far-off date or huge window no longer crashes it, a failure inside one tool call is an error result instead of the end of the session, unreadable dates are an error naming the accepted formats,
recent_commandswith adirectorykeeps to it, large pages stop at a whole row with a workingnext_offset,initializeanswers in the protocol version the client asked for (2024-11-05 through 2025-11-25), malformed messages get a-32600error and notifications are never answered, andfind_agent_sessionfinds sessions older than the newest 5,000 commands. - security
suv statsno longer passes recorded command text to a shell — resolving aliases ran the first word of a history entry unquoted through an interactive shell, so an entry such asls;touch${IFS}/tmp/xwas executed. Only plain program names are probed now, each quoted. - security Redaction catches more secrets — OpenAI
sk-proj-/sk-svcacct-keys,curl --header/--user, httpie auth headers, credentials in anyscheme://user:pass@hostURL, temporaryASIA…AWS keys,aws configure setsecrets, Slackxoxe-/xapp-and GitHubghu_tokens,sshpass -p,docker login -p, quoted passwords with spaces and whole PEM private-key blocks — and no longer rewrites harmless commands such asmysql -P3306or--sort-key=…. The Cursor prompt cache is now redacted before it is written.
v0.5.0
- 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.