Config
Config helpers for non-interactive edits in remoteclaw.json: get/set/patch/unset/file/schema/validate values by path and print the active config file. Run without a subcommand to open the configure wizard (same as remoteclaw configure).
Root options
Supported guided sections: workspace, model, web, gateway, daemon, channels, plugins, skills, health.
Examples
remoteclaw config fileremoteclaw config --section modelremoteclaw config --section gateway --section daemonremoteclaw config schemaremoteclaw config get browser.executablePathremoteclaw config set browser.executablePath "/usr/bin/google-chrome"remoteclaw config set browser.profiles.work.executablePath "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"remoteclaw config set agents.defaults.heartbeat.every "2h"remoteclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"remoteclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --mergeremoteclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKENremoteclaw config set secrets.providers.vaultfile --provider-source file --provider-path /etc/remoteclaw/secrets.json --provider-mode jsonremoteclaw config patch --file ./remoteclaw.patch.json5 --dry-runremoteclaw config unset plugins.entries.brave.config.webSearch.apiKeyremoteclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN --dry-runremoteclaw config validateremoteclaw config validate --jsonconfig schema
Print the generated JSON schema for remoteclaw.json to stdout as JSON.
remoteclaw config schemaPipe it into a file when you want to inspect or validate it with other tools:
remoteclaw config schema > remoteclaw.schema.jsonPaths
Paths use dot or bracket notation. Quote bracket-notation paths in shell examples so shells such as zsh do not expand [0] as a glob before RemoteClaw receives the path:
remoteclaw config get agents.defaults.workspaceremoteclaw config get 'agents.list[0].id'Use the agent list index to target a specific agent:
remoteclaw config get agents.listremoteclaw config set 'agents.list[1].tools.exec.node' "node-id-or-name"Values
Values are parsed as JSON5 when possible; otherwise they are treated as strings. Use --strict-json to require JSON5 parsing. --json remains supported as a legacy alias.
remoteclaw config set agents.defaults.heartbeat.every "0m"remoteclaw config set gateway.port 19001 --strict-jsonremoteclaw config set channels.whatsapp.groups '["*"]' --strict-jsonconfig get <path> --json prints the raw value as JSON instead of terminal-formatted text.
Use --merge when adding entries to those maps:
remoteclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --mergeremoteclaw config set models.providers.ollama.models '[{"id":"llama3.2","name":"Llama 3.2"}]' --strict-json --mergeUse --replace only when you intentionally want the provided value to become the complete target value.
config set modes
remoteclaw config set supports four assignment styles:
```bashremoteclaw config set secrets.providers.vault \ --provider-source exec \ --provider-command /usr/local/bin/remoteclaw-vault \ --provider-arg read \ --provider-arg openai/api-key \ --provider-timeout-ms 5000``````bashremoteclaw config set --batch-file ./config-set.batch.json --dry-run```Batch parsing always uses the batch payload (--batch-json/--batch-file) as the source of truth. --strict-json / --json do not change batch parsing behavior.
config patch
Use config patch when you want to paste or pipe a config-shaped patch instead of running many path-based config set commands. The input is a JSON5 object. Objects merge recursively, arrays and scalar values replace the target value, and null deletes the target path.
remoteclaw config patch --file ./remoteclaw.patch.json5 --dry-runremoteclaw config patch --file ./remoteclaw.patch.json5You can also pipe a patch over stdin, which is useful for remote setup scripts:
ssh remoteclaw-host 'remoteclaw config patch --stdin --dry-run' < ./remoteclaw.patch.json5ssh remoteclaw-host 'remoteclaw config patch --stdin' < ./remoteclaw.patch.json5Example patch:
{ channels: { slack: { enabled: true, mode: "socket", botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" }, groupPolicy: "open", requireMention: false, }, discord: { enabled: true, token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" }, dmPolicy: "disabled", dm: { enabled: false }, groupPolicy: "allowlist", }, }, agents: { defaults: { model: { primary: "openai/gpt-5.5" }, models: { "openai/gpt-5.5": { params: { fastMode: true } }, }, }, },}Use --replace-path <path> when one object or array must become exactly the provided value instead of being recursively patched:
remoteclaw config patch --file ./discord.patch.json5 --replace-path 'channels.discord.guilds["123"].channels'--dry-run runs schema and SecretRef resolvability checks without writing. Exec-backed SecretRefs are skipped by default during dry-run; add --allow-exec when you intentionally want dry-run to execute provider commands.
JSON path/value mode remains supported for both SecretRefs and providers:
remoteclaw config set channels.discord.token \ '{"source":"env","provider":"default","id":"DISCORD_BOT_TOKEN"}' \ --strict-json
remoteclaw config set secrets.providers.vaultfile \ '{"source":"file","path":"/etc/remoteclaw/secrets.json","mode":"json"}' \ --strict-jsonProvider builder flags
Provider builder targets must use secrets.providers.<alias> as the path.
Hardened exec provider example:
remoteclaw config set secrets.providers.vault \ --provider-source exec \ --provider-command /usr/local/bin/remoteclaw-vault \ --provider-arg read \ --provider-arg openai/api-key \ --provider-json-only \ --provider-pass-env VAULT_TOKEN \ --provider-trusted-dir /usr/local/bin \ --provider-timeout-ms 5000Dry run
Use --dry-run to validate changes without writing remoteclaw.json.
remoteclaw config set channels.discord.token \ --ref-provider default \ --ref-source env \ --ref-id DISCORD_BOT_TOKEN \ --dry-run
remoteclaw config set channels.discord.token \ --ref-provider default \ --ref-source env \ --ref-id DISCORD_BOT_TOKEN \ --dry-run \ --json
remoteclaw config set channels.discord.token \ --ref-provider vault \ --ref-source exec \ --ref-id discord/token \ --dry-run \ --allow-exec- `ok`: whether dry-run passed- `operations`: number of assignments evaluated- `checks`: whether schema/resolvability checks ran- `checks.resolvabilityComplete`: whether resolvability checks ran to completion (false when exec refs are skipped)- `refsChecked`: number of refs actually resolved during dry-run- `skippedExecRefs`: number of exec refs skipped because `--allow-exec` was not set- `errors`: structured missing-path, schema, or resolvability failures when `ok=false`JSON output shape
{ ok: boolean, operations: number, configPath: string, inputModes: ["value" | "json" | "builder" | "unset", ...], checks: { schema: boolean, resolvability: boolean, resolvabilityComplete: boolean, }, refsChecked: number, skippedExecRefs: number, errors?: [ { kind: "missing-path" | "schema" | "resolvability", message: string, ref?: string, // present for resolvability errors }, ],}Write safety
remoteclaw config set and other RemoteClaw-owned config writers validate the full post-change config before committing it to disk. If the new payload fails schema validation or looks like a destructive clobber, the active config is left alone and the rejected payload is saved beside it as remoteclaw.json.rejected.*.
Prefer CLI writes for small edits:
remoteclaw config set gateway.reload.mode hybrid --dry-runremoteclaw config set gateway.reload.mode hybridremoteclaw config validateIf a write is rejected, inspect the saved payload and fix the full config shape:
CONFIG="$(remoteclaw config file)"ls -lt "$CONFIG".rejected.* 2>/dev/null | headremoteclaw config validateDirect editor writes are still allowed, but the running Gateway treats them as untrusted until they validate. Invalid direct edits fail startup or are skipped by hot reload; Gateway does not rewrite remoteclaw.json. Run remoteclaw doctor --fix to repair prefixed/clobbered config or restore the last-known-good copy. See Gateway troubleshooting.
Whole-file recovery is reserved for doctor repair. Plugin schema changes or minHostVersion skew stay loud instead of rolling back unrelated user settings such as models, providers, auth profiles, channels, gateway exposure, tools, memory, browser, or cron config.
Subcommands
config file: Print the active config file path (resolved fromREMOTECLAW_CONFIG_PATHor default location). The path should name a regular file, not a symlink.
Restart the gateway after edits.
Validate
Validate the current config against the active schema without starting the gateway.
remoteclaw config validateremoteclaw config validate --jsonAfter remoteclaw config validate is passing, you can use the local TUI to have an embedded agent compare the active config against the docs while you validate each change from the same terminal:
remoteclaw chatThen inside the TUI:
!remoteclaw config file!remoteclaw docs gateway auth token secretref!remoteclaw config validate!remoteclaw doctorTypical repair loop: