Complete reference for every VexAI configuration option, from the config file schema to runtime slash commands covering all 81 configurable paths.
Config File Structure
VexAI stores its configuration in data/config.json. The file is auto-created on first boot with all default values when you run the setup wizard. The schema is validated at startup using Zod, so any invalid values will prevent the bot from starting.
Location:data/config.json (relative to project root). This file is created by the setup wizard and should not be committed to version control.
VexAI exposes a /config slash command for live configuration management without editing files.
Command
Description
/config view [section]
View current config. Sensitive values are masked: tokens show first/last 4 characters only.
/config set <key> <value>
Set a config value using dot notation (e.g. voice.enabled true, llm.model gpt-4o). Autocomplete for all 81 paths with type validation.
/config reset <key>
Reset a config value to its schema default.
Restart required: Changes to llm, database, and embeddings require a bot restart to take effect. Changes to security, voice, subAgents, and workflows take effect immediately.
Examples
# View the full config (masked)
/config view
# View just the voice section
/config view voice
# Change the LLM model
/config set llm.model gpt-4o
# Enable the security observer
/config set security.enabled true
# Reset conversation window to default (50)
/config reset conversationWindow
All Configuration Paths
Complete reference for every configurable path. Paths use dot notation for nested values. A dash (-) in the Default column means the value is required or has no default.
Discord
Path
Type
Default
Description
discord.token
string
-
Bot token (read-only, set during setup)
discord.adminUserIds
array
-
Admin user IDs (read-only, set during setup)
LLM
Path
Type
Default
Description
llm.provider
enum
-
openai, anthropic, openrouter, openai-compatible
llm.apiKey
string
-
Provider API key
llm.model
string
-
Model name (e.g. gpt-4o, claude-sonnet-4-20250514)
llm.baseUrl
string
-
Custom base URL (required for openai-compatible)
Security
Path
Type
Default
Description
security.enabled
boolean
true
Enable security observer
security.exemptTools
array
[]
Tools that skip security review
security.alertChannelId
string
-
Channel ID for security alerts
Security LLM
Optional separate LLM provider for the security observer. If omitted, the main LLM is used.
Path
Type
Default
Description
security.llm.provider
enum
-
Observer LLM provider
security.llm.apiKey
string
-
Observer API key
security.llm.model
string
-
Observer model
security.llm.baseUrl
string
-
Observer base URL
General
Path
Type
Default
Description
conversationWindow
number
50
Max messages kept in conversation context
Webhooks
Path
Type
Default
Description
integrations.webhookServer.enabled
boolean
false
Enable webhook server
integrations.webhookServer.port
number
3847
Webhook server port
integrations.webhookServer.baseUrl
string
-
Public URL for inbound webhooks
GitHub
Path
Type
Default
Description
integrations.github.token
string
-
Personal access token for GitHub tools
OpenMail
Path
Type
Default
Description
integrations.openmail.enabled
boolean
false
Enable OpenMail integration
integrations.openmail.apiKey
string
-
OpenMail API key
integrations.openmail.inboxId
string
-
Inbox ID
integrations.openmail.approvalChannelId
string
-
Approval channel ID
integrations.openmail.autoCreateApprovalChannel
boolean
true
Auto-create approval channel if missing
integrations.openmail.wsEnabled
boolean
false
Enable WebSocket real-time updates
Voice
Path
Type
Default
Description
voice.enabled
boolean
false
Enable voice features
TTS (Text-to-Speech)
Path
Type
Default
Description
voice.tts.enabled
boolean
false
Enable text-to-speech
voice.tts.provider
enum
-
openai, google, elevenlabs, local
voice.tts.apiKey
string
-
TTS provider API key
voice.tts.baseUrl
string
-
TTS endpoint URL
voice.tts.model
string
-
TTS model name
voice.tts.voice
string
-
Voice name/ID
STT (Speech-to-Text)
Path
Type
Default
Description
voice.stt.enabled
boolean
false
Enable speech-to-text
voice.stt.provider
enum
-
whisper-api, google, local
voice.stt.apiKey
string
-
STT provider API key
voice.stt.baseUrl
string
-
STT endpoint URL
voice.stt.model
string
-
STT model name
Voice Assistant
Path
Type
Default
Description
voice.assistant.enabled
boolean
false
Enable voice assistant
voice.assistant.wakeWord
string
"hey vex"
Primary wake word
voice.assistant.wakeAliases
array
[]
Alternative wake words
voice.assistant.respondWithText
boolean
false
Also send responses to a text channel
voice.assistant.textChannelId
string
-
Text channel for written responses
voice.assistant.maxHistoryTurns
number
10
Conversation history turns to keep
voice.assistant.idleTimeout
number
300
Idle timeout in seconds before auto-disconnect
Database
Path
Type
Default
Description
database.type
enum
sqlite
sqlite or postgres
database.url
string
-
PostgreSQL connection URL
database.pool.min
number
2
Minimum pool connections
database.pool.max
number
10
Maximum pool connections
Embeddings
Path
Type
Default
Description
embeddings.enabled
boolean
false
Enable embedding-based semantic search
embeddings.provider
enum
builtin
builtin, openai, openrouter, local
embeddings.apiKey
string
-
Embedding provider API key
embeddings.baseUrl
string
-
Custom embedding endpoint
embeddings.model
string
Xenova/all-MiniLM-L6-v2
Embedding model name
embeddings.dimensions
number
384
Vector dimensions
embeddings.batchSize
number
50
Batch size for bulk embedding
embeddings.dailyLimit
number
-
Daily API call limit
Sub-Agents
Path
Type
Default
Description
subAgents.enabled
boolean
false
Enable the sub-agent system
Workflows
Path
Type
Default
Description
workflows.enabled
boolean
false
Enable workflow automation
Thinking
Path
Type
Default
Description
thinking.enabled
boolean
true
Show thinking indicator while processing
thinking.pollIntervalMs
number
4000
Indicator poll interval (ms, min 2000)
thinking.model
string
-
Summarizer model (null = main chat model)
Voice Configuration Example
Full voice setup with local TTS (Kokoro), local STT (faster-whisper), and the voice assistant.
Tip: When using local providers, you don't need API keys. Just point baseUrl to your local TTS/STT server. Kokoro and faster-whisper both expose OpenAI-compatible endpoints.
Provider Comparison
Provider
TTS
STT
Notes
openai
✅
-
Best quality, cloud-only, requires API key
google
✅
✅
Cloud-based, good multilingual support
elevenlabs
✅
-
Premium voice cloning, cloud-only
whisper-api
-
✅
OpenAI Whisper API endpoint
local
✅
✅
Self-hosted, no API key needed, lowest latency
Database & Embeddings
VexAI supports SQLite (default, zero-config) and PostgreSQL for multi-instance deployments. Embeddings enable semantic search over conversation history and documents.
baseUrl is the publicly-accessible URL that external services will use to send webhooks to VexAI. This is typically your server's domain or a reverse proxy URL.
GitHub
A personal access token enables GitHub tools (repository management, issue tracking, PR reviews).
Approval required: All outbound emails go through the approval channel before being sent. An admin must react with the approval emoji to send the email.