Dry-run mode only affects
ssh_exec. All other tools (fetch_external, gist_kb, browser, etc.) continue to execute normally when dry-run is enabled.How it works
When dry-run is enabled,ssh_exec still evaluates all safety checks — the blocklist and directory allowlist run as normal. If the command passes those checks, instead of opening an SSH connection, the tool returns a response describing what it would have run:
blocked: true response regardless:
Enabling dry-run
DRY_RUN=true (the exact string "true") in your .env file, or set dry_run: true in reacher.config.yaml. Restart the server for the change to take effect.
To disable, set DRY_RUN=false or remove the variable. The default is false.
Environment variables take precedence over YAML values. If
DRY_RUN=true is set in your environment, dry_run: false in the YAML file has no effect.Use cases
Validating your setup Before granting Claude live SSH access, enable dry-run to confirm the server is running, Claude can reach it, andssh_exec is receiving commands correctly. The would_execute response in Claude’s output confirms the tool invocation path is working end to end.
Testing blocklist rules
When adding or changing entries in ssh.blocked_commands, dry-run lets you verify your rules without executing anything. Ask Claude to run the commands you want blocked — confirm the blocklist triggers — then disable dry-run.
would_execute commands, then disable dry-run and re-run.
Limitations
- Dry-run only intercepts
ssh_exec. It does not affectfetch_external,gist_kb,github_search, orbrowser. - There is no partial dry-run — it is all-or-nothing for the
ssh_exectool. - The dry-run flag is read at startup. Changing it requires a server restart.