CLI reference
Every holdmap command and flag, generated from the CLI's own --help and kept in sync with the current source.
This page is docs/cli.md from the repository, regenerated from --help and checked in CI against the current source. Development changes can differ from the latest downloadable release.
This page is the --help output of every command and nested subcommand in the current
source (package version 0.9.0). cargo test checks it against the code. Released downloads
may predate commands or options shown here; see the README for release availability.
Global options (accepted by every command): --color <auto|always|never> (env HOLDMAP_COLOR; NO_COLOR and CLICOLOR_FORCE are honoured too) and --no-docker.
| Command | What it does |
|---|---|
holdmap list (alias ls) |
List ports in use (listening sockets by default) |
holdmap inspect |
Show everything about a port: owner, process tree, project, plan |
holdmap explain (alias why) |
Explain in plain English why a port is busy and what to do |
holdmap stop |
Gracefully stop whatever holds a port (SIGTERM → SIGKILL), then verify it is free |
holdmap kill |
Like stop --force: kill immediately (SIGKILL / TerminateProcess) |
holdmap free-port |
Print a free TCP port |
holdmap wait |
Wait until a port is accepting connections (or free, with –free) |
holdmap run |
Free a port (safely) and run a command on it, with PORT set |
holdmap graph (alias mesh) |
Show which services talk to which (dependencies, clusters) as a tree, JSON, DOT or Mermaid |
holdmap agents |
Show AI coding agents and developer tools: folders, access, ports and connections |
holdmap activity |
Record and inspect opt-in local agent activity metadata |
holdmap activity serve |
Start an authenticated loopback recorder; metadata stays in memory until this exits |
holdmap activity snapshot |
Read metadata from the recorder named by HOLDMAP_ACTIVITY_ENDPOINT and TOKEN |
holdmap activity setup |
Print a reviewable exporter example; never edit agent configuration automatically |
holdmap activity hook |
Project one Codex/Claude hook from stdin to metadata and forward it locally |
holdmap analyzers |
Opt-in analyzers (SkillSpector, OSV lookup): see what one gets, approve, run, revoke |
holdmap analyzers list |
List analyzers and whether each is on (the default) |
holdmap analyzers show |
Show what an analyzer would get: folders or packages, command, network and environment |
holdmap analyzers approve |
Review an analyzer’s permissions and turn it on |
holdmap analyzers revoke |
Turn an analyzer off and delete its results |
holdmap analyzers key |
Store or delete an API key an analyzer declares, in the OS keychain |
holdmap analyzers key set |
Store a key: paste it when asked (not echoed), or pipe it on standard input |
holdmap analyzers key delete |
Delete a stored key |
holdmap analyzers add |
Register your own analyzer from a manifest file, a preset (–preset), or any MCP server with –mcp (from a command, a URL or one of your agents’ servers). It stays off until you approve it |
holdmap analyzers presets |
Ready-made manifests for well-known local analyzers; add one with add --preset ID |
holdmap analyzers servers |
Your agents’ configured MCP servers that can be added as analyzers |
holdmap analyzers tools |
An MCP analyzer’s tools: descriptions, warnings, suggested inputs and pin. Lists them from the server (after you confirm) the first time or with –refresh |
holdmap analyzers map |
Choose an MCP analyzer’s tools and map their inputs and output |
holdmap analyzers remove |
Remove an analyzer you registered, with its approval, results and stored keys |
holdmap analyzers catalog |
The signed analyzer catalog: show it, get a newer one, review the diff, accept or reject |
holdmap analyzers catalog status |
Which catalog is in use and whether an update waits for review (the default) |
holdmap analyzers catalog fetch |
Download the newest signed catalog from the holdmap repository and stage it for review |
holdmap analyzers catalog import |
Stage a catalog file (its signature is read from FILE.minisig) for review |
holdmap analyzers catalog accept |
Apply the staged update. Analyzers whose manifest changed ask for approval again |
holdmap analyzers catalog reject |
Discard the staged update |
holdmap analyzers auto |
Allow (on) or stop (off) automatic runs, when items change, for an approved analyzer that uses the network. Analyzers without network access run automatically once on |
holdmap analyzers run |
Run an approved analyzer now (or, with –changed, every approved one whose input changed) |
holdmap insights |
Findings from approved analyzers, as text, JSON or SARIF |
holdmap insights review |
Mark a finding reviewed; it stays hidden while it is unchanged |
holdmap insights snooze |
Hide a finding for some days |
holdmap insights reopen |
Show a reviewed or snoozed finding again |
holdmap needs |
What needs you: exposed agents, wide access, risky settings, unpinned MCP servers |
holdmap watch |
Stream port events: new listeners, closed listeners, conflicts |
holdmap pin |
Pin a port (favourite): shown first and watched even when free |
holdmap unpin |
Remove a pin |
holdmap pins |
List pinned ports and whether they are in use |
holdmap history |
Ports holdmap stopped recently, with the command that ran there |
holdmap restart |
Stop what holds a port and start the same command again (or re-run it from history) |
holdmap open |
Open http://localhost:PORT in the browser |
holdmap up |
Start a project’s services from its .holdmap.toml, dependencies first |
holdmap down |
Stop a project’s services (dependents first), through the usual safety checks |
holdmap status |
Show a project’s services: running, stopped or held by something else, with HTTP status |
holdmap init |
Print a shell hook that explains “port already in use” errors, or write a .holdmap.toml |
holdmap ssh |
Inspect another machine’s ports over SSH (read-only, nothing to install remotely) |
holdmap tui |
Open the interactive terminal UI |
holdmap mcp |
Run the MCP (Model Context Protocol) server on stdio for AI coding assistants |
holdmap completions |
Generate shell completions |
holdmap man |
Print the man page (roff), or write one page per command with –out-dir |
holdmap
holdmap shows every listening port with its owning process, project and framework, maps AI coding
agents and developer tools (Claude Code, Cursor, Docker Desktop…) to the folders and ports they
hold, explains in plain English why a port is busy (dev-server tree, Docker container,
systemd/pm2/brew service, OS feature, TIME_WAIT, another user) and stops the correct thing
gracefully, verifying the port is free afterwards.
Run without arguments in a terminal to open the interactive TUI (Tab cycles Ports → Graph → Agents;
c toggles MCP/skills in Agents).
Usage: holdmap [OPTIONS] [COMMAND]
Commands:
list List ports in use (listening sockets by default) [alias: ls]
inspect Show everything about a port: owner, process tree, project, plan
explain Explain in plain English why a port is busy and what to do [alias: why]
stop Gracefully stop whatever holds a port (SIGTERM → SIGKILL), then verify it is free
kill Like `stop --force`: kill immediately (SIGKILL / TerminateProcess)
free-port Print a free TCP port
wait Wait until a port is accepting connections (or free, with --free)
run Free a port (safely) and run a command on it, with PORT set
graph Show which services talk to which (dependencies, clusters) as a tree, JSON, DOT or
Mermaid [alias: mesh]
agents Show AI coding agents and developer tools: folders, access, ports and connections
activity Record and inspect opt-in local agent activity metadata
analyzers Opt-in analyzers (SkillSpector, OSV lookup): see what one gets, approve, run, revoke
insights Findings from approved analyzers, as text, JSON or SARIF
needs What needs you: exposed agents, wide access, risky settings, unpinned MCP servers
watch Stream port events: new listeners, closed listeners, conflicts
pin Pin a port (favourite): shown first and watched even when free
unpin Remove a pin
pins List pinned ports and whether they are in use
history Ports holdmap stopped recently, with the command that ran there
restart Stop what holds a port and start the same command again (or re-run it from history)
open Open http://localhost:PORT in the browser
up Start a project's services from its .holdmap.toml, dependencies first
down Stop a project's services (dependents first), through the usual safety checks
status Show a project's services: running, stopped or held by something else, with HTTP
status
init Print a shell hook that explains "port already in use" errors, or write a
.holdmap.toml
ssh Inspect another machine's ports over SSH (read-only, nothing to install remotely)
tui Open the interactive terminal UI
mcp Run the MCP (Model Context Protocol) server on stdio for AI coding assistants
completions Generate shell completions
man Print the man page (roff), or write one page per command with --out-dir
help Print this message or the help of the given subcommand(s)
Options:
--color <COLOR>
When to use colours
[env: HOLDMAP_COLOR=]
[default: auto]
[possible values: auto, always, never]
--no-docker
Don't query Docker/Podman/OrbStack/Colima
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
EXAMPLES:
holdmap Open the interactive TUI
holdmap list --dev Only dev servers
holdmap explain 3000 Why is 3000 busy?
holdmap stop 3000 Gracefully stop whatever holds 3000
holdmap stop 3000 --dry-run Show the plan only
holdmap run -p 3000 -- npm run dev
holdmap free-port --near 3000
holdmap wait 5432 --timeout 30s
holdmap graph Which services depend on which
holdmap agents Agents & tools: folders, access, ports
holdmap agents --stop-ports Stop the ports they started
holdmap stop --cluster shop Stop a whole stack, dependents first
holdmap up Start the services in .holdmap.toml
eval "$(holdmap init zsh)" Explain port-in-use errors in your shell
holdmap watch Stream new/closed/conflicting listeners
EXIT CODES: 0 ok · 1 busy/not found/timeout · 2 error · 3 blocked by safety policy · 4 needs
elevation
holdmap list
List ports in use (listening sockets by default)
Usage: holdmap list [OPTIONS] [QUERY]...
Arguments:
[QUERY]... Filter: words, `:3000`, `3000-3999`, `proto:udp`, `pid:123`, `user:me`
Options:
-a, --all Include non-listening sockets (ESTABLISHED, TIME_WAIT, …)
--tcp TCP only
--udp UDP only
-d, --dev Only likely development servers (frameworks, projects, databases, containers)
-m, --mine Only processes owned by you
-x, --exposed Only ports reachable from the network (bound to 0.0.0.0 / ::)
-r, --range <RANGE> Port range, e.g. 3000-3999
-s, --sort <SORT> Sort order [default: port] [possible values: port, pid, name, proto, memory,
uptime]
-w, --wide Show the full command and user columns
--http Ask each TCP listener for its HTTP status and page title (a short `GET /`)
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap inspect
Show everything about a port: owner, process tree, project, plan
Usage: holdmap inspect [OPTIONS] <PORT>
Arguments:
<PORT> Port number (e.g. 3000 or :3000)
Options:
--udp Only consider UDP
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap explain
Explain in plain English why a port is busy and what to do
Usage: holdmap explain [OPTIONS] <PORT>
Arguments:
<PORT> Port number (e.g. 3000 or :3000)
Options:
--udp Only consider UDP
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap stop
Gracefully stop whatever holds a port (SIGTERM → SIGKILL), then verify it is free
Usage: holdmap stop [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Ports, `pid:<n>` or process names. Bare numbers are ports
Options:
--all-dev Stop every dev server you own (what `holdmap list --dev --mine` shows)
--pid <PID> Stop a process by PID (repeatable)
--name <NAME> Stop processes by exact name (repeatable)
--cluster <CLUSTER> Stop every service in a cluster (see `holdmap graph`), dependents first
-f, --force Skip SIGTERM: SIGKILL / TerminateProcess immediately
-y, --yes Don't ask for confirmation
-n, --dry-run Show the plan but don't do anything
-t, --timeout <TIMEOUT> Grace period before escalating to SIGKILL [default: 5s]
--allow-protected Also allow stopping soft-protected processes and project `protect` ports
--no-tree Only stop the socket holder, not its dev-server tree
--udp Only consider UDP sockets for port targets
--json Machine-readable JSON output (implies no prompt; requires --yes unless
--dry-run)
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help (see more with '--help')
holdmap kill
Like `stop --force`: kill immediately (SIGKILL / TerminateProcess)
Usage: holdmap kill [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Ports, `pid:<n>` or process names. Bare numbers are ports
Options:
--all-dev Stop every dev server you own (what `holdmap list --dev --mine` shows)
--pid <PID> Stop a process by PID (repeatable)
--name <NAME> Stop processes by exact name (repeatable)
--cluster <CLUSTER> Stop every service in a cluster (see `holdmap graph`), dependents first
-f, --force Skip SIGTERM: SIGKILL / TerminateProcess immediately
-y, --yes Don't ask for confirmation
-n, --dry-run Show the plan but don't do anything
-t, --timeout <TIMEOUT> Grace period before escalating to SIGKILL [default: 5s]
--allow-protected Also allow stopping soft-protected processes and project `protect` ports
--no-tree Only stop the socket holder, not its dev-server tree
--udp Only consider UDP sockets for port targets
--json Machine-readable JSON output (implies no prompt; requires --yes unless
--dry-run)
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help (see more with '--help')
holdmap free-port
Print a free TCP port
Usage: holdmap free-port [OPTIONS]
Options:
--near <NEAR> Return the first free port at or after this one
--range <RANGE> Search within a range, e.g. 3000-3999
-c, --count <COUNT> How many ports to return [default: 1]
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap wait
Wait until a port is accepting connections (or free, with --free)
Usage: holdmap wait [OPTIONS] <PORT>
Arguments:
<PORT> Port number (e.g. 3000 or :3000)
Options:
-t, --timeout <TIMEOUT> Give up after this long (exit code 1) [default: 30s]
--free Wait until the port is free instead
--interval <INTERVAL> Polling interval [default: 200ms]
-q, --quiet Print nothing; just use the exit code
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap run
Free a port (safely) and run a command on it, with PORT set
Usage: holdmap run [OPTIONS] --port <PORT> -- <COMMAND>...
Arguments:
<COMMAND>... The command to run
Options:
-p, --port <PORT> Port the command needs
-y, --yes Stop the current owner without asking (still subject to the safety
policy)
-f, --force Kill the owner immediately instead of gracefully
--fallback If the port can't be freed safely, use the next free port instead
-t, --timeout <TIMEOUT> Grace period before escalating to SIGKILL [default: 5s]
--env <ENV> Name of the environment variable to set (default PORT) [default: PORT]
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap graph
Show which services talk to which (dependencies, clusters) as a tree, JSON, DOT or Mermaid
Usage: holdmap graph [OPTIONS]
Options:
-a, --all Include everything (system services, apps), not just dev services and
their peers
-c, --cluster <CLUSTER> Only show one cluster (id or name)
--no-external Hide the collapsed "external hosts" node
-f, --format <FORMAT> Output format [default: tree] [possible values: tree, json, dot, mermaid]
--json Shorthand for --format json
--dot Shorthand for --format dot (Graphviz)
--mermaid Shorthand for --format mermaid
--ascii ASCII-only tree (no box-drawing characters)
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap agents
Show AI coding agents and developer tools: folders, access, ports and connections
Usage: holdmap agents [OPTIONS] [AGENT]
Arguments:
[AGENT] Only agents matching a product, name, vendor, folder, tool name, or exact agent/child PID
Options:
-w, --wide Show full agent details, including processes and redacted command lines
--capabilities Opt-in inventory: MCP servers, skills, built-in tools, permission rules and
instruction files. Env/header names only, never values; never runs or
connects to MCP servers
--flow Show observed process, listener and TCP relationships; no call or payload
inference
--stop-ports Stop the unprotected ports each matching agent started (dev servers and
services)
--dry-run Show the stop plan only; don't send any signal
--yes Don't ask for confirmation before stopping
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap activity
Record and inspect opt-in local agent activity metadata
Usage: holdmap activity [OPTIONS] <COMMAND>
Commands:
serve Start an authenticated loopback recorder; metadata stays in memory until this exits
snapshot Read metadata from the recorder named by HOLDMAP_ACTIVITY_ENDPOINT and TOKEN
setup Print a reviewable exporter example; never edit agent configuration automatically
hook Project one Codex/Claude hook from stdin to metadata and forward it locally
help Print this message or the help of the given subcommand(s)
Options:
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap activity serve
Start an authenticated loopback recorder; metadata stays in memory until this exits
Usage: holdmap activity serve [OPTIONS]
Options:
--json Print endpoint and secret token as JSON for explicit integration setup
--duration <DURATION> Stop automatically after this duration (1 second to 24 hours)
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap activity snapshot
Read metadata from the recorder named by HOLDMAP_ACTIVITY_ENDPOINT and TOKEN
Usage: holdmap activity snapshot [OPTIONS]
Options:
--json Machine-readable normalized metadata
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap activity setup
Print a reviewable exporter example; never edit agent configuration automatically
Usage: holdmap activity setup [OPTIONS] --provider <PROVIDER>
Options:
--provider <PROVIDER> [possible values: codex, claude]
--windows Generate PowerShell environment assignments instead of shell exports
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap activity hook
Project one Codex/Claude hook from stdin to metadata and forward it locally
Usage: holdmap activity hook [OPTIONS] --provider <PROVIDER>
Options:
--provider <PROVIDER> [possible values: codex, claude]
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers
Opt-in analyzers (SkillSpector, OSV lookup): see what one gets, approve, run, revoke
Usage: holdmap analyzers [OPTIONS] [COMMAND]
Commands:
list List analyzers and whether each is on (the default)
show Show what an analyzer would get: folders or packages, command, network and environment
approve Review an analyzer's permissions and turn it on
revoke Turn an analyzer off and delete its results
key Store or delete an API key an analyzer declares, in the OS keychain
add Register your own analyzer from a manifest file, a preset (--preset), or any MCP server
with --mcp (from a command, a URL or one of your agents' servers). It stays off until you
approve it
presets Ready-made manifests for well-known local analyzers; add one with `add --preset ID`
servers Your agents' configured MCP servers that can be added as analyzers
tools An MCP analyzer's tools: descriptions, warnings, suggested inputs and pin. Lists them
from the server (after you confirm) the first time or with --refresh
map Choose an MCP analyzer's tools and map their inputs and output
remove Remove an analyzer you registered, with its approval, results and stored keys
catalog The signed analyzer catalog: show it, get a newer one, review the diff, accept or reject
auto Allow (on) or stop (off) automatic runs, when items change, for an approved analyzer that
uses the network. Analyzers without network access run automatically once on
run Run an approved analyzer now (or, with --changed, every approved one whose input changed)
help Print this message or the help of the given subcommand(s)
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers list
List analyzers and whether each is on (the default)
Usage: holdmap analyzers list [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers show
Show what an analyzer would get: folders or packages, command, network and environment
Usage: holdmap analyzers show [OPTIONS] <ID>
Arguments:
<ID>
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers approve
Review an analyzer's permissions and turn it on
Usage: holdmap analyzers approve [OPTIONS] <ID>
Arguments:
<ID>
Options:
--yes Don't ask; approve what `holdmap analyzers show ID` prints
--allow-remote Allow an MCP analyzer on another machine (it gets metadata only)
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers revoke
Turn an analyzer off and delete its results
Usage: holdmap analyzers revoke [OPTIONS] <ID>
Arguments:
<ID>
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers key
Store or delete an API key an analyzer declares, in the OS keychain
Usage: holdmap analyzers key [OPTIONS] <COMMAND>
Commands:
set Store a key: paste it when asked (not echoed), or pipe it on standard input
delete Delete a stored key
help Print this message or the help of the given subcommand(s)
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers key set
Store a key: paste it when asked (not echoed), or pipe it on standard input
Usage: holdmap analyzers key set [OPTIONS] <ID> <NAME>
Arguments:
<ID>
<NAME>
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers key delete
Delete a stored key
Usage: holdmap analyzers key delete [OPTIONS] <ID> <NAME>
Arguments:
<ID>
<NAME>
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers add
Register your own analyzer from a manifest file, a preset (--preset), or any MCP server with --mcp
(from a command, a URL or one of your agents' servers). It stays off until you approve it
Usage: holdmap analyzers add [OPTIONS] [FILE]
Arguments:
[FILE]
Options:
--preset <PRESET> A ready-made manifest for a well-known local analyzer (see `holdmap
analyzers presets`)
--mcp Register an MCP server (with --command, --url or --from) instead of a
manifest file
--id <ID> Id for it, e.g. local.my-scanner
--name <NAME> Display name
--command <COMMAND> Program that starts a stdio MCP server (holdmap starts it, sandboxed,
only for runs)
--arg <ARGS> An argument for --command (repeat for several)
--url <URL> A Streamable HTTP endpoint. Servers on another machine need
--allow-remote when you approve and only get metadata (names, file names,
agents)
--from <FROM> One of your agents' configured servers, as listed by `holdmap analyzers
servers`
--secret <SECRETS> An API key name the server may get from your keychain (repeat for
several)
--auth <AUTH> The key sent as a bearer token to an HTTP server
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers presets
Ready-made manifests for well-known local analyzers; add one with `add --preset ID`
Usage: holdmap analyzers presets [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers servers
Your agents' configured MCP servers that can be added as analyzers
Usage: holdmap analyzers servers [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers tools
An MCP analyzer's tools: descriptions, warnings, suggested inputs and pin. Lists them from the
server (after you confirm) the first time or with --refresh
Usage: holdmap analyzers tools [OPTIONS] <ID>
Arguments:
<ID>
Options:
--refresh Ask the server again
--yes Don't ask before starting or contacting the server
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers map
Choose an MCP analyzer's tools and map their inputs and output
Usage: holdmap analyzers map [OPTIONS] <ID>
Arguments:
<ID>
Options:
--tool <TOOLS> A tool to call (repeat to choose several, in call order)
--arg <ARGS> An input for the single --tool: NAME=VALUE. VALUE is a placeholder such
as {subject.dir}, plain text, or JSON (numbers, true/false, lists)
--auto Use holdmap's suggested inputs for each --tool (without --tool: every
tool it can fill in completely that has no warnings and isn't marked
destructive)
--remove Remove the --tool(s) instead
--items <ITEMS> Where findings sit in JSON output, e.g. $.issues[*] (needs --rule-id)
--rule-id <RULE_ID> Rule id field inside one item
--severity <SEVERITY> Severity field
--title <TITLE> Title field
--file <FILE> File field
--line <LINE> Line field
--auto-output Use the output mapping suggested from a tool's output schema
--clear-output Forget the output mapping (SARIF and holdmap JSON are still recognised;
anything else becomes a short excerpt)
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers remove
Remove an analyzer you registered, with its approval, results and stored keys
Usage: holdmap analyzers remove [OPTIONS] <ID>
Arguments:
<ID>
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers catalog
The signed analyzer catalog: show it, get a newer one, review the diff, accept or reject
Usage: holdmap analyzers catalog [OPTIONS] [COMMAND]
Commands:
status Which catalog is in use and whether an update waits for review (the default)
fetch Download the newest signed catalog from the holdmap repository and stage it for review
import Stage a catalog file (its signature is read from FILE.minisig) for review
accept Apply the staged update. Analyzers whose manifest changed ask for approval again
reject Discard the staged update
help Print this message or the help of the given subcommand(s)
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers catalog status
Which catalog is in use and whether an update waits for review (the default)
Usage: holdmap analyzers catalog status [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers catalog fetch
Download the newest signed catalog from the holdmap repository and stage it for review
Usage: holdmap analyzers catalog fetch [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers catalog import
Stage a catalog file (its signature is read from FILE.minisig) for review
Usage: holdmap analyzers catalog import [OPTIONS] <FILE>
Arguments:
<FILE>
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers catalog accept
Apply the staged update. Analyzers whose manifest changed ask for approval again
Usage: holdmap analyzers catalog accept [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers catalog reject
Discard the staged update
Usage: holdmap analyzers catalog reject [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers auto
Allow (on) or stop (off) automatic runs, when items change, for an approved analyzer that uses the
network. Analyzers without network access run automatically once on
Usage: holdmap analyzers auto [OPTIONS] <ID> <SETTING>
Arguments:
<ID>
<SETTING> [possible values: on, off]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap analyzers run
Run an approved analyzer now (or, with --changed, every approved one whose input changed)
Usage: holdmap analyzers run [OPTIONS] [ID]
Arguments:
[ID]
Options:
--changed
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap insights
Findings from approved analyzers, as text, JSON or SARIF
Usage: holdmap insights [OPTIONS] [COMMAND]
Commands:
review Mark a finding reviewed; it stays hidden while it is unchanged
snooze Hide a finding for some days
reopen Show a reviewed or snoozed finding again
help Print this message or the help of the given subcommand(s)
Options:
--format <FORMAT> Output format [default: text] [possible values: text, json, sarif]
--json Shorthand for --format json
--min <MIN> Only findings at or above this severity [default: info] [possible values:
info, low, medium, high, critical]
--all Include reviewed and snoozed findings
--fail-on <FAIL_ON> Exit with status 1 when an open finding at or above this severity exists
[possible values: info, low, medium, high, critical]
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap insights review
Mark a finding reviewed; it stays hidden while it is unchanged
Usage: holdmap insights review [OPTIONS] <FINGERPRINT>
Arguments:
<FINGERPRINT>
Options:
--format <FORMAT> Output format [default: text] [possible values: text, json, sarif]
--json Shorthand for --format json
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap insights snooze
Hide a finding for some days
Usage: holdmap insights snooze [OPTIONS] <FINGERPRINT>
Arguments:
<FINGERPRINT>
Options:
--days <DAYS> [default: 7]
--format <FORMAT> Output format [default: text] [possible values: text, json, sarif]
--json Shorthand for --format json
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap insights reopen
Show a reviewed or snoozed finding again
Usage: holdmap insights reopen [OPTIONS] <FINGERPRINT>
Arguments:
<FINGERPRINT>
Options:
--format <FORMAT> Output format [default: text] [possible values: text, json, sarif]
--json Shorthand for --format json
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap needs
What needs you: exposed agents, wide access, risky settings, unpinned MCP servers
Usage: holdmap needs [OPTIONS]
Options:
--json Machine-readable JSON output
--fail Exit with status 1 when any item is listed
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap watch
Stream port events: new listeners, closed listeners, conflicts
Usage: holdmap watch [OPTIONS]
Options:
-a, --all Report every listener, not only dev servers and pinned ports
-i, --interval <INTERVAL> Polling interval [default: 1s]
--json One JSON object per event (NDJSON)
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap pin
Pin a port (favourite): shown first and watched even when free
Usage: holdmap pin [OPTIONS] <PORT>
Arguments:
<PORT> Port number (e.g. 3000 or :3000)
Options:
-l, --label <LABEL> A note shown next to the port
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap unpin
Remove a pin
Usage: holdmap unpin [OPTIONS] <PORT>
Arguments:
<PORT> Port number (e.g. 3000 or :3000)
Options:
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap pins
List pinned ports and whether they are in use
Usage: holdmap pins [OPTIONS]
Options:
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap history
Ports holdmap stopped recently, with the command that ran there
Usage: holdmap history [OPTIONS]
Options:
-n, --limit <LIMIT> How many entries to show [default: 20]
--clear Forget the history
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap restart
Stop what holds a port and start the same command again (or re-run it from history)
Usage: holdmap restart [OPTIONS] <PORT>
Arguments:
<PORT> TCP port number (e.g. 3000 or :3000)
Options:
-y, --yes Don't ask before stopping the current owner
-t, --timeout <TIMEOUT> How long to wait for the port to accept connections again [default: 30s]
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap open
Open http://localhost:PORT in the browser
Usage: holdmap open [OPTIONS] <PORT>
Arguments:
<PORT> Port number (e.g. 3000 or :3000)
Options:
--print Print the URL instead of opening it
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap up
Start a project's services from its .holdmap.toml, dependencies first
Usage: holdmap up [OPTIONS] [SERVICES]...
Arguments:
[SERVICES]... Services to start (default: all). Their dependencies are started too
Options:
--file <PATH> Use this project file instead of the nearest `.holdmap.toml`
--replace If a port is held by something outside the project, stop it (after
confirmation)
-y, --yes Don't ask before stopping a conflicting owner (with --replace)
-n, --dry-run Show what would be started without starting anything
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap down
Stop a project's services (dependents first), through the usual safety checks
Usage: holdmap down [OPTIONS] [SERVICES]...
Arguments:
[SERVICES]... Services to stop (default: all). Services that depend on them are stopped first
Options:
--file <PATH> Use this project file instead of the nearest `.holdmap.toml`
-a, --all Also stop services without a `command` (for example a database container
of this project)
-y, --yes Don't ask for confirmation
-n, --dry-run Show the plan but don't do anything
-f, --force Skip SIGTERM: SIGKILL / TerminateProcess immediately
-t, --timeout <TIMEOUT> Grace period before escalating to SIGKILL [default: 5s]
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible
values: auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap status
Show a project's services: running, stopped or held by something else, with HTTP status
Usage: holdmap status [OPTIONS]
Options:
--file <PATH> Use this project file instead of the nearest `.holdmap.toml`
--no-http Don't send HTTP requests to the services
--json Machine-readable JSON output
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap init
Print a shell hook that explains "port already in use" errors, or write a .holdmap.toml
Usage: holdmap init [OPTIONS] [SHELL]
Arguments:
[SHELL] Print the integration script for this shell. Without a shell, write a starter
.holdmap.toml from the dev servers running under the current directory [possible values:
zsh, bash, fish, powershell]
Options:
--force Overwrite an existing .holdmap.toml
--print Print the project file instead of writing it
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap ssh
Inspect another machine's ports over SSH (read-only, nothing to install remotely)
Usage: holdmap ssh [OPTIONS] <HOST> [COMMAND]...
Arguments:
<HOST> `[user@]host` (anything `ssh` accepts, including ~/.ssh/config aliases)
[COMMAND]... What to show: `list` (default), `graph`, or any holdmap command line after `--` to
run a remotely installed holdmap
Options:
--json JSON output
--agentless Never use a remote holdmap; always read ss/ps
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap tui
Open the interactive terminal UI
Usage: holdmap tui [OPTIONS]
Options:
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap mcp
Run the MCP (Model Context Protocol) server on stdio for AI coding assistants
Usage: holdmap mcp [OPTIONS]
Options:
--record-activity Send tool-call metadata to the explicitly configured local activity
recorder
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap completions
Generate shell completions
Usage: holdmap completions [OPTIONS] <SHELL>
Arguments:
<SHELL> Shell to generate completions for [possible values: bash, elvish, fish, powershell, zsh]
Options:
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help
holdmap man
Print the man page (roff), or write one page per command with --out-dir
Usage: holdmap man [OPTIONS]
Options:
--out-dir <DIR> Write `holdmap.1` and `holdmap-<command>.1` into this directory instead of
printing
--color <COLOR> When to use colours [env: HOLDMAP_COLOR=] [default: auto] [possible values:
auto, always, never]
--no-docker Don't query Docker/Podman/OrbStack/Colima
-h, --help Print help