Skip to content

Config Options ​

Configuration lives at ~/.skimpyclaw/config.json. All fields are optional unless noted.

Environment variable interpolation is supported via ${ENV_VAR} syntax in string values (e.g. "${HOME}/.skimpyclaw"). On macOS, generic-password keychain references are also supported via ${KEYCHAIN:service/account}. ~/.skimpyclaw/config.json is written with 0600 permissions.


gateway ​

FieldTypeDefaultDescription
portnumber18790HTTP server port
hoststring127.0.0.1Bind address
modestringlocalDeployment mode: local or remote

agents ​

FieldTypeDescription
defaultstringDefault agent name (usually main)
listobjectMap of agent name → agent config

Agent config ​

FieldTypeDescription
identity.namestringDisplay name
identity.emojistringAgent emoji
modelstringDefault model (e.g. anthropic/claude-opus-4)
thinkingstringThinking level: none, low, medium, high

models ​

models.providers ​

Each provider key maps to its auth config:

json
{
  "anthropic": { "authToken": "${CLAUDE_CODE_OAUTH_TOKEN}" },
  "openai": { "apiKey": "${OPENAI_API_KEY}", "baseURL": "https://api.openai.com/v1" },
  "codex": { "authToken": "codex", "authPath": "${HOME}/.codex/auth.json" },
  "minimax": { "apiKey": "${MINIMAX_API_KEY}", "baseURL": "https://api.minimax.io/v1" }
}
FieldTypeDescription
apiKeystringAPI key for the provider
authTokenstringOAuth/auth token (Anthropic, Codex)
baseURLstringCustom API base URL
authPathstringPath to auth JSON file (Codex)

models.aliases ​

Map of shorthand names to full provider/model-id. See Model Aliases.

models.promptCaching ​

FieldTypeDefaultDescription
promptCachingbooleantrueEnable Anthropic prompt caching

channels ​

FieldTypeDescription
activestringActive channel preference: telegram or discord. If unset, picks first enabled channel

channels.telegram ​

FieldTypeDescription
enabledbooleanEnable Telegram channel
tokenstringBot token (use ${ENV_VAR} syntax)
allowFromarrayAllowed user IDs (string or number)
toolsToolConfigTool access config for this channel
defaultAllowedPathsstring[]Filesystem paths the agent can access
dailyNotesDirstringDirectory for daily notes feature

channels.discord ​

FieldTypeDescription
enabledbooleanEnable Discord channel
tokenstringBot token (use ${ENV_VAR} syntax)
allowFromarrayAllowed user IDs (string or number)
toolsToolConfigTool access config for this channel
defaultAllowedPathsstring[]Filesystem paths the agent can access
defaultChannelIdstringDefault channel for proactive messages (cron results, coding agent notifications)
threadedRepliesbooleanRoute coding agent status updates to Discord threads (default: true)

cron ​

FieldTypeDescription
jobsarrayList of cron job definitions

Cron job ​

FieldTypeDescription
idstringUnique job ID
namestringHuman-readable job name
modelstringModel override for this job
scheduleCronScheduleSchedule config (see below)
payloadCronPayloadWhat to run (see below)

CronSchedule ​

FieldTypeDescription
kindstringcron or interval
exprstringCron expression (e.g. 0 8 * * *) — for kind: cron
msnumberInterval in milliseconds — for kind: interval
tzstringIANA timezone (e.g. America/Chicago). Falls back to system timezone if invalid

CronPayload ​

FieldTypeDescription
kindstringagentTurn, script, or http
messagestringAgent prompt or path to prompt file (for agentTurn)
scriptstringShell command (for script)
urlstringURL to call (for http)
cwdstringWorking directory (for script)
timeoutMsnumberTimeout in milliseconds
toolsToolConfigTool access config (for agentTurn)
sendAsVoicebooleanSend result as voice message
discordThreadIdstringDiscord thread ID to send cron notifications to; falls back to active channel if invalid/unavailable

heartbeat ​

FieldTypeDefaultDescription
intervalMsnumber1800000Check interval (30 min)
promptstringHeartbeat prompt
modelstringModel override for heartbeat
toolsToolConfigTool access for heartbeat agent

dashboard ​

FieldTypeDescription
tokenstringBearer auth token (auto-generated by setup)
frontendstringFrontend mode: framework

codeAgents ​

FieldTypeDefaultDescription
maxConcurrentnumber5Max parallel coding agents
defaultAgentstringclaudeDefault CLI: claude or codex
timeoutMinutesnumber30Timeout for solo code_with_agent (max: 60)
teamTimeoutMinutesnumber60Timeout for code_with_team (max: 120)
maxTurnsnumber50Max tool-use turns per agent (team children: 25)
skipPlaywrightbooleanfalseSkip Playwright MCP for coding agents
validationCommandsobjectPer-project validation commands. Keys match project names from projects config. Values are shell commands run in the project dir. Overrides auto-detected build+test

Note: code_with_agent and code_with_team require an external coding CLI on your PATH. See Coding Agent Execution.

langfuse ​

FieldTypeDefaultDescription
enabledbooleanfalseEnable Langfuse observability
publicKeystringLangfuse public key
secretKeystringLangfuse secret key
baseUrlstringLangfuse server URL
environmentstringEnvironment tag
releasestringRelease tag
exportModestringbatchedimmediate or batched

voice ​

FieldTypeDefaultDescription
enabledbooleanfalseMaster switch for voice features
defaultProviderstringDefault voice provider name
providersobjectMap of provider name → VoiceProviderConfig
channelsobjectMap of channel name → VoiceChannelConfig

VoiceProviderConfig ​

FieldTypeDescription
apiKeystringProvider API key
baseURLstringCustom API base URL
tts.modelstringTTS model name
tts.voicestringVoice name
tts.speednumberPlayback speed
tts.voiceIdstringVoice ID (ElevenLabs)
stt.modelstringSTT model name

VoiceChannelConfig ​

FieldTypeDescription
enabledbooleanEnable voice for this channel
acceptVoicebooleanAccept incoming voice messages
sendVoicebooleanSend responses as voice

skills ​

FieldTypeDefaultDescription
enabledbooleantrueMaster switch for the skills system
directorystring~/.skimpyclaw/skills/Skills directory path
entriesobjectOverride per-skill enabled state: { skillName: boolean }
maxPromptTokensnumber4000Max approximate tokens for injected skills prompt
dynamicLoadingbooleantrueProgressive disclosure — only inject names/descriptions, load full content on-demand

projects ​

Named project paths. Keys are short names (e.g. "skimpyclaw"), values are absolute paths. Project paths are automatically added to tool allowedPaths and available to code_with_agent by name.

json
{
  "skimpyclaw": "/Users/you/Sites/skimpyclaw",
  "my-app": "/Users/you/Projects/my-app"
}

sandbox ​

FieldTypeDefaultDescription
enabledbooleanfalseEnable sandboxed execution
runtimestringauto-detectContainer runtime: container or docker
imagestringskimpyclaw-sandboxContainer image name
cpusnumber2CPU limit
memorystring2GMemory limit
networkstringnoneNetwork mode
idleTimeoutMsnumber3600000Idle timeout before container stops (1 hour)

ToolConfig ​

Used by cron jobs, heartbeat, and channel defaults:

FieldTypeDefaultDescription
enabledbooleanEnable tool use
allowedPathsstring[]Filesystem paths the agent can access
maxIterationsnumber20Max tool-use loop iterations
bashTimeoutnumber30000Bash command timeout (ms)
maxTurnTokensnumber200000Max tokens per agent turn
toolProfilestringfullTool set to expose: minimal, coding, or full

contextManagement ​

FieldTypeDefaultDescription
enabledbooleantrueEnable automatic context compaction
maxContextTokensnumber100000Token threshold before compaction triggers

browser ​

FieldTypeDefaultDescription
enabledbooleanfalseEnable Playwright browser tool
typestringchromiumBrowser type: chromium, firefox, webkit
headlessbooleantrueRun headless
allowFilebooleanAllow file:// URLs
slowMoMsnumberSlow-motion delay (ms)
userAgentstringCustom user agent
viewportobject{ width, height }
profileDirstringPersistent browser profile directory
executablePathstringPath to browser executable

execApproval ​

FieldTypeDefaultDescription
enabledbooleantrueEnable bash exec approval
ttlMsnumber300000Approval TTL (5 min)
requireForTiersnumber[][2, 3]Risk tiers that require approval