Configuration /config
API Keys
muxd supports 9 LLM providers. Set API keys via environment variables or /config:
/config set anthropic.api_key sk-ant-...
/config set openai.api_key sk-...
/config set mistral.api_key ...
/config set grok.api_key xai-...
/config set zai.api_key ...
/config set google.api_key ...
/config set fireworks.api_key ...
/config set deepinfra.api_key ...
/config set ollama.url http://localhost:11434
/config set brave.api_key BSA...
Or use environment variables:
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export MISTRAL_API_KEY="..."
export GROK_API_KEY="xai-..."
export ZAI_API_KEY="..."
export GOOGLE_API_KEY="..."
export FIREWORKS_API_KEY="..."
export DEEPINFRA_API_KEY="..."
export OLLAMA_URL="http://localhost:11434"
Resolution order: environment variable > /config set preference.
Config file
All preferences are stored in ~/.config/muxd/config.json. You can edit this file directly or use /config set from the TUI. Here's a sample:
{
"model": "claude-sonnet",
"anthropic_api_key": "sk-ant-...",
"brave_api_key": "BSA...",
"daemon_bind_address": "0.0.0.0",
"hub_url": "http://192.168.1.50:4097",
"hub_node_token": "your-hub-token",
"hub_node_name": "my-desktop"
}
Only set the keys you need — omitted keys use defaults. The file is created automatically on first run.
/config Subcommands
| Command | Description |
|---|---|
/config show | Show all current preferences |
/config set <key> <value> | Set a preference |
/config reset | Reset all preferences to defaults |
/config models | Show available models and pricing |
/config tools | Show available tools |
/config hub | Show hub settings |
/config daemon | Show daemon/network settings |
/config theme | Show theme settings |
/config set Keys
Provider Keys
| Key | Env var fallback | Description |
|---|---|---|
anthropic.api_key | ANTHROPIC_API_KEY | Anthropic API key |
openai.api_key | OPENAI_API_KEY | OpenAI API key |
mistral.api_key | MISTRAL_API_KEY | Mistral API key |
grok.api_key | GROK_API_KEY | Grok / xAI API key |
zai.api_key | ZAI_API_KEY | Z.AI API key |
google.api_key | GOOGLE_API_KEY | Google AI API key |
fireworks.api_key | FIREWORKS_API_KEY | Fireworks AI API key |
deepinfra.api_key | DEEPINFRA_API_KEY | DeepInfra API key |
ollama.url | OLLAMA_URL | Ollama server URL (default: http://localhost:11434) |
brave.api_key | BRAVE_SEARCH_API_KEY | Brave Search API key (for web search tool) |
textbelt.api_key | — | Textbelt API key (for SMS tools) |
Model
| Key | Description |
|---|---|
model | Default model (e.g. claude-sonnet, gpt-4o, claude-opus) |
model.consult | Model to use for second opinion consult calls (e.g. openai/gpt-4o, anthropic/claude-haiku). No default. Set via /config set model.consult <model>. |
Footer Display
| Key | Type | Default | Description |
|---|---|---|---|
footer.tokens | bool | true | Show token count |
footer.cost | bool | true | Show estimated cost |
footer.cwd | bool | true | Show current working directory |
footer.session | bool | true | Show session info |
footer.keybindings | bool | true | Show keybinding hints |
footer.emoji | string | (none) | Footer emoji (use /emoji picker or set by name) |
Preset emoji names: devil, imp, fire, rocket, skull, robot, ghost, alien, bolt, star, diamond, snake, cat, dog, heart. Use none to remove.
/config set footer.emoji devil
/config set footer.emoji none
Or use the interactive picker: /emoji
Hub
Settings for running a hub coordinator (muxd --hub).
| Key | Description |
|---|---|
hub.bind_address | Hub bind address (default: localhost, use 0.0.0.0 for LAN access) |
hub.auth_token | Bearer token for hub authentication (auto-generated on first hub start) |
Node (Client)
Settings for registering a daemon as a node with an existing hub.
| Key | Description |
|---|---|
hub.url | Hub URL that this daemon registers with (e.g. http://hub-host:4097) |
hub.node_token | Token this daemon uses to authenticate with the hub (same as the hub's hub.auth_token) |
hub.node_name | Display name for this node in the hub (defaults to hostname) |
See the Hub setup guide for the full connection flow.
SMS (Textbelt)
| Key | Description |
|---|---|
textbelt.api_key | Textbelt API key for sending SMS |
/config set textbelt.api_key your-api-key
Get an API key at textbelt.com. Enables the sms_send, sms_status, and sms_schedule tools.
Daemon
| Key | Description |
|---|---|
daemon.bind_address | Network interface to bind (localhost, 0.0.0.0, or specific IP). Default: localhost |
Use 0.0.0.0 to make muxd accessible from other devices on your LAN (e.g. the muxd mobile app):
/config set daemon.bind_address 0.0.0.0
Or pass it as a CLI flag:
muxd -bind 0.0.0.0
muxd --daemon -bind 0.0.0.0
Scheduler
| Key | Description |
|---|---|
scheduler.allowed_tools | Comma-separated list of tools the scheduler may run |
Note: Scheduled agent tasks (created via
schedule_taskor/schedule add-task) bypass thescheduler.allowed_toolsallowlist. The spawned agent enforces its own tool policy at runtime.
Tools
| Key | Description |
|---|---|
tools.disabled | Comma-separated list of tools to disable (e.g. bash,file_write) |
tools.ask_user | Enable/disable the ask_user tool (default: true) |
Boolean values accept: true/false, on/off, yes/no, 1/0 (case-insensitive).
Model Aliases
Use short aliases instead of full model IDs:
| Alias | Resolves to |
|---|---|
claude-sonnet | claude-sonnet-4-6 |
claude-haiku | claude-haiku-4-5-20251001 |
claude-opus | claude-opus-4-6 |
The anthropic/ prefix is optional: anthropic/claude-sonnet and claude-sonnet are equivalent.
/config set model claude-opus
Provider Prefixes
Use provider/model syntax to specify a model from any provider:
| Prefix | Provider | Example |
|---|---|---|
anthropic/ | Anthropic | anthropic/claude-sonnet-4-6 |
openai/ | OpenAI | openai/gpt-4o |
mistral/ | Mistral | mistral/mistral-large-latest |
grok/ or xai/ | Grok / xAI | grok/grok-3 |
zai/, zai-sdk/, or zhipu/ | Z.AI | zai/glm-4 |
fireworks/ | Fireworks AI | fireworks/llama-v3p1-70b |
deepinfra/ | DeepInfra | deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct |
google/ | Google AI | google/gemini-2.0-flash |
ollama/ | Ollama (local) | ollama/llama3.3 |
Auto-Detection
When no prefix is given, muxd detects the provider from the model name:
| Pattern | Detected provider |
|---|---|
claude-* | Anthropic |
gpt-*, o1*, o3*, o4* | OpenAI |
mistral-*, ministral-*, codestral-*, pixtral-* | Mistral |
grok-* | Grok / xAI |
glm-*, autoglm-* | Z.AI |
accounts/fireworks/models/* | Fireworks AI |
Contains : (e.g. gemma3:4b) | Ollama |
Provider Model Examples
/config set model claude-sonnet # Anthropic (alias)
/config set model gpt-4o # OpenAI (auto-detected)
/config set model mistral-large-latest # Mistral (auto-detected)
/config set model grok-3 # Grok / xAI (auto-detected)
/config set model glm-4 # Z.AI (auto-detected)
/config set model fireworks/llama-v3p1-70b # Fireworks (prefix)
/config set model deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct # DeepInfra (prefix)
/config set model google/gemini-2.0-flash # Google (prefix)
/config set model llama3.3:latest # Ollama (auto-detected by ":")
Pricing
muxd tracks estimated costs per session.
Built-in pricing
| Model | Input ($/1M tokens) | Output ($/1M tokens) |
|---|---|---|
claude-opus-4-6 | $5.00 | $25.00 |
claude-sonnet-4-6 | $3.00 | $15.00 |
claude-haiku-4-5-20251001 | $1.00 | $5.00 |
Custom pricing
Override or add pricing in ~/.config/muxd/pricing.json:
{
"my-custom-model": {
"input": 1.0,
"output": 5.0
}
}
Values are dollars per million tokens. Custom entries merge with defaults.
Data Directory
| Path | Contents |
|---|---|
~/.config/muxd/config.json | User preferences and API keys |
~/.config/muxd/pricing.json | Custom pricing overrides |
~/.local/share/muxd/muxd.db | SQLite database (sessions and messages) |