Changelog

Full release history for Suvadu.

Also available on GitHub Releases and CHANGELOG.md.

v0.5.0

Latest
  • added Suvadu Home — a bare suv at a terminal, or suv 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. F1 lists the keys and F2 opens 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, or SUVADU_NO_UPDATE_CHECK=1.
  • added A startup screen for a bare suv — a bare suv at a terminal now opens Home instead of printing the command overview. To keep the overview, set Startup Screen to help in suv settings (or [home] startup = "help" in config.toml); suv --help always prints it. Scripts, pipes and TERM=dumb are unchanged: they get the overview on stderr with exit status 2, exactly as before. Only your own config sets it; a project's .suvadu.toml cannot.
  • 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 terms mode, the whole query in literal, the start in prefix, and the characters the subsequence rule walked in fuzzy. 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 -- --user installs into ~/.local/bin, and --dir DIR (or SUVADU_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 your PATH. 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 ~/.bashrc on Linux), and adds it only if you answer y, after saving the old file as .suvadu-backup. It never asks when a hook is already there, when the suv on PATH is not the one just installed, when ZDOTDIR points elsewhere, for Bash on macOS, or with --no-modify-rc; suv uninstall removes the line again.
  • added The install script checks the release signature when it can — with minisign installed, it verifies the archive against the same public key suv update uses and aborts before installing anything if verification fails. Without minisign it 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 of config.toml. Saving writes the same words --match and --scope accept and keeps every other key in the file, including ones this build does not know.
  • changed suv --help starts with home — the overview has a Start here group listing suv home. A mistyped command's error now shows Usage: suv [COMMAND], since a bare suv is itself valid.
  • changed Recall opens in the Commands view — Ctrl+R and suv search now 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+U switches 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 where config.toml does not set search.show_unique_by_default; a value already there, including one suv settings wrote, is kept, so false still 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, or Commands 1-50 of 139 when 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+R returned 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 (and Ctrl+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, and Ctrl+V opens 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 search no 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 shows searching…. 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 update uses sudo only when it has to — it now replaces a suv in 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 macOS suvadu update replaces suv rather than the suvadu link, and a Homebrew link on Intel macOS, a link to Cargo's binary, or one under a custom $CARGO_HOME is 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 uninstall now removes an install-script install — it recognised only Homebrew and Cargo, and for a script install printed an rm command and left the shell hook line and agent hooks behind, so every new shell failed on the missing suv. It now removes suv and its suvadu link (with sudo only if that directory is not writable) and cleans the shell and agent integrations as for the other methods. A suv in a system or package-manager location is never treated as a script install, and a ~/.zshrc or ~/.bashrc that is a link stays a link. History and config are still kept.
  • fixed The bundled uninstall.sh removes what the install script added, and only that — it takes --user/--dir like the installer (or finds the suv on PATH and removes it only if the install script put it there, deferring to suv uninstall for 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 suv in the directory it is already in, and when the suv on PATH belongs to Homebrew or Cargo it stops and prints brew upgrade suvadu or cargo install suvadu instead; any other suv is left alone. The new binary is renamed into place, so a failed install leaves the previous one working.
  • fixed fuzzy search now folds non-ASCII case, as the help and README already said — suv search --match fuzzy ÉCHO found nothing where terms found echo écho. literal and prefix are unchanged and still fold ASCII only, because SQLite's LIKE answers them.
  • fixed The Homebrew install note now covers Bash — brew install suvadu gives the Zsh and Bash hook lines, says to open a new terminal and check with suv 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+X in the UI) picks how a query matches, and --scope all|directory|workspace|session (Ctrl+P to cycle, Ctrl+R to reset) picks what it looks at: everything, exactly this directory, anywhere in this Git repository or linked worktree, or this shell session. --here is 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 keys search.match_mode, search.scope and search.compact all default to the previous behaviour.
  • added Inline recall — suv search --compact draws 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 sessions picker 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-run names the exact target file and shows the diff before anything is written.
  • added suv doctor reports 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-run previews 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.md records the method and the baseline.
  • changed One response convention across every MCP tool and resource — RFC 3339 timestamps, unknown for a missing exit code instead of ?, -1 or a silent 0, 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 status separates 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 doctor groups 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.md and suv --help were 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+R used 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 --query now goes through the same pipeline as typing, fuzzy keeps its own ordering rule, and an upper-case query in terms mode matches case-insensitively as documented — GIT used to find nothing while git found everything.
  • fixed suv search --compact works 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.sh on 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 status and suv doctor no 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 sync no longer deletes instructions written below its marker, and a project-scoped skill no longer uninstalls the global skill of the same name.
  • fixed suv settings covers every MCP tool and resource, including the two write opt-ins, so turning on saved session summaries or skill proposals no longer means hand-editing config.toml. Saving also stops discarding config keys this build does not recognise.
  • fixed suv doctor no longer creates the database as a side effect of checking for it, and suv uninstall prints 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_history used to be copied in verbatim, and configured exclusions were never consulted.
  • security An Atuin intent can 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/index hides skills scoped to an excluded directory, and capture diagnostics no longer name a directory that mcp.exclude_dirs hides — 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 with suv agent import-session, remove with suv agent delete-session.
  • added Claude Code session capture — suv init claude-code installs 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.messages API when a session goes idle. suv init opencode now 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, and resolve_current_agent_session let 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 sessions now combines human terminal sessions, command-backed agent sessions, and native Codex/Claude Code/OpenCode sessions in one picker (Ctrl+T cycles 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 s on an AI session in suv sessions to view its saved summaries in a scrollable overlay. Tab toggles between a lightweight rendered view and the raw markdown, Ctrl+Y copies the raw markdown, and [/] cycle between multiple saved summaries for the same session.
  • added Builtin session-memory skill — suv init claude-code and suv skills sync now seed and materialize a suvadu-owned suvadu-session-memory skill (gated on mcp.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's AGENTS.md too on a default sync.
  • fixed suv mcp-serve no 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_item transcripts 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 skills keeps reusable instructions in one place instead of every AI tool maintaining its own copy. suv skills add/list/show/edit/rm manage skills scoped to global or a specific project directory; three new read-only MCP tools (list_skills, get_skill, search_skills) plus a client-readable suvadu://skills/index resource let any MCP-capable agent discover and read them directly.
  • added suv skills is now a full interactive management app — bare suv 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/sync keep 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 in AGENTS.md for 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_skill MCP tool (off by default) — lets an agent propose a new skill, saved as pending_review only, never active. Enable with mcp.allow_skill_proposals = true in config.toml; a human approves or rejects proposals from the review queue in suv 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, and assess_command_risk are 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. The initialize handshake's instructions field is also now directive rather than purely descriptive, telling a connecting client when to proactively call project_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 new agent.risk_extra_patterns config list (regex + level + description).
  • added Prompt Explorer gets an always-on search box and filters — suv agent prompts now live-filters by prompt text as you type, with Ctrl+P/Ctrl+A cycling time period/executor and Ctrl+S jumping to a prompt's session timeline, mirroring suv 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.toml in 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 from suv 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 separate add/remove invocations for every change. Opens even with zero bookmarks saved yet.
  • added suv aliases (renamed from suv 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 sourced aliases.sh while aliases remain, so it's live in new shells without a separate suv aliases apply. add/remove/list/apply/add-suggested/suggest keep working exactly as before for scripting.
  • changed Command search is faster — suv search/Ctrl+R substring 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 --help groups commands by purpose (Setup, Search & recall, Insights & safety, Organize, Data, AI integration, Other) instead of one flat list, and surfaces the Ctrl+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, and suv sessions — all now share the same centered SUVADU <SCREEN> title and footer badge styling with Quit listed first; the search-driven screens also share an always-on live-filter search box and Ctrl+<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 session renamed to suv 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 as q/vim-style navigation shortcuts).
  • fixed mcp.exclude_dirs is now actually enforced — the setting was configurable via suv settings and saved to config.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 sessions now 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 $EDITOR for 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, and suv settings' title matches every other screen — the earlier visual-consistency pass fixed both screens' title/footer styling but missed suv stats' border style and never touched suv 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 codex installs hooks that capture both prompts and shell commands, merging into any hooks you already have in ~/.codex/hooks.json rather than overwriting them, and auto-registers the suvadu MCP server in ~/.codex/config.toml so Codex can query your shell history directly. The config file is edited in place, so existing comments and formatting survive untouched.
  • fixed .bashrc commands sourced before the first prompt are no longer recorded as if you'd typed them — bash's DEBUG trap fires for every command bash runs, not just ones typed interactively, so setup lines left in .bashrc after the eval "$(suv init bash)" line were getting captured at the first prompt.

v0.3.6

  • added PageUp/PageDown/Home/End navigation in the search TUI — PageUp/PageDown scroll 10 rows at a time, Home/End jump 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 checks CODEX_THREAD_ID, the variable Codex really exports.
  • fixed cargo test no longer backgrounds itself under Bash/Zsh alias detection — concurrent interactive alias-detection shells could raise SIGTTOU and suspend the whole test process. These shells are now detached into their own session.

v0.3.5

  • added "Bookmarks only" search filter — Ctrl+O in the search TUI shows just your bookmarked commands.
  • fixed brew install on 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 suv binary 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) — $EPOCHREALTIME parsing now forces LC_ALL=C.

v0.3.4

  • changed Recall now hides AI-agent commands by default — Up-arrow and Ctrl+R show your own commands only. Toggle live with Ctrl+A / Alt+A, per-run with --include-agents, or set search.recall_show_agents in config. Up-arrow is also recency-first, so a command typed in another directory isn't buried after cd.
  • 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 destructive suv delete (--no-backup to skip).
  • added suv bookmark pick — interactive picker that recalls a saved bookmark into your prompt.
  • added "Failed only" search filter — Ctrl+E in the search TUI or suv search --failed.
  • added suv stats --human — analytics excluding agent activity (also the h toggle 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) and redaction.extra_patterns (your own secret regexes).
  • added Idempotent JSONL import — suv import deduplicates (--allow-duplicates to opt out); new risk patterns for git clean -f, world-writable chmod, and chown -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 piped y when stdin is not an interactive terminal.

v0.3.3

  • fixed Cross-machine suv export → suv import no longer dies with a FOREIGN KEY error on a fresh database — the importer auto-creates a placeholder session for unknown session_ids and re-maps each entry's tag_id via the carried-over tag_name (creating the tag locally if it doesn't exist).
  • fixed suv import rejects non-JSONL files (e.g. an accidentally-piped CSV) up front with a clear, single-line error pointing at suv export > history.jsonl, instead of spewing a parse error for every line.
  • fixed suv export --format json with 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+V works 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_FILE are 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 base crash when EPOCHREALTIME milliseconds had a leading zero (e.g., 068).

v0.3.1

  • added suv history — non-interactive history dump with all standard filters, --json output, and -n limit. 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_percent in [search] config. Tune ranking via suv settings.
  • added pi.dev agent integration — suv init pi installs 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/sessions resource — auto-injected summary of 5 most recent agent sessions.
  • added suvadu://context/project resource — 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 settings or vim_mode = true in 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-serve exposes shell history to AI agents via Model Context Protocol. 11 tools including assess_risk. 5 auto-injected resources. 100% local.
  • added MCP auto-configuration — suv init claude-code and suv init cursor automatically register the MCP server. Zero extra setup.
  • added Cursor agent integration — suv init cursor installs 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 cursor installs 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 search standalone — 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 in suv settings TUI.
  • 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 update now 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 session timeline, suv wrap for 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.