Skip to content

Configuration

ZeptoClaw is configured via ~/.zeptoclaw/config.json. All fields have sensible defaults.

~/.zeptoclaw/
├── config.json # Main configuration
├── memory/
│ └── longterm.json # Long-term memory store
├── sessions/ # Conversation history
├── skills/ # Custom skills (markdown)
└── plugins/ # Custom plugins (JSON manifests)
{
"providers": {
"default": "anthropic",
"anthropic": {
"api_key": "sk-ant-...",
"model": "claude-sonnet-4-5-20250929"
},
"openai": {
"api_key": "sk-...",
"model": "gpt-5.1"
},
"retry": {
"enabled": true,
"max_retries": 3,
"base_delay_ms": 1000,
"max_delay_ms": 30000
},
"fallback": {
"enabled": true,
"provider": "openai"
}
},
"channels": {
"telegram": {
"enabled": true,
"bot_token": "123456:ABC..."
},
"slack": {
"enabled": false,
"bot_token": "xoxb-..."
},
"discord": {
"enabled": false,
"bot_token": "MTIz...",
"guild_id": "123456789"
},
"webhook": {
"enabled": false,
"bind": "0.0.0.0",
"port": 8080,
"auth_token": "my-secret"
},
"whatsapp_cloud": {
"enabled": false,
"phone_number_id": "...",
"access_token": "..."
},
"lark": {
"enabled": false,
"app_id": "...",
"app_secret": "..."
}
},
"agents": {
"defaults": {
"agent_timeout_secs": 300,
"message_queue_mode": "collect",
"token_budget": 0,
"streaming": false
}
},
"approval": {
"enabled": false,
"require_approval": ["shell", "write_file"],
"auto_approve": ["read_file", "memory"]
},
"plugins": {
"enabled": true,
"directories": ["~/.zeptoclaw/plugins"]
},
"telemetry": {
"enabled": false,
"format": "prometheus"
},
"cost": {
"enabled": false,
"warn_threshold_usd": 1.0
},
"hooks": {
"before_tool": [],
"after_tool": [],
"on_error": []
}
}
FieldTypeDefaultDescription
providers.defaultstring"anthropic"Default provider name
providers.anthropic.api_keystringAnthropic API key
providers.anthropic.modelstring"claude-sonnet-4-5-20250929"Claude model
providers.openai.api_keystringOpenAI API key
providers.openai.modelstring"gpt-5.1"OpenAI model
providers.retry.enabledboolfalseEnable retry wrapper
providers.retry.max_retriesint3Max retry attempts
providers.fallback.enabledboolfalseEnable fallback provider
providers.fallback.providerstringFallback provider name
FieldTypeDefaultDescription
agents.defaults.agent_timeout_secsint300Wall-clock timeout in seconds
agents.defaults.message_queue_modestring"collect"Queue mode: collect or followup
agents.defaults.token_budgetint0Per-session token budget (0 = unlimited)
agents.defaults.streamingboolfalseEnable streaming by default
FieldTypeDefaultDescription
approval.enabledboolfalseEnable approval gate
approval.require_approvalarray[]Tools requiring approval
approval.auto_approvearray[]Tools auto-approved
FieldTypeDefaultDescription
safety.enabledbooltrueEnable safety layer
safety.leak_detection_enabledbooltrueEnable secret leak detection
FieldTypeDefaultDescription
compaction.enabledboolfalseEnable context compaction
compaction.context_limitint100000Max tokens before compaction
compaction.thresholdfloat0.80Compaction trigger threshold
FieldTypeDefaultDescription
routines.enabledboolfalseEnable routines engine
routines.cron_interval_secsint60Cron tick interval
routines.max_concurrentint3Max concurrent routine executions
FieldTypeDefaultDescription
memory.backendstring"builtin"Search backend: builtin, bm25, embedding, hnsw

Run zeptoclaw config check to validate your configuration. It reports:

  • Unknown field names
  • Type mismatches
  • Missing required values
  • Invalid enum values