Skip to content

Changelog ​

Release history for TinyVault. Full notes and binaries are on the GitHub releases page; the canonical source is CHANGELOG.md in the repo.

Install or upgrade:

bash
brew upgrade --cask tvault                                           # Homebrew
npm install -g @thelacanians/tinyvault@latest                        # npm
go install github.com/abdul-hamid-achik/tinyvault/cmd/tvault@latest  # Go, from source
tvault self-update                                                   # downloaded release binary

tvault self-update verifies the release checksum before replacing the binary and is meant for a binary you downloaded yourself; keep Homebrew, npm, and distro packages on their own package manager. See Install & quickstart for every install option.

If tvault was installed from the retired formula, migrate once with brew uninstall --formula tvault, then run brew install --cask abdul-hamid-achik/tap/tvault.

Unreleased ​

Changed ​

  • Desktop release artifacts are now built one Windows architecture per invocation, so a release carries -win-x64.exe and -win-arm64.exe only. Given both arches at once, electron-builder's NSIS target also emits a combined installer whose ${arch} is empty — v0.25.0 therefore has a redundant 211 MB TinyVault-0.25.0-win.exe beside the two named ones. It is not produced from the next release.

0.25.0 — 2026-10-01 ​

Added ​

  • Desktop app (app/): an Electron GUI over tvault mcp — secrets with per-field reveal, create/edit/delete and random generate, a sortable table and empty-vault onboarding, version history and rollback, cross-project search, the audit log with server-side time-range, action, and resource-type filters, environment groups (create by linking existing projects, drift matrix, promote with dry-run, add and remove environments, delete a group, inheritance, pin/unpin), sharing (identities, recipients, share/revoke, seal to a commit-safe v2 blob, open a sealed blob back to a 0600 file), a .env screen (discover dotenv files in a folder, preview then run an import, diff against a project, sync pull/push/mirror, export plaintext or encrypted), and vault snapshots (write, list, restore). It is a front end, not a second implementation: it spawns the CLI and speaks JSON-RPC over stdio, and never opens vault.db, so the Go process keeps sole ownership of the crypto, the audit log, and the single-writer bbolt lock. The renderer is sandboxed (no Node, no filesystem, no navigation, window.open denied), values auto-hide after 30s, the clipboard self-clears, screen-capture exclusion engages only while a value is on screen, and the passphrase never reaches the renderer. It cannot author a file path either: every read or write target comes from an OS dialog answered in the main process, or from a dotenv file the server discovered inside a folder you picked, and main refuses any path it did not issue. See Desktop App.
  • Desktop release artifacts. Each v* release now also carries TinyVault-<version>-mac-{arm64,x64}.dmg, -linux-{x86_64,arm64}.AppImage, and -win-{x64,arm64}.exe, built from the same tag as the CLI. They are unsigned and unnotarized and have no auto-update, so Gatekeeper and SmartScreen warn until you clear them — the desktop guide has the exact steps. The app does not bundle the Go binary; it resolves tvault at runtime, so install the CLI as well.
  • --json for tvault backup, tvault restore, and tvault key rotate, with metadata-only shapes ({path, bytes, raw_bytes, compressed, immutable, created_at}, {restored, source, vault_dir, saved_snapshot, restored_at}, and {rotated, vault_dir, rotated_at}), recorded in the tvault docs features manifest. Snapshots are copied as opaque bytes and never decrypted, so there is no value to leak. Passphrase prompts and warnings (for example, --immutable not applied on this platform) go to stderr so stdout stays a single JSON document, and restore --json requires --yes because a confirmation prompt cannot be answered on a machine-readable stream.

Changed ​

  • Every remaining --json writer (list, projects, search, status, sync, diff, doctor, the locked-vault envelope, help, docs) now goes through one encoder — writeJSON, with HTML escaping off — so &, <, and > are emitted verbatim instead of arriving as HTML escapes. A DATABASE_URL with a query string was previously corrupted in JSON output. tvault sync --json also reports snake_case fields and names its direction.

Fixed ​

  • vault_env_seal ignored its output_path. The handler set the path, then overwrote it with an empty string and returned the whole sealed blob as base64 anyway — so a caller that asked for a file got ciphertext in the conversation instead, contradicting the tool's documented contract and diverging from vault_seal_for_recipients and vault_export_env_encrypted, which both write a 0600 file and return only its path. Ciphertext is not plaintext, so nothing was exposed, but the point of output_path is to keep the blob out of the model's context. It now writes the file like its two siblings.
  • tvault sync --json emitted plaintext secret values. sync.Conflict carried VaultValue and EnvValue with no JSON tags, and the whole result was marshalled to stdout, so both sides of every conflict landed in machine-readable output — against the value-minimisation model in Security. Nothing consumed those fields: the human output and the MCP layer report key + resolution only. They are deleted rather than tagged out, which also keeps the values out of memory after the merge.
  • tvault restore works on Windows when a vault already exists (it released the lock too late to rename over the open file), caps gzip expansion at 8 GiB, and names its fallback vault.db.pre-restore-* copy with millisecond resolution so two quick restores cannot overwrite each other.
  • Backup rotation matches only the exact names it writes, so a hand-made vault-*.db in the backup directory is never pruned; the directory is fsync'd after each rename; --keep rejects negative values; the success line reports the compressed size on disk.
  • tvault env --format shell and the tvault ssh script skip keys that are not valid shell identifiers (defense in depth; keys are validated on write).

0.24.0 — 2026-09-23 ​

Added ​

  • Rotated, compressed backup snapshots: tvault backup [path] [--dir D] [--keep N] [--immutable] without a path writes a timestamped, gzip-compressed vault-YYYYMMDD-HHMMSS.mmm[-reason].db.gz into --dir (or backup.dir in config.yaml) and prunes the oldest beyond --keep (or backup.keep, default 30); rotation only ever touches files it wrote (vault-*.db[.gz]).
  • --immutable / backup.immutable: true marks rotated snapshots with the macOS/BSD user-immutable flag (chflags uchg), so an accidental rm -rf fails with Operation not permitted; tvault backup clears the flag itself on snapshots it prunes. Unsupported on Linux/Windows (a warning is printed; the snapshot is still written).
  • Safety snapshots before destructive operations: when backup.dir is configured, tvault delete, tvault projects delete, tvault restore, and the MCP vault_delete_secret / vault_delete_project tools take a rotated snapshot first (pre-delete, pre-delete-project, pre-restore) and are refused — nothing changes — if that snapshot fails to write.
  • tvault restore now stages and verifies the incoming backup before touching the current vault, and always saves the current vault first (into backup.dir when configured, else next to vault.db as vault.db.pre-restore-<time>) before the atomic swap. It also accepts a gzip-compressed backup, auto-detected by magic bytes.
  • tvault doctor gained a backups check: warns when backup.dir isn't configured, when it has no snapshots yet, or when the newest snapshot is older than 7 days; otherwise reports the snapshot count and age.
  • Documented backup scheduling with a macOS launchd example and a Linux systemd --user timer example — see Backups & recovery.

Changed ​

  • tvault backup now writes a consistent, transactional snapshot (store.Snapshot, a bbolt read transaction via Tx.WriteTo) instead of a raw byte copy of vault.db, so a concurrent write from another tvault process can no longer produce a torn backup. The snapshot is written to a private temp file in the destination directory, fsync'd, verified (opened read-only, core buckets checked), and only then renamed atomically into place at 0600 — a failed or interrupted backup never leaves a truncated file behind. One side effect: because the audit log usually dominates a vault's size and compresses roughly 10x, a compressed snapshot can be noticeably smaller than vault.db.

0.23.0 — 2026-09-22 ​

Added ​

  • agent.passphrase_command (config.yaml) and TVAULT_PASSPHRASE_COMMAND let the vault passphrase live in a password manager or the OS keychain instead of a plaintext file — for example 1Password (op read op://…), the macOS Keychain (security find-generic-password -w), or pass. The command runs directly (never through a shell), with stdin closed, output capped at 4096 bytes and time-bounded to 2 minutes, and errors never echo its stdout. A command sourced from config.yaml only runs when that file is owned by the current user and not writable by group or others. tvault mcp does not treat a configured command as a "cheap" unlock source — it prefers a running local agent for reads and only runs the command as the fallback unlock, so an MCP session start does not force a Touch ID prompt. tvault agent install accepts it as an alternative to --passphrase-file and warns when the program isn't an absolute path. See Keep the passphrase out of plaintext.
  • tvault shell-init <bash|zsh|fish> --project <name> prints quoted export assignments for eval at shell startup. It never prompts: values come from a running tvault agent, or — only with --allow-unlock — a non-interactive unlock source. When nothing is available it prints nothing, warns once on stderr (--quiet silences it), and exits 0, so a locked vault never blocks a new shell. --only/--prefix narrow the loaded set.
  • config.yaml now also resolves from an XDG location ($XDG_CONFIG_HOME/tvault/config.yaml, falling back to ~/.config/tvault/config.yaml) when the vault is the default ~/.tvault, plus a --config <file> flag and TVAULT_CONFIG environment variable. Scratch vaults (--vault/TVAULT_DIR) ignore the XDG location. tvault doctor warns when both a vault-directory and an XDG config file exist.
  • tvault doctor reports the non-interactive "unlock source" that would be used (environment variable, passphrase command, plaintext passphrase file, or none) without ever running the command or printing a secret; a plaintext file is flagged with a suggestion to move to agent.passphrase_command.

Security ​

  • tvault env --format shell, tvault ssh's remote export script, and tvault shell-init now always single-quote a value that contains a character outside a conservative safe set ([A-Za-z0-9@%+=:,./_-]). Previously, characters such as ;, &, |, <, >, (, *, ~, and # were left unquoted, so a stored value like a;touch pwned could execute part of itself when the caller ran eval "$(tvault env)".

0.22.2 — 2026-08-24 ​

Fixed ​

  • Windows npm smoke: do not process.exit() after fetch, which aborted with a libuv UV_HANDLE_CLOSING assert even after the registry wait succeeded.

0.22.1 — 2026-08-24 ​

Fixed ​

  • npm smoke waits for registry.npmjs.org to serve the new version (main package and every platform package) and installs with a fresh cache, so a CDN lag cannot cache an ETARGET miss. Ubuntu failed that way on 0.22.0 while macOS and Windows passed.
  • CI and the release toolchain pin Go 1.26.6 (stdlib fixes that govulncheck flagged on 1.26.5).

0.22.0 — 2026-08-24 ​

Added ​

  • tvault audit lists recent vault audit-log entries (metadata only: action, resource, timestamp). Lock-free; filter with --action, --resource-type, --since, --until, --limit. --json available.
  • tvault generate KEY stores a cryptographically random secret and prints only metadata. The value is never printed. Same generator as MCP vault_generate_secret.
  • tvault ssh <destination> -- <command> runs a remote command with vault secrets in its environment. Values stream over SSH stdin; they are never written to remote disk and never appear on the ssh command line.
  • tvault docker build / compose / run / init wraps the Docker CLI: BuildKit secret mounts, compose interpolation, and docker run -e KEY (name only). Values stay off the docker command line.
  • tvault mcp --connect can serve secret reads through a running local agent so GUI hosts need not store TVAULT_PASSPHRASE.
  • MCP vault_open_sealed decrypts a recipient-sealed v2 blob and writes a 0600 dotenv; the tool result is path + key names, never values.
  • tvault run --redact replaces literal injected secret values in child output with [REDACTED:KEY]. Default is still an unredacted stream.

Changed ​

  • Get, set, delete, project create/delete, rollback, history, and bulk project reads now write the audit log in the vault layer, so CLI, MCP, and the agent share one trail without duplicate rows.

Fixed ​

  • tvault env --format json and tvault export --format json encode the whole object with encoding/json. Control bytes produce valid JSON; &, <, and > stay literal.

Removed ​

  • tvault studio (aliases browse, ui) and the Bubble Tea TUI. Browse and mutate with the CLI (status, list, search, get, set, delete, audit, env group, diff) or MCP.

0.21.1 — 2026-08-14 ​

Fixed ​

  • Non-interactive unlock now finds ~/.config/secrets/env when neither TVAULT_PASSPHRASE nor TVAULT_PASSPHRASE_FILE / agent.passphrase_file is set. GUI-launched MCP hosts do not inherit a login shell, so tvault get / tvault run from those children used to fail locked even when the conventional 0600 passphrase file existed. Scratch vaults (TVAULT_DIR / --vault) do not inherit that file. TVAULT_PASSPHRASE_FILE is documented on the environment-variables page.

0.21.0 — 2026-08-01 ​

Added ​

  • npm distribution. npm install -g @thelacanians/tinyvault installs the same binaries as the GitHub release, through per-platform packages and a thin spawn shim — and npx -y @thelacanians/tinyvault mcp becomes a zero-install MCP server command for hosts that prefer it.

    bash
    npm install -g @thelacanians/tinyvault

Fixed ​

  • The "vault is locked" error stopped blaming the agent. Run non-interactively with no passphrase, it used to say "set TVAULT_PASSPHRASE, start 'tvault agent', or run in a TTY" — to everyone, including people whose agent was already running and could never satisfy the command:

    bash
    tvault run --only API_KEY -- tvault get API_KEY   # works, served by the agent
    tvault run --only API_KEY -- tvault set PROBE x   # "vault is locked" (exit 3)

    Two deliberate boundaries meet there. The agent serves reads only and never hands out the key, so writes need the passphrase whether or not it is running; and a child of tvault run (or MCP exec) inherits no TVAULT_* variable, so the parent's passphrase never reaches it. The error now says which applies and what would actually work, rather than sending you to debug a healthy socket.

    Nothing about the behaviour changed — nested reads still work through the agent, nested writes still need their own credential. Making the nested write "work" would have meant a write operation on the agent socket (any process running as you could then rewrite your vault) or forwarding the passphrase to children (handing a wrapped process the whole vault after you narrowed it with --only). Both are worse than the error message was. See Troubleshooting.

0.20.2 — 2026-07-26 ​

Fixed ​

  • tvault agent install recorded the resolved binary path, which on Homebrew points into a version-pinned directory. The next brew upgrade deleted it, so the service silently stopped starting — launchctl bootstrap still succeeded and tvault agent restart reported success. The stable symlink is now recorded, and both restart and status report a missing binary instead of claiming everything is fine.

    After upgrading, re-run tvault agent install once to rewrite the definition:

    bash
    brew upgrade --cask tvault
    tvault agent install --passphrase-file ~/.config/secrets/env

0.20.1 — 2026-07-26 ​

Fixed ​

  • tvault studio no longer holds the vault database open for the whole interactive session. bbolt takes a process-wide exclusive lock, so every other tvault invocation on the machine failed while the studio was open. It now caches only the KEK and reopens the vault per operation — the same pattern the local agent uses — so a reopen costs a file open rather than re-deriving the key. No TinyVault surface holds the lock across a long-lived session anymore.

Added ​

  • The studio's status pane reports the local agent (pid, time to idle-lock) and the installed service (launchd/systemd, and whether it is registered). This is read-only: it dials the socket and stats the definition, and never installs — tvault agent install remains the only way to write a service.

0.20.0 — 2026-07-26 ​

Added ​

  • tvault agent install / uninstall / restart register the agent as a per-user background service — a launchd LaunchAgent on macOS, a systemd user unit on Linux. Review the generated definition first with --dry-run:

    bash
    tvault agent install --dry-run
    tvault agent install --passphrase-file ~/.config/secrets/env
    tvault agent restart   # after upgrading tvault

    The definition records only the path to a passphrase file, never the passphrase, and is written 0600. The service restarts on failure but not after a clean exit, so the agent's idle auto-lock still takes effect.

  • TVAULT_PASSPHRASE_FILE (or agent.passphrase_file in ~/.tvault/config.yaml) points at an env-style file holding TVAULT_PASSPHRASE, so the agent can unlock where there is no terminal to prompt at. TinyVault refuses a file that is readable by group or others.

  • Structured agent logging. Logs default to $XDG_STATE_HOME/tvault/agent.log (0600 inside a 0700 directory) and rotate at 5 MiB. Configure with --log-dir / --log-level, TVAULT_LOG_DIR / TVAULT_LOG_LEVEL, or agent.log_dir / agent.log_level. tvault agent logs prints the path and --clear resets it for a redeploy. Records name operations, projects and key names — never a secret value, passphrase, or capability token.

  • tvault agent status now also reports the installed service and whether it is registered with the service manager.

0.19.1 — 2026-07-26 ​

Fixed ​

  • tvault run no longer holds the vault database open while the child process runs. bbolt takes a process-wide exclusive lock, so wrapping a long-lived process (an MCP server, a dev server) made every other tvault invocation on the machine fail for as long as that child lived. The lock is now released before the child starts.
  • A busy vault is no longer reported as a missing one. tvault studio, unlock, lock, and rotate claimed the vault was absent and pointed at tvault init when the real cause was another process holding the lock.
  • The "vault is locked by another tvault process" message no longer suggests tvault agent start (circular when that was the failing command); it points at pgrep -fl tvault instead.
  • An interactive passphrase prompt no longer holds the lock while waiting for input.

0.19.0 — 2026-07-24 ​

  • Recipient identities can now resolve env --group/--env and run --group/--env. The identity must be shared to every participating project; selector reads still decrypt only the requested values, --strict still fails before a child starts, and TVAULT_* controls remain stripped from child environments.
  • Added tvault run --identity <name> for recipient-backed, passphrase-free command injection. run --only / --prefix now decrypt only selected values across direct, inherited-group, recipient-identity, and local-agent reads; --strict remains fail-closed for missing exact keys.
  • The local agent now has a validated getselected read operation, and child processes receive no TVAULT_* controls before selected values are injected.
  • MCP policy loading and environment inheritance now fail closed: explicit policies must be complete, empty allowlists and zero read caps deny access, inherited base projects are checked, and plaintext export requires write permission.
  • Existing vault permissions are normalized on open, non-regular database paths are rejected, and golang.org/x/text is updated to v0.39.0.

0.18.2 — 2026-07-19 ​

  • Windows builds work again: the non-Unix agent client now includes the project-scoped status probe and continues to fail closed with ErrUnsupportedPlatform.
  • CI compiles all six Linux, macOS, and Windows targets that GoReleaser ships, so platform-only API drift is caught before tagging.

0.18.1 — 2026-07-19 ​

  • tvault status --json adds agent_accessible, separating “the local socket exists” from “this process can use it for the selected project with its current token.”
  • locked now stays true when a token-required agent is running but the token is absent, invalid, or scoped to another project. The check remains lock-free and never reads a secret.
  • The release workflow is pinned to GoReleaser v2.17.0.

0.18.0 — 2026-07-16 ​

  • The MCP initialize handshake now reports the real build version instead of a hand-edited literal that had shipped stale in at least two prior releases.
  • README's MCP tools table covers all 49 tools, anchored to the canonical tools reference.
  • CI and release workflows pin GitHub Actions to verified commit SHAs (the release workflow produces the checksums tvault self-update trusts).
  • Changelog sections backfilled for v0.11.1 through v0.15.0, with retro-bundled 0.16.0 bullets moved to the releases that actually shipped them.

0.17.2 — 2026-07-13 ​

Fixed

  • CLI secret-source flags now fail closed before reading a dotenv file, contacting the agent, opening the vault, or launching a child process. Ambiguous get modes, incomplete --group/--env pairs, group selection with run --no-vault, and group selection mixed with identity mode are rejected explicitly.
  • Homebrew install and upgrade examples select the maintained cask explicitly.
  • The MCP handshake now reports version 0.17.2.

0.17.1 — 2026-07-13 ​

Fixed

  • get --group ... --env ... bypasses the direct-project agent fast path and resolves the requested environment through the unlocked vault, preventing a value from the current project from being returned for a grouped lookup.

0.17.0 — 2026-07-11 ​

Security

  • The production MCP server now fails closed without an explicit access policy: project/status metadata remains available, while secret reads, writes, and command execution are denied.
  • MCP secret allowlists and per-session value-read limits are enforced.
  • CLI- and MCP-launched child processes no longer inherit TinyVault control credentials (TVAULT_PASSPHRASE, TVAULT_IDENTITY_KEY, or TVAULT_AGENT_TOKEN).

Maintenance

  • CI is pinned to Go 1.26.5 and Goldmark is upgraded to 1.7.17.

0.16.0 — 2026-07-07 ​

Added

  • Lock-free, value-free enumeration + a deterministic "vault locked" signal — lets a non-interactive agent enumerate and probe the vault without a passphrase and without ever seeing sensitive free text: tvault projects list --json --names-only and tvault list -p PROJECT --json --names-only work on a locked vault; tvault status --json adds locked and agent_running; and unlock-requiring commands run non-interactively fail fast with exit code 3 and {"error":"vault_locked","locked":true} under --json instead of prompting.

Changed

  • Homebrew distribution migrated from the retired formula to a cask, and raw versionless binaries are published for direct download.

0.15.0 — 2026-06-26 ​

Added

  • Environment groups in studio — env-name annotations (·production, ·preview) for grouped projects, g cycles between environments in a group, inherited (←) and pinned (◈) markers with inheritance-aware reveal/copy, D opens a key-set drift overlay across environments (no decryption needed), and G opens a groups list overlay. All read-only (work without --rw) and metadata-only (work when locked).

0.14.0 — 2026-06-25 ​

Added

  • Environment groups / profiles — link projects as named environments (production, preview, staging) of the same application. Pure metadata; each environment keeps its own DEK. See Environment groups.
    • tvault env group create/list/show/add/remove/delete for group membership.
    • tvault env diff — key-set (and optional value) drift across environments.
    • tvault env promote — copy a value between environments, versioned and audited (secret.promote).
    • tvault env inherit / pin / unpin / inherited — metadata-only read-time key inheritance from a base, with per-key pinning.
    • tvault env seal — pack every environment into one recipient-sealed v2 blob (decrypt in CI with decrypt-env --section <env>).
    • Group/environment resolution (--group/--env) on the get, run, and env commands.
    • 13 new MCP tools (vault_env_group_*, vault_env_diff, vault_env_promote, vault_env_inherit, vault_env_inherited, vault_env_pin, vault_env_unpin, vault_env_seal) — all metadata- or ciphertext-only. Tool count: 36 → 49. See MCP tools reference.

0.13.1 — 2026-06-25 ​

  • Changed: documentation housekeeping for the codemap integration — recorded the shipped integration-plan slices and the least-privilege required-keys seal scope; removed the superseded FEATURE.md in favor of SPEC.md.

0.13.0 — 2026-06-24 ​

Added

  • Codemap integration — a documented, metadata-first MCP surface for codemap (a local code-graph indexer): rotation blast radius, private-registry LSP creds, env-var audit, credential freshness, and least-privilege seal scope. Most results are metadata, paths, or ciphertext; the private-registry recipe deliberately injects selected credentials into the launched indexer process. See Codemap integration.

Fixed

  • Portable run-with-secrets shell tests (POSIX printenv per key, fixing macOS flakiness).

0.12.0 — 2026-06-21 ​

Added

  • tvault self-update (alias upgrade) — checksum-verified in-place binary update from the official GitHub releases. --check reports availability without installing; --version vX.Y.Z pins/downgrades. Replaces the removed install.sh. See CLI reference.
  • tvault run --only / --prefix — least-privilege secret injection: expose only the named or prefixed keys to the child process.
  • pulumi-config env export format plus a Pulumi/IaC guide.
  • Server install script and a DigitalOcean/SSH server-secrets guide.

Fixed

  • tvault mcp now coexists with the CLI: the server reopens the vault per request instead of holding bbolt's exclusive lock for its lifetime, so tvault set/get/run/import keep working while the MCP server runs.

0.11.1 — 2026-06-20 ​

  • Added: documentation site pages — "For AI Agents" (with llms.txt), Troubleshooting & FAQ, this Changelog page, and MCP Recipes; plus the repo's CHANGELOG.md through v0.11.0.
  • Fixed: agent-facing manifest drift and the homepage tool count.

0.11.0 — 2026-06-20 ​

Added

  • 15 new MCP tools (21 → 36), all metadata- or ciphertext-only. vault_get_secret remains the dedicated plaintext-read tool; separately, command execution can relay child-process output:
    • Navigation & discovery: vault_get_current_project, vault_set_current_project, vault_count_secrets, vault_search_projects, vault_projects_overview, vault_list_secrets_detailed, vault_list_secrets_global.
    • Sharing: vault_share_project, vault_unshare_project, vault_project_recipients.
    • .env: vault_diff_env, vault_sync_env, vault_export_env_encrypted.
    • Identities: vault_identity_new, vault_identity_list — public recipient only; the private key is never returned.
  • This documentation site (built with VitePress, deployed at tinyvault.dev).

Changed

  • The MCP command is now tvault mcp (was mcp-server, kept as an alias) and is no longer hidden.
  • Upgraded the MCP SDK to modelcontextprotocol/go-sdk v1.6.1.

CI/maintenance

  • GitHub Actions bumped to Node 24 runtimes; golangci-lint/govulncheck pinned; the Security Scan now fails on a called vulnerability.

See the new MCP Recipes for end-to-end agent workflows using these tools.

0.10.1 — 2026-06-15 ​

  • Fixed: studio --rw edit input sizing (placeholder/value render).

0.10.0 — 2026-06-15 ​

  • Changed: the browse command is now studio (browse/ui kept as aliases).
  • Added: broad end-to-end PTY test coverage for every CLI command and studio interaction.

0.9.0 — 2026-06-14 ​

  • Added: X25519 recipient layer + tvault identity; project sharing with key rotation on live-vault recipient removal (retained snapshots and artifacts remain readable); .env.encrypted v2 (commit-safe); tvault git-filter; tvault seal/open; per-context identity transport (TVAULT_IDENTITY_KEY); Kubernetes commit-safe SealedSecrets; versioned secrets + rollback; the local tvault agent + shell hooks; vault_seal_for_recipients; tvault diff; tvault doctor; studio --rw mode.

Earlier ​

See the GitHub releases for v0.8.0 and earlier.

Released under the MIT License.