Skip to content

Configuration Reference

Configuration Reference

RemoteClaw is configured via a JSON5 file at ~/.remoteclaw/remoteclaw.json. JSON5 allows comments and trailing commas, making configuration more readable.

Runtime Selection

The agents.defaults.runtime key selects which agent CLI powers RemoteClaw. Claude is the default.

ValueCLINotes
claudeClaude CodeDefault runtime
geminiGemini CLI
codexCodex CLI
opencodeOpenCode CLI

Set runtime under agents.defaults:

{
agents: {
defaults: {
runtime: "claude",
},
},
}

Per-agent overrides are possible via agents.list[].runtime.

API Key Configuration

Each runtime reads its API key from an environment variable:

RuntimeEnvironment Variable
claudeANTHROPIC_API_KEY
geminiGEMINI_API_KEY or GOOGLE_API_KEY
codexOPENAI_API_KEY
opencodeProvider-specific (depends on configured backend)

Export the key in your shell profile or set it in env.vars:

{
env: {
vars: {
ANTHROPIC_API_KEY: "sk-ant-...",
},
},
}

Channel Setup

Channels connect RemoteClaw to messaging platforms. Each channel is configured under channels.<provider>.

All channels share these common options:

KeyTypeDefaultDescription
enabledbooleantrueEnable or disable the channel
dmPolicystring"pairing"DM access policy: pairing, allowlist, open, disabled
groupPolicystring"allowlist"Group access policy: allowlist, open, disabled
allowFromarray[]Sender allowlist for DMs (format varies by channel)
groupAllowFromarray[]Sender allowlist for groups
textChunkLimitnumber4000Max characters per message chunk
mediaMaxMbnumbervariesMax media file size in MB

Telegram

Requires a bot token from @BotFather.

{
channels: {
telegram: {
botToken: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
},
},
}

The token can also come from the TELEGRAM_BOT_TOKEN environment variable.

Key Telegram-specific options:

KeyTypeDefaultDescription
botTokenstringrequiredTelegram bot API token
tokenFilestringPath to file containing the token (for secret managers)
allowFromnumber[][]Numeric Telegram user IDs
streamingstring"off"Message streaming: off, partial, block, progress
replyToModestring"off"Threading: off, first, all

Multi-account setup uses the accounts key:

{
channels: {
telegram: {
botToken: "123456:ABC-...", // default account
accounts: {
alerts: {
botToken: "789012:GHI-...",
},
},
},
},
}

WhatsApp (Baileys)

WhatsApp uses QR-code authentication. Point authDir to a directory where session files will be stored after scanning the QR code.

{
channels: {
whatsapp: {
accounts: {
default: {
authDir: "~/.remoteclaw/whatsapp-auth",
},
},
},
},
}

Key WhatsApp-specific options:

KeyTypeDefaultDescription
authDirstringrequiredPath to Baileys auth state directory
allowFromstring[][]E.164 phone numbers (e.g., "+1234567890")
sendReadReceiptsbooleantrueSend read receipts to senders
debounceMsnumber0Batch rapid messages (0 = disabled)

Slack

Requires both a bot token (xoxb-) and an app-level token (xapp-).

{
channels: {
slack: {
botToken: "xoxb-...",
appToken: "xapp-...",
},
},
}

Tokens can also come from SLACK_BOT_TOKEN and SLACK_APP_TOKEN environment variables.

Key Slack-specific options:

KeyTypeDefaultDescription
botTokenstringrequiredSlack bot user token (xoxb-)
appTokenstringrequiredSlack app-level token (xapp-)
userTokenstringOptional user token (xoxp-) for richer read access
modestring"socket"Connection mode: socket or http
requireMentionbooleantrueRequire @mention in channels
nativeStreamingbooleantrueUse Slack native streaming
allowFromstring[][]Slack user IDs

MCP Server Configuration

Tool access is configured under tools:

{
tools: {
profile: "coding",
allow: ["mcp__my-server__*"],
deny: ["mcp__dangerous__*"],
},
}
KeyTypeDefaultDescription
tools.profilestringTool profile: minimal, coding, messaging, full
tools.allowstring[]Allowlist of tool names (glob patterns supported)
tools.alsoAllowstring[]Additional tools on top of the profile
tools.denystring[]Denylist of tool names
tools.byProviderobjectPer-provider tool policies
tools.elevated.enabledbooleanEnable privileged tool access
tools.elevated.allowFromobjectPer-provider user allowlist for elevated tools

Tool policies can also be set per-agent in agents.list[].tools and per-channel-group in channels.<provider>.groups.<id>.tools.

File System and Execution

KeyTypeDescription
tools.fs.workspaceOnlybooleanRestrict file access to the workspace
tools.exec.hoststringExecution host
tools.exec.securityobjectExecution security settings

Session Management

Sessions track conversation state between the user and the agent.

{
session: {
scope: "per-sender",
store: "~/.remoteclaw/sessions",
maintenance: {
pruneAfter: "30d",
},
},
}
KeyTypeDefaultDescription
session.scopestring"per-sender"Session isolation: per-sender or global
session.dmScopestring"main"DM session scope: main, per-peer, per-channel-peer, per-account-channel-peer
session.storestringPath to session storage directory
session.resetobjectAuto-reset trigger configuration
session.resetByTypeobjectPer-chat-type reset rules (direct, group, thread)
session.resetByChannelobjectPer-channel reset rules
session.maintenance.pruneAfterdurationAuto-prune sessions older than this
session.maintenance.maxDiskBytesstring/numberMax disk usage (e.g., "5gb")
session.threadBindings.enabledbooleanEnable thread-to-session mapping
session.threadBindings.ttlHoursnumberThread binding time-to-live

Cron Scheduling

Schedule periodic agent tasks with cron syntax:

{
cron: {
enabled: true,
store: "~/.remoteclaw/cron",
sessionRetention: "7d",
maxConcurrentRuns: 2,
},
}
KeyTypeDefaultDescription
cron.enabledbooleanEnable cron scheduling
cron.storestringPath to cron job storage
cron.maxConcurrentRunsnumberMax concurrent cron executions
cron.webhookstringWebhook URL for cron triggers (HTTPS only)
cron.webhookTokenstringAuthentication token for the webhook
cron.sessionRetentionstring/falseHow long to keep cron session logs (e.g., "7d")
cron.runLog.maxBytesnumberMax size of the run log
cron.runLog.keepLinesnumberLines to keep in the run log

All Top-Level Keys

Every top-level key in RemoteClawSchema (from src/config/zod-schema.ts):

KeyTypeDescription
$schemastringJSON Schema URL reference
metaobjectVersion tracking (lastTouchedVersion, lastTouchedAt)
envobjectEnvironment: shellEnv (shell inheritance), vars (custom env vars)
wizardobjectSetup wizard state tracking
diagnosticsobjectOpenTelemetry export, cache tracing, feature flags
loggingobjectLog level, file output, console style, sensitive field redaction
updateobjectAuto-update channel (stable/beta/dev) and check settings
browserobjectChrome DevTools Protocol automation, SSRF policy, browser profiles
uiobjectUI customization: theme color, assistant name and avatar
authobjectAuth profiles (API key/OAuth/token), provider priority, billing cooldowns
nodeHostobjectNode host configuration (browser proxy)
agentsobjectAgent defaults and agent list (see Agent Configuration)
toolsobjectTool access profiles, allow/deny lists (see MCP Server Configuration)
messagesobjectMessage handling configuration
commandsobjectCommand parsing and execution
approvalsobjectTool and action approval workflow
sessionobjectSession management (see Session Management)
broadcastobjectAgent-to-agent broadcast routing
audioobjectAudio transcription command and timeout
mediaobjectMedia handling (e.g., preserveFilenames)
cronobjectScheduled jobs (see Cron Scheduling)
hooksobjectWebhook integration: mappings, Gmail Pub/Sub, internal events
webobjectWebSocket server (heartbeat, reconnect strategy)
channelsobjectMessaging channel adapters (see Channel Setup)
discoveryobjectmDNS/Bonjour and wide-area discovery
canvasHostobjectVisual workspace server (port, document root, live reload)
talkobjectVoice/TTS provider config and voice aliases
gatewayobjectControl plane (see Gateway)
memoryanyOpaque plugin memory store
pluginsobjectPlugin system (see Plugins)
bindingsarrayChannel-to-agent routing rules

Agent Configuration

Configure agent defaults and define multiple agents:

{
agents: {
defaults: {
runtime: "claude",
workspace: "~/projects",
contextTokens: 200000,
thinkingDefault: "medium",
},
list: [
{
id: "main",
default: true,
name: "Main Agent",
},
{
id: "ops",
name: "Ops Agent",
runtime: "gemini",
},
],
},
}

Key agent default options:

KeyTypeDescription
agents.defaults.runtimestringDefault agent CLI (claude, gemini, codex, opencode)
agents.defaults.modelstring/objectDefault model
agents.defaults.workspacestringWorkspace root directory
agents.defaults.contextTokensnumberContext window size
agents.defaults.thinkingDefaultstringThinking depth: off, minimal, low, medium, high, xhigh
agents.defaults.timeoutSecondsnumberAgent response timeout
agents.defaults.maxConcurrentnumberMax concurrent sessions
agents.defaults.typingModestringTyping indicator: never, instant, thinking, message
agents.defaults.humanDelay.modestringSimulated delay: off, natural, custom

Gateway

The gateway is the control plane that manages channels, agents, and API endpoints:

{
gateway: {
port: 18789,
mode: "local",
auth: {
mode: "token",
token: "my-secret-token",
},
},
}
KeyTypeDefaultDescription
gateway.portnumber18789Gateway listen port
gateway.modestring"local"Mode: local or remote
gateway.bindstring"auto"Bind address: auto, lan, loopback, custom, tailnet
gateway.auth.modestringAuth mode: none, token, password, trusted-proxy
gateway.auth.tokenstringAuthentication token
gateway.tls.enabledbooleanEnable TLS
gateway.tls.certPathstringPath to TLS certificate
gateway.tls.keyPathstringPath to TLS private key
gateway.controlUi.enabledbooleanEnable the web control UI
gateway.tailscale.modestring"off"Tailscale integration: off, serve, funnel
gateway.reload.modestring"off"Hot reload: off, restart, hot, hybrid

Plugins

The plugin system loads channel extensions and other add-ons:

{
plugins: {
enabled: true,
allow: ["telegram", "whatsapp", "slack"],
load: {
paths: ["./extensions"],
},
},
}
KeyTypeDescription
plugins.enabledbooleanEnable the plugin system
plugins.allowstring[]Plugin allowlist
plugins.denystring[]Plugin denylist
plugins.load.pathsstring[]Directories to scan for plugins
plugins.entries.<id>.enabledbooleanEnable/disable a specific plugin
plugins.entries.<id>.configobjectPlugin-specific configuration

Deprecated Sections

The following configuration sections are deprecated and will be ignored or removed in future versions:

skills

Status: Removed.

The skills system has been removed. In the middleware rewrite, agent CLIs (Claude, Gemini, Codex, OpenCode) bring their own capabilities. There is no centralized skill marketplace. Any skills configuration is ignored.

models

Status: Removed.

The model catalog has been removed. Each agent CLI manages its own model selection. Use agents.defaults.model or per-agent model overrides instead of the top-level models section. Any models configuration is ignored.

plugins (partially deprecated)

Status: Kept for channel extensions only.

The plugin system remains active for loading channel adapter extensions (Telegram, WhatsApp, Slack, etc.). However, the broader plugin ecosystem (custom skills, model providers) is no longer supported. Plugins now serve exclusively as channel adapters.