Configuration
Kyber splits configuration into two files: settings and secrets.
~/.kyber/config.json— non-sensitive settings (provider, model, channels, ports, etc.)~/.kyber/.env— secrets (API keys, bot tokens, dashboard auth token)
The install script creates both for you. You can also edit them directly, or use the dashboard web UI which handles the split automatically.
File layout
~/.kyber/
├── config.json # Settings (no secrets)
├── .env # Secrets — API keys, tokens (mode 600)
├── workspace/ # Agent workspace
│ ├── AGENTS.md # Agent instructions
│ ├── SOUL.md # Personality
│ ├── USER.md # User preferences
│ ├── skills/ # Custom skills
│ └── memory/ # Persistent memory
│ └── MEMORY.md
├── skills/ # Managed/installed skills
├── security/ # Security scan reports
└── logs/ # Service logs (if using launchd)How secrets work
API keys and tokens are stored in ~/.kyber/.env as environment variables:
# ~/.kyber/.env
KYBER_PROVIDERS__OPENROUTER__API_KEY=sk-or-v1-xxx
KYBER_CHANNELS__TELEGRAM__TOKEN=123456:ABC-DEF
KYBER_DASHBOARD__AUTH_TOKEN=auto-generated-tokenThis file has 600 permissions (owner read/write only). Kyber loads it automatically on startup. The config.json file contains no credentials.
See Security for the full details on how this works.
Top-level structure (config.json)
{
"agents": { ... },
"providers": { ... },
"channels": { ... },
"gateway": { ... },
"dashboard": { ... },
"tools": { ... }
}Each section is documented in detail on its own page. See Full Reference for the complete schema.
Environment variable overrides
Any config value can be overridden with environment variables using the KYBER_ prefix and __ as a nested delimiter:
KYBER_AGENTS__DEFAULTS__PROVIDER="openai" kyber agent -m "Hello"Real environment variables take priority over .env file values, which take priority over config.json.