Server
Server Configuration
Configure Aelio via config.yaml — LLM, channels, safety, memory, and more.
Aelio is configured via a single config.yaml file, validated by Zod on boot. Use ${VAR} syntax for environment variable interpolation.
Minimal config
name: my-aelio
secret: ${AELIO_SDK_SECRET}
llm:
provider: openai
model: gpt-4o-mini
api_key: ${OPENAI_API_KEY}
channels:
web:
enabled: true
allowed_origins:
- "http://127.0.0.1:4173"
- "https://your-app.com"
whatsapp:
enabled: false
identity:
allow_anonymous: true # dev only; set false in production
harness:
enabled: trueMajor config sections
| Section | Purpose |
|---|---|
name | Server instance name |
secret | SDK auth secret (${AELIO_SDK_SECRET}) |
llm | LLM provider, model, API key, fallback chain |
embeddings | Embedding provider for memory/vector search |
channels | Web widget and WhatsApp configuration |
safety | Tool safety defaults and confirmation settings |
identity | Customer identity resolution, anonymous mode |
session | Session TTL, token expiry |
memory | Fact extraction, recall settings |
harness | Turn engine budgets and behavior |
daemon | Background reflection daemon |
proactive | Proactive outreach settings |
cache | Response cache for no-tool replies |
sunjet | Optional Rust storage engine |
logging | Log level and format |
LLM configuration
llm:
provider: openai # openai | anthropic | gemini | groq | ollama | mock
model: gpt-4o-mini
api_key: ${OPENAI_API_KEY}
fallback:
provider: mock # fallback if primary failsSwitch providers by pointing AELIO_CONFIG at a profile:
AELIO_CONFIG=/path/to/config.anthropic.yaml pnpm --filter @aelio/server devWeb channel
channels:
web:
enabled: true
allowed_origins:
- "http://127.0.0.1:4173"
- "https://your-app.com"
# Use "*" for local dev to allow all originsWhatsApp (Meta adapter)
channels:
whatsapp:
enabled: true
provider: meta
phone_id: ${WA_PHONE_ID}
token: ${WA_TOKEN}
verify_token: ${WA_VERIFY_TOKEN}
app_secret: ${WA_APP_SECRET}
webhook_path: /wa/webhookWhatsApp (BYO provider)
channels:
whatsapp:
enabled: true
provider: sdk # inbound via aelio.ingest(), delivery via aelio.onSend()Safety
safety:
default_level: read
confirmation_prompt: "Reply **yes** to confirm this action."
block_destructive: trueMemory
memory:
enabled: true
max_facts_per_turn: 5
recall_top_k: 10Harness budgets
harness:
enabled: true
max_tool_calls: 8
max_replans: 3
max_wall_clock_ms: 30000
max_tokens: 16000