CLI reference
This document contains the help content for the murk command-line program.
Command Overview:
murk↴murk init↴murk env↴murk restore↴murk recover↴murk add↴murk generate↴murk rotate↴murk rm↴murk get↴murk edit↴murk ls↴murk export↴murk import↴murk describe↴murk info↴murk skeleton↴murk exec↴murk agent↴murk agent plan↴murk agent exec↴murk agent grant↴murk agent init↴murk agent ls↴murk agent revoke↴murk mcp↴murk policy↴murk policy show↴murk policy set↴murk policy clear↴murk circle↴murk circle authorize↴murk circle revoke↴murk group↴murk group create↴murk group ls↴murk group add↴murk group rm↴murk verify↴murk doctor↴murk scan↴murk diff↴murk setup-merge-driver↴murk completion↴murk completion generate↴murk completion install↴
Encrypted secrets manager for developers — one file, age encryption, git-friendly
Usage: murk <COMMAND>
Subcommands:
Section titled “Subcommands:”init— Initialize a new vault and generate a keypairenv— Write a .envrc for direnv integrationrestore— Restore MURK_KEY from a BIP39 recovery phraserecover— Re-derive recovery phrase from current MURK_KEYadd— Add or update a secretgenerate— Generate a random secret and store itrotate— Rotate secrets with new valuesrm— Remove a secretget— Get a single decrypted valueedit— Edit secrets in $EDITORls— List all key namesexport— Export all secrets as shell export statementsimport— Import secrets from a .env filedescribe— Add or update a key descriptioninfo— Show public schema and key infoskeleton— Export schema-only vault with no secrets or recipientsexec— Run a command with secrets injected as environment variablesagent— Agent-oriented commands (schema-only output for AI agent prompts)mcp— Run an MCP (Model Context Protocol) stdio server for AI agentspolicy— Manage the agent access policycircle— Manage recipientsgroup— Manage recipient groupsverify— Verify vault integrity without exporting secretsdoctor— Check the surrounding repo for hygiene issuesscan— Scan files for leaked secret valuesdiff— Show secret changes vs a git refsetup-merge-driver— Configure git to use murk’s merge driver for .murk filescompletion— Generate or install shell completions
murk init
Section titled “murk init”Initialize a new vault and generate a keypair
Usage: murk init [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk env
Section titled “murk env”Write a .envrc for direnv integration
Usage: murk env [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk restore
Section titled “murk restore”Restore MURK_KEY from a BIP39 recovery phrase
Usage: murk restore [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filename, for the restored-identity recipient checkDefault value:
.murk
murk recover
Section titled “murk recover”Re-derive recovery phrase from current MURK_KEY
Usage: murk recover
murk add
Section titled “murk add”Add or update a secret
Usage: murk add [OPTIONS] <KEY>
Arguments:
Section titled “Arguments:”<KEY>— Secret key name
Options:
Section titled “Options:”-
--desc <DESC>— Description for this key -
--group <GROUP>— Who can read it: a group name,everyone(default), orme -
--tag <TAG>— Tag for grouping (repeatable) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk generate
Section titled “murk generate”Generate a random secret and store it
Usage: murk generate [OPTIONS] <KEY>
Arguments:
Section titled “Arguments:”<KEY>— Secret key name
Options:
Section titled “Options:”-
--length <LENGTH>— Length in bytes (default 32)Default value:
32 -
--hex— Output as hex instead of base64 -
--desc <DESC>— Description for this key -
--group <GROUP>— Who can read it: a group name,everyone(default), orme -
--tag <TAG>— Tag for grouping (repeatable) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk rotate
Section titled “murk rotate”Rotate secrets with new values
Usage: murk rotate [OPTIONS] [KEY]
Arguments:
Section titled “Arguments:”<KEY>— Secret key name (omit for –all)
Options:
Section titled “Options:”-
--all— Rotate all secrets in the vault -
--generate— Generate random values instead of prompting -
--length <LENGTH>— Length in bytes for generated values (default 32)Default value:
32 -
--hex— Output generated values as hex instead of base64 -
--list— List keys needing rotation instead of rotating (exits 1 if any) -
--json— Output the listing as JSON (with –list; always exits 0) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk rm
Section titled “murk rm”Remove a secret
Usage: murk rm [OPTIONS] <KEY>
Arguments:
Section titled “Arguments:”<KEY>— Secret key name
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk get
Section titled “murk get”Get a single decrypted value
Usage: murk get [OPTIONS] <KEY>
Arguments:
Section titled “Arguments:”<KEY>— Secret key name
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk edit
Section titled “murk edit”Edit secrets in $EDITOR
Usage: murk edit [OPTIONS] [KEY]
Arguments:
Section titled “Arguments:”<KEY>— Edit a single key (omit to edit all)
Options:
Section titled “Options:”-
--scoped— Edit scoped overrides instead of shared secrets -
--group <GROUP>— Edit values for this group instead of shared secrets -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk ls
Section titled “murk ls”List all key names
Usage: murk ls [OPTIONS]
Options:
Section titled “Options:”-
--tag <TAG>— Filter by tag (repeatable) -
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk export
Section titled “murk export”Export all secrets as shell export statements
Usage: murk export [OPTIONS]
Options:
Section titled “Options:”-
--tag <TAG>— Filter by tag (repeatable) -
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk import
Section titled “murk import”Import secrets from a .env file
Usage: murk import [OPTIONS] [FILE]
Arguments:
Section titled “Arguments:”-
<FILE>— Path to the .env file to importDefault value:
.env
Options:
Section titled “Options:”-
--force— Overwrite existing secrets without prompting -
--group <GROUP>— Assign imported secrets to this group (default: everyone) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk describe
Section titled “murk describe”Add or update a key description
Usage: murk describe [OPTIONS] <KEY> <DESCRIPTION>
Arguments:
Section titled “Arguments:”<KEY>— Secret key name<DESCRIPTION>— Description text
Options:
Section titled “Options:”-
--example <EXAMPLE>— Example value -
--tag <TAG>— Tag for grouping (repeatable, replaces existing tags) -
--rotate-every <DAYS>— Rotation interval, e.g.90dor90(days);neverclears it -
--expires <DATE>— Hard expiry date, e.g.2026-09-01;neverclears it -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk info
Section titled “murk info”Show public schema and key info
Usage: murk info [OPTIONS]
Options:
Section titled “Options:”-
--tag <TAG>— Filter by tag (repeatable) -
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk skeleton
Section titled “murk skeleton”Export schema-only vault with no secrets or recipients
Usage: murk skeleton [OPTIONS]
Options:
Section titled “Options:”-
-o,--output <OUTPUT>— Output file (prints to stdout if omitted) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk exec
Section titled “murk exec”Run a command with secrets injected as environment variables
Usage: murk exec [OPTIONS] <COMMAND>...
Arguments:
Section titled “Arguments:”<COMMAND>— Command and arguments to execute
Options:
Section titled “Options:”-
--only <ONLY>— Only inject these specific keys (repeatable) -
--tag <TAG>— Filter by tag (repeatable) -
--clean-env— Strip inherited environment (only murk secrets + PATH) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk agent
Section titled “murk agent”Agent-oriented commands (schema-only output for AI agent prompts)
Usage: murk agent <COMMAND>
Subcommands:
Section titled “Subcommands:”plan— Emit schema-only context safe to paste into an AI agent promptexec— Run a command with strict agent-safe defaults (clears the inherited environment, strips MURK_KEY, requires –only)grant— Mint a short-lived ephemeral key that can read only the named secretsinit— One-shot onboarding: optionally set the agent allow-list, mint a scoped grant, and print how to run the agent safelyls— List active agent grants and their TTLsrevoke— Revoke an agent grant and rotate the keys it could read
murk agent plan
Section titled “murk agent plan”Emit schema-only context safe to paste into an AI agent prompt
Usage: murk agent plan [OPTIONS]
Options:
Section titled “Options:”-
--tag <TAG>— Filter by tag (repeatable) -
--json— Output as JSON -
-o,--output <OUTPUT>— Output file (prints to stdout if omitted) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk agent exec
Section titled “murk agent exec”Run a command with strict agent-safe defaults (clears the inherited environment, strips MURK_KEY, requires –only)
Usage: murk agent exec [OPTIONS] --only <ONLY> <COMMAND>...
Arguments:
Section titled “Arguments:”<COMMAND>— Command and arguments to execute
Options:
Section titled “Options:”-
--only <ONLY>— Inject these specific keys (required — agent mode fails closed) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk agent grant
Section titled “murk agent grant”Mint a short-lived ephemeral key that can read only the named secrets
Usage: murk agent grant [OPTIONS] --name <NAME> --only <ONLY>
Options:
Section titled “Options:”-
--name <NAME>— Grant name (used to revoke it later) -
--only <ONLY>— Keys this grant can read (required — fails closed) -
--ttl <TTL>— Time to live, e.g. 30m, 2h, 7d (advisory — seeagent revoke)Default value:
2h -
--out <OUT>— Where to write the agent key: a path, or-for stdout -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk agent init
Section titled “murk agent init”One-shot onboarding: optionally set the agent allow-list, mint a scoped grant, and print how to run the agent safely
Usage: murk agent init [OPTIONS] --name <NAME> --only <ONLY>
Options:
Section titled “Options:”-
--name <NAME>— Grant name (used to revoke it later) -
--only <ONLY>— Keys the agent can read (required — fails closed) -
--allow-tag <ALLOW_TAG>— Set the agent allow-list to these tags before granting (repeatable) -
--ttl <TTL>— Time to live, e.g. 30m, 2h, 7d (advisory — seeagent revoke)Default value:
2h -
--out <OUT>— Where to write the agent key: a path, or-for stdout -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk agent ls
Section titled “murk agent ls”List active agent grants and their TTLs
Usage: murk agent ls [OPTIONS]
Options:
Section titled “Options:”-
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk agent revoke
Section titled “murk agent revoke”Revoke an agent grant and rotate the keys it could read
Usage: murk agent revoke [OPTIONS] <NAME>
Arguments:
Section titled “Arguments:”<NAME>— Grant name
Options:
Section titled “Options:”-
--rotate— Rotate the keys it could read in the same session -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk mcp
Section titled “murk mcp”Run an MCP (Model Context Protocol) stdio server for AI agents
Usage: murk mcp [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk -
--allow-exec— Enable the murk_exec tool (run commands with scoped secrets injected). Off by default: it runs arbitrary commands as this user — the injected secrets are grant-scoped, but the command itself is not sandboxed
murk policy
Section titled “murk policy”Manage the agent access policy
Usage: murk policy <COMMAND>
Subcommands:
Section titled “Subcommands:”show— Show the agent access policy (works without a key)set— Set the agent allow-list: agents may only receive secrets carrying one of these tagsclear— Remove the policy — agent mode becomes unrestricted again
murk policy show
Section titled “murk policy show”Show the agent access policy (works without a key)
Usage: murk policy show [OPTIONS]
Options:
Section titled “Options:”-
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk policy set
Section titled “murk policy set”Set the agent allow-list: agents may only receive secrets carrying one of these tags
Usage: murk policy set [OPTIONS] --allow-tag <ALLOW_TAG>
Options:
Section titled “Options:”-
--allow-tag <ALLOW_TAG>— Tag agents are allowed to receive (repeatable, required) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk policy clear
Section titled “murk policy clear”Remove the policy — agent mode becomes unrestricted again
Usage: murk policy clear [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk circle
Section titled “murk circle”Manage recipients
Usage: murk circle [OPTIONS] [COMMAND]
Subcommands:
Section titled “Subcommands:”authorize— Add a recipient to the vaultrevoke— Remove a recipient from the vault
Options:
Section titled “Options:”-
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk circle authorize
Section titled “murk circle authorize”Add a recipient to the vault
Usage: murk circle authorize [OPTIONS] <PUBKEY>
Arguments:
Section titled “Arguments:”<PUBKEY>— Public key (age1…), ssh:path, ssh: (default ~/.ssh/id_ed25519.pub), or github:username
Options:
Section titled “Options:”-
--name <NAME>— Display name for this recipient -
--group <GROUP>— Also add the new recipient to this group -
--force— Accept changed GitHub keys without confirmation -
--allow-ssh-rsa— Allow ssh-rsa recipients (rejected by default — use ed25519) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk circle revoke
Section titled “murk circle revoke”Remove a recipient from the vault
Usage: murk circle revoke [OPTIONS] <RECIPIENT>
Arguments:
Section titled “Arguments:”<RECIPIENT>— Recipient pubkey or display name
Options:
Section titled “Options:”-
--rotate— Rotate the secrets they had access to in the same session -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk group
Section titled “murk group”Manage recipient groups
Usage: murk group <COMMAND>
Subcommands:
Section titled “Subcommands:”create— Create a new recipient group (you become its first member)ls— List groups and their membersadd— Add a member to a grouprm— Remove a member from a group, or delete the group entirely
murk group create
Section titled “murk group create”Create a new recipient group (you become its first member)
Usage: murk group create [OPTIONS] <NAME>
Arguments:
Section titled “Arguments:”<NAME>— Group name
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk group ls
Section titled “murk group ls”List groups and their members
Usage: murk group ls [OPTIONS]
Options:
Section titled “Options:”-
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk group add
Section titled “murk group add”Add a member to a group
Usage: murk group add [OPTIONS] --member <MEMBER> <NAME>
Arguments:
Section titled “Arguments:”<NAME>— Group name
Options:
Section titled “Options:”-
--member <MEMBER>— Recipient pubkey or display name to add -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk group rm
Section titled “murk group rm”Remove a member from a group, or delete the group entirely
Usage: murk group rm [OPTIONS] <NAME>
Arguments:
Section titled “Arguments:”<NAME>— Group name
Options:
Section titled “Options:”-
--member <MEMBER>— Recipient pubkey or display name to remove (omit to delete the group) -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk verify
Section titled “murk verify”Verify vault integrity without exporting secrets
Usage: murk verify [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk doctor
Section titled “murk doctor”Check the surrounding repo for hygiene issues
Usage: murk doctor [OPTIONS]
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk scan
Section titled “murk scan”Scan files for leaked secret values
Usage: murk scan [OPTIONS] [PATHS]...
Arguments:
Section titled “Arguments:”<PATHS>— Files or directories to scan (defaults to current directory)
Options:
Section titled “Options:”-
--vault <VAULT>— Vault filenameDefault value:
.murk
murk diff
Section titled “murk diff”Show secret changes vs a git ref
Usage: murk diff [OPTIONS] [GIT_REF]
Arguments:
Section titled “Arguments:”-
<GIT_REF>— Git ref to compare againstDefault value:
HEAD
Options:
Section titled “Options:”-
--show-values— Show actual values (not just key names) -
--json— Output as JSON -
--vault <VAULT>— Vault filenameDefault value:
.murk
murk setup-merge-driver
Section titled “murk setup-merge-driver”Configure git to use murk’s merge driver for .murk files
Usage: murk setup-merge-driver
murk completion
Section titled “murk completion”Generate or install shell completions
Usage: murk completion <COMMAND>
Subcommands:
Section titled “Subcommands:”generate— Print completions to stdoutinstall— Install completions to the standard path
murk completion generate
Section titled “murk completion generate”Print completions to stdout
Usage: murk completion generate <SHELL>
Arguments:
Section titled “Arguments:”-
<SHELL>— Shell to generate completions forPossible values:
bash,elvish,fish,powershell,zsh
murk completion install
Section titled “murk completion install”Install completions to the standard path
Usage: murk completion install <SHELL>
Arguments:
Section titled “Arguments:”-
<SHELL>— Shell to install completions forPossible values:
bash,elvish,fish,powershell,zsh