Kuickr

LocalVault CLI Reference

Secrets

Command Description
localvault init [NAME] Create a new vault
localvault demo Create demo vaults with fake data for learning (passphrase: demo)
localvault set KEY --stdin Store a secret from stdin without argv/history exposure
localvault set KEY [VALUE] Store a secret; positional value is the compatibility path
localvault set --group GROUP KEY --stdin Store a grouped secret from stdin (-g)
localvault get KEY Retrieve a secret value
localvault list List all secret keys
localvault delete KEY Remove a secret or project group
localvault show Display secrets in a table (masked)
localvault show --reveal Show full values (-r)
localvault show --group Group flat keys by common prefix (STRIPE_KEY + STRIPE_SECRETSTRIPE); -g
localvault show -p PROJECT Filter to one project group
localvault env Print export KEY=value lines (interactive terminal only; see below)
localvault env -p PROJECT Export one project group
localvault exec -- CMD Run command with secrets in env
localvault import FILE Bulk-import from .env/.json/.yml
localvault rename OLD NEW Rename a key
localvault copy KEY --to VAULT Copy a secret to another vault

Plaintext output requires a terminal (v1.9.0)

get, env, and show --reveal print plaintext freely when stdout is an interactive terminal. When stdout is captured — a pipe, a command substitution, or an AI agent's shell — a human is asked to confirm on /dev/tty:

localvault get API_TOKEN            # terminal: prints
localvault get API_TOKEN | pbcopy   # pipe: "Print plaintext value of 'API_TOKEN'? [y/N]"

An agent's shell has no /dev/tty to answer on, so it is refused and pointed at process-scoped injection. There is no flag or environment variable to bypass the gate; scripts and CI use localvault exec instead:

localvault exec --map API_TOKEN=API_TOKEN -- your-command

Vault management

Command Description
localvault vaults List all vaults with secret counts
localvault switch [NAME] Switch default vault (or show current)
localvault unlock [NAME] Cache passphrase for the session and export LOCALVAULT_SESSION
localvault lock [NAME] Clear cached session (or all sessions)
localvault rekey [NAME] Change vault passphrase
localvault reset [NAME] Wipe and reinitialize a vault
localvault doctor Check install and PATH readiness, including brew/asdf shadowing

Login

Command Description
localvault login [TOKEN] Log in to InventList — auto-generates keypair + publishes public key
localvault login --status Show current login status
localvault logout Log out of InventList

Identity keys

The keys namespace manages your X25519 keypair. localvault login auto-generates and publishes for you, so you only need these commands when rotating, inspecting, or recovering your identity.

Command Description
localvault keys generate Generate an X25519 keypair (no-op if one already exists)
localvault keys generate --force Regenerate the keypair, overwriting the existing one
localvault keys publish Upload your public key to InventList
localvault keys show Print your base64-encoded public key
localvault keygen Legacy alias — same as keys generate (also supports --show and --force)

Cloud sync

Command Description
localvault sync Sync all vaults bidirectionally — pushes local changes, pulls remote changes, skips up-to-date, flags conflicts
localvault sync --dry-run Show what would happen without making any changes
localvault sync push [NAME] Push one vault to cloud
localvault sync pull [NAME] Pull one vault from cloud (auto-unlocks if you have a key slot)
localvault sync pull [NAME] --force Overwrite existing local vault
localvault sync status Show local/remote status for all vaults

localvault sync uses per-vault .sync_state files to track what was last synced. If a vault exists on both sides with no baseline yet but the secrets are byte-identical (e.g. it was pushed before sync tracking existed), it records a baseline automatically — action adopt, reason "in sync — recording baseline" — and moves no data. CONFLICT is reserved for genuinely diverged state: both sides changed since the last sync, or both exist with no baseline and the secrets differ. On a conflict it prints how to resolve (keep local or keep remote) and never silently overwrites either side. The summary line can include a N baselined count for adopted vaults.

Team sharing

The leading @ in a handle already signals a person operation, so add/remove/verify are top-level commands. The team namespace holds the vault-level operations (init, list, rotate).

Command Description
localvault dashboard Aggregate view: vaults you own (with members + scopes), vaults shared with you, and legacy direct-share counts
localvault verify @HANDLE Check if a person has a published public key (dry-run before adding)
localvault add @HANDLE Add a teammate to a synced team vault via key slot
localvault add @HANDLE --scope KEY... Add teammate with access to specific keys only
localvault remove @HANDLE Remove a person's access to a vault
localvault remove @HANDLE --scope KEY Remove specific scopes only (keeps other scopes)
localvault remove @HANDLE --rotate Full revocation + re-encrypt with new master key
localvault team init [VAULT] Convert a vault to a team vault (sets you as owner — required before add)
localvault team list [VAULT] Show who has access to a vault
localvault team rotate [VAULT] Re-key a team vault, keep all members

The aliases localvault team add @HANDLE, localvault team remove @HANDLE, and localvault team verify @HANDLE still work for backward compatibility but the top-level forms are preferred.

Legacy direct sharing (pre-v1.2)

These pre-v1.2 commands still work as a fallback when a vault isn't a team vault. For active team vaults, prefer add / remove above.

Command Description
localvault share VAULT --with @handle Share vault with an InventList user (one-shot copy)
localvault share VAULT --with team:HANDLE Share with a team
localvault share VAULT --with crew:SLUG Share with a crew
localvault receive Import vaults shared with you
localvault revoke SHARE_ID Revoke a direct share by ID

MCP (AI tool integration)

Command Description
localvault mcp Start MCP server (stdio)
localvault install-mcp Install MCP in Claude Code (default)
localvault install-mcp cursor Install in Cursor
localvault install-mcp windsurf Install in Windsurf
localvault guard install Install Claude Code hooks that block secrets in agent tool calls
localvault guard install --project Install into ./.claude/settings.json instead of ~/.claude
localvault guard status Show hook installation state per scope

Global options

Flag Description
--vault NAME / -v NAME Use a specific vault (overrides default)

Dot-notation for team vaults

When you have many projects in one vault, prefix keys with project.key:

printf '%s' "$PLATEPOSE_DATABASE_URL" | localvault set platepose.DATABASE_URL --stdin -v intellectaco
printf '%s' "$INVENTLIST_STRIPE_KEY" | localvault set inventlist.STRIPE_KEY --stdin -v intellectaco
printf '%s' "$PLATEPOSE_SECRET_KEY_BASE" | localvault set platepose.SECRET_KEY_BASE --stdin -v intellectaco

# Show one project only
localvault show -p platepose -v intellectaco

# Inject one project's secrets into a command
localvault exec -p platepose -v intellectaco -- rails server

When exporting or injecting a whole vault, nested keys become shell-safe env vars:

AWS_IAM.access_key_id
# → AWS_IAM__access_key_id

Use the env DSL to scope and rename injected values:

localvault env --only AWS_IAM.*
localvault exec --only AWS_IAM.*,AWS_SES.* --except AWS_SES.smtp_password -- your-script
localvault exec --profile aws -- aws sts get-caller-identity
localvault env --map AWS_IAM.access_key_id=AWS_ACCESS_KEY_ID

Selectors are exact keys (OPENAI_API_KEY) or one-level namespaces (AWS_IAM.*). The aws profile maps AWS_IAM.access_key_id, AWS_IAM.secret_access_key, and AWS_IAM.session_token to the canonical AWS environment names.

Prefer printf '%s' "$SECRET" | localvault set KEY --stdin for new writes. Positional values may be visible in process lists and shell history.

Dot-notation for vault name

Named vault as a positional argument (sync commands) vs global flag (secrets commands):

# Secrets commands use --vault / -v flag
localvault show -v production
printf '%s' "$SECRET" | localvault set KEY --stdin -v staging

# Sync commands use a positional argument
localvault sync push production
localvault sync pull staging

Environment variables

Variable Description
LOCALVAULT_HOME Override default ~/.localvault directory
LOCALVAULT_SESSION Session token from localvault unlock