Logo
Configuration

Overview

Where the config file lives, what it looks like, and how validation works.

Configuration Overview

BabyClaw reads its configuration from a JSON file. If you ran babyclaw config init, this file lives at ~/.config/babyclaw/config.json.

Minimal config

The bare minimum to get BabyClaw running is a Telegram bot token and one AI provider:

{
  "version": 1,
  "channels": {
    "telegram": {
      "botToken": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
    }
  },
  "ai": {
    "providers": {
      "anthropic": { "apiKey": "sk-ant-..." }
    },
    "models": {
      "chat": "anthropic:claude-sonnet-4-20250514"
    },
    "aliases": {}
  }
}

Everything else has sensible defaults. You only need to add config for things you want to change.

Config sections

The config file is organized into these top-level sections:

SectionWhat it controls
versionAlways 1 (required)
channelsTelegram bot token
aiProviders, models, and aliases
databaseSQLite database path
workspaceWorkspace directory path
sessionMessage limits, history, reply chain mode, title generation
toolsWhich tools are enabled, shell security, web search
skillsPer-skill enable/disable, API keys, environment variables
schedulerTimezone for scheduled tasks
heartbeatPeriodic check-in settings
loggingLog level, format, output

Validation

BabyClaw validates the config strictly against its schema. If something is wrong -- unknown keys, bad types, missing required fields -- the gateway will refuse to start and tell you what's wrong.

You can check your config without starting the gateway:

babyclaw config validate

Editing the config

There are a few ways to edit the config:

Open in your editor:

babyclaw config edit

Interactive model setup:

babyclaw model configure

Edit manually:

Open ~/.config/babyclaw/config.json in any text editor. The gateway will pick up changes on the next restart.

Defaults

Most config fields have defaults, so you don't need to specify them. For example:

  • database.url defaults to "file:../data/babyclaw.db"
  • scheduler.timezone defaults to "UTC"
  • session.historyLimit defaults to 40
  • tools.shell.mode defaults to "allowlist"
  • heartbeat.enabled defaults to false

See the Configuration Reference for every field and its default value.

Next steps