Skip to main content

Extension Configuration

Wunderland extensions are modular capability packs — tools, voice providers, productivity integrations, cloud deployers, and more. This guide covers how to discover, enable, configure, and set provider defaults.

Quick Reference​

# List all extensions
wunderland extensions list

# See what an extension needs
wunderland extensions info image-generation

# Enable an extension for this agent
wunderland extensions enable email-gmail

# Set global provider defaults (image gen, TTS, STT, web search)
wunderland extensions configure

# Configure a specific extension
wunderland extensions configure image-generation

# Add extensions to global defaults
wunderland extensions set-default image-generation email-gmail

Two-Tier Settings​

Extension configuration follows a two-tier model, similar to Git's global/local config:

TierFileScope
Global~/.wunderland/config.jsonAll agents
Per-agentagent.config.jsonThis agent only

Precedence: agent.config.json > ~/.wunderland/config.json > hardcoded defaults.

If an agent has no extensions field in its config, it inherits global defaults. If global has none, hardcoded defaults apply.

Global Config Example​

{
"extensions": {
"tools": ["web-search", "image-generation", "deep-research"],
"voice": ["speech-runtime"],
"productivity": ["email-gmail"]
},
"providerDefaults": {
"imageGeneration": "openai",
"tts": "elevenlabs",
"stt": "openai",
"webSearch": "serper"
},
"extensionOverrides": {
"image-generation": {
"priority": 10,
"options": { "defaultProvider": "stability" }
}
}
}

Per-Agent Config Example​

{
"llmProvider": "ollama",
"llmModel": "qwen2.5:7b",
"extensions": {
"tools": ["cli-executor", "web-search", "deep-research"],
"productivity": []
},
"extensionOverrides": {
"web-search": {
"options": { "defaultProvider": "duckduckgo" }
}
}
}

This agent uses DuckDuckGo for web search (overriding the global Serper default) and has no productivity extensions (explicitly empty array overrides global).

Provider Defaults​

Set default providers for capability categories. These apply to all agents unless overridden.

wunderland extensions configure

Interactive prompts for:

CategoryOptions
Image generationOpenAI, OpenRouter, Stability AI, Replicate
Text-to-speechOpenAI TTS, ElevenLabs
Speech-to-textOpenAI Whisper, Deepgram, Whisper-local
Web searchSerper (Google), Brave Search, DuckDuckGo

Saved to ~/.wunderland/config.json under providerDefaults.

API Keys​

Each extension may require API keys. Use extensions info to check status:

wunderland extensions info image-generation

Output:

Extension: Image Generation
Name: image-generation
Category: tool
Description: Generate images from text prompts using OpenAI, OpenRouter, Stability AI, or Replicate.

API Keys / Environment Variables:
OPENAI_API_KEY ✓ set
OPENROUTER_API_KEY ✗ not set
STABILITY_API_KEY ✗ not set
REPLICATE_API_TOKEN ✗ not set
Get keys: https://platform.openai.com/api-keys

Set keys in your environment or .env file:

export OPENAI_API_KEY=sk-...
export OPENROUTER_API_KEY=sk-or-...
export STABILITY_API_KEY=sk-...
export REPLICATE_API_TOKEN=r8_...

Common Extensions​

Tools​

NameAPI KeysDescription
web-searchSERPER_API_KEY or BRAVE_API_KEYWeb search (DuckDuckGo works without keys)
deep-researchSERPER_API_KEYMulti-source investigation, trending, academic
image-generationOPENAI_API_KEY, OPENROUTER_API_KEY, STABILITY_API_KEY, or REPLICATE_API_TOKENMulti-provider text-to-image generation
image-searchPEXELS_API_KEY or UNSPLASH_ACCESS_KEYSearch stock photo libraries
cli-executorNoneShell command execution
web-browserNoneHeadless browser automation
stealth-browserNoneAnti-detection browser automation for bot-protected sites
githubGITHUB_TOKENGitHub repos, issues, PRs
weatherWEATHERAPI_KEY (optional)Weather lookup (Open-Meteo free fallback)
giphyGIPHY_API_KEYGIF search
news-searchNEWSAPI_API_KEYNews article search

Productivity​

NameAPI KeysDescription
email-gmailGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKENGmail send, read, search, reply
calendar-googleGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKENCalendar events CRUD

Voice​

NameAPI KeysDescription
speech-runtimeOPENAI_API_KEY and/or ELEVENLABS_API_KEYWhisper STT + OpenAI/ElevenLabs TTS

Auto-Detection​

Some extensions load automatically when their API keys are present in the environment:

  • GitHub — auto-loads when GITHUB_TOKEN or GH_TOKEN is set (or gh CLI is authenticated)
  • Telegram — auto-loads when TELEGRAM_BOT_TOKEN is set
  • Gmail — auto-loads when GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET + GOOGLE_REFRESH_TOKEN are all set
  • Google Calendar — same Google credentials as Gmail

Runtime Extension Loading​

Agents can discover and load extensions mid-conversation using built-in meta-tools:

  • extensions_list — see all available extension packs
  • extensions_enable — load an extension pack into the current session
  • extensions_status — check what's currently loaded

When you ask for something the agent can't do, it checks extensions_list for available extensions and suggests what API keys you need.

Sealed Agents​

If an agent has a sealed.json file, extension configuration is locked. Use wunderland verify-seal to check integrity. Sealed agents cannot have extensions added or removed via CLI.