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-7)
thinkingstringThinking level: none, low, medium, high, xhigh

Additional agents load prompt files from ~/.skimpyclaw/agents/<agent-id>/. Discord /agent profiles are channel-specific runtime state stored separately in ~/.skimpyclaw/discord-thread-agents.json; they point at these configured agent IDs and can override model, effort, and prompt.

models ​

models.providers ​

Each provider key maps to its auth config:

json
{
  "anthropic": { "authToken": "${CLAUDE_CODE_OAUTH_TOKEN}" },
  "codex": { "authToken": "codex", "authPath": "${HOME}/.codex/auth.json", "baseURL": "https://chatgpt.com/backend-api" }
}
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
agentstringAgent ID override for this job. Defaults to agents.default
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. Valid thread targets do not fall back to the active channel on delivery failure; invalid IDs are ignored and use normal active-channel delivery

heartbeat ​

FieldTypeDefaultDescription
intervalMsnumber3600000Check interval (1 hour)
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 code_with_agent (max: 60)
maxTurnsnumber50Max tool-use turns per agent
worktrees.enabledbooleantrueEnable isolated git worktrees for coding agents
worktrees.modestringautooff, auto, or always; auto isolates PR review/rebase-style tasks
worktrees.rootstring~/.skimpyclaw/worktreesParent directory for generated worktrees
worktrees.cleanupbooleantrueRemove clean/unchanged worktrees after completion; preserve dirty or changed-HEAD worktrees
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 requires 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"
}

ToolConfig ​

Used by cron jobs, heartbeat, and channel defaults:

FieldTypeDefaultDescription
enabledbooleanEnable tool use
allowedPathsstring[]Filesystem paths the agent can access
maxIterationsnumberLegacy finalization checkpoint interval; a positive value asks for a final answer every N tool-use rounds but does not cap the loop
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
compactionModelstringanthropic/claude-haiku-4-5Model used for LLM summarization when compacting

execApproval ​

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