Configuration /config


Config file

All preferences are stored in ~/.config/muxd/config.json. You can edit this file directly or use /config set from the TUI.

JSON keys vs /config set keys: config.json uses snake_case (underscores), while /config set uses dot notation. For example, model_compact in config.json is model.compact in /config set. The two formats are interchangeable — use whichever you prefer.

Here's a comprehensive real-world example showing all the main fields:

{
  "footer_tokens": true,
  "footer_cost": true,
  "footer_cwd": true,
  "footer_session": true,
  "footer_keybindings": true,

  "model": "zai/glm-5.1",
  "model_compact": "zai/glm-5.1",
  "model_consult": "accounts/fireworks/models/kimi-k2p5",
  "model_title": "accounts/fireworks/models/gpt-oss-120b",
  "model_tags": "accounts/fireworks/models/gpt-oss-120b",
  "provider": "zai",

  "zai_api_key": "your-zai-key",
  "zai_coding_plan": true,
  "fireworks_api_key": "your-fireworks-key",
  "brave_api_key": "your-brave-key",
  "textbelt_api_key": "your-textbelt-key",

  "scheduler_allowed_tools": "sms_send",

  "daemon_auth_token": "your-daemon-token",

  "hub_url": "http://192.168.1.50:4097",
  "hub_node_token": "your-hub-token",
  "hub_node_name": "my-desktop",

  "tier1_percent": 0.65,
  "tier3_percent": 0.85,
  "tail_token_percent": 0.3,

  "mobile_models": [
    { "id": "zai/glm-5.1", "display": "GLM 5.1", "provider": "Z.AI" },
    { "id": "accounts/fireworks/models/kimi-k2p5", "display": "Kimi k2p5", "provider": "Kimi" }
  ]
}

Only set the keys you need — omitted keys use defaults. The file is created automatically on first run.


/config Subcommands

CommandDescription
/config showShow all current preferences
/config set <key> <value>Set a preference
/config resetReset all preferences to defaults
/config daemonShow daemon/network settings
/config hubShow hub settings
/config mobileShow mobile model picker settings
/config modelsShow available models and pricing
/config nodeShow node registration settings
/config themeShow theme settings
/config toolsShow available tools

/config set Keys

Daemon

KeyJSON fieldDescription
daemon.bind_addressdaemon_bind_addressNetwork interface to bind (localhost, 0.0.0.0, or specific IP). Default: localhost
daemon.auth_tokendaemon_auth_tokenAuth token for daemon connections (auto-generated on first start)

Use 0.0.0.0 to make the daemon accessible from other devices on your LAN (e.g. the muxd mobile app):

/config set daemon.bind_address 0.0.0.0

Or via environment variable:

# Linux / macOS
export MUXD_BIND=0.0.0.0
muxd-daemon

# Windows (PowerShell)
$env:MUXD_BIND = "0.0.0.0"
muxd-daemon
KeyJSON fieldTypeDefaultDescription
footer.costfooter_costbooltrueShow estimated cost
footer.cwdfooter_cwdbooltrueShow current working directory
footer.emojifooter_emojistring(none)Footer emoji (use /emoji picker or set by name)
footer.keybindingsfooter_keybindingsbooltrueShow keybinding hints
footer.sessionfooter_sessionbooltrueShow session info
footer.tokensfooter_tokensbooltrueShow token count
show_diffshide_diffsbooltrueShow inline file diffs (stored inverted as hide_diffs)

Boolean values accept: true/false, on/off, yes/no, 1/0 (case-insensitive).

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

Theme

KeyJSON fieldDescription
theme.spinnerspinner_styleActivity spinner style used in the TUI status line and background-job indicator

Set directly:

/config set theme.spinner mini-dot

Or use the interactive picker:

/spinner

Hub

Settings for running the hub coordinator (muxd-hub).

KeyJSON fieldDescription
hub.auth_tokenhub_auth_tokenBearer token for hub authentication (auto-generated on first hub start)
hub.bind_addresshub_bind_addressHub bind address (default: localhost, use 0.0.0.0 for LAN access)

Mobile

The iOS app has a model picker that fetches its list from the daemon via GET /api/mobile/config. By default it returns a built-in list of Claude and OpenAI models. Override it by adding a mobile_models array directly to ~/.config/muxd/config.json — this key cannot be set via /config set.

{
  "mobile_models": [
    { "id": "zai/glm-5.1", "display": "GLM 5.1", "provider": "Z.AI" },
    { "id": "accounts/fireworks/models/kimi-k2p5", "display": "Kimi k2p5", "provider": "Kimi" },
    { "id": "claude-sonnet-4-6", "display": "Claude Sonnet 4.6", "provider": "Claude" },
    { "id": "gpt-4o", "display": "GPT-4o", "provider": "OpenAI" }
  ]
}

Each entry requires three fields:

FieldDescription
idModel ID sent to the API (e.g. zai/glm-5.1, accounts/fireworks/models/kimi-k2p5)
displayHuman-readable name shown in the iOS picker
providerGroups models under a section header in the picker (e.g. Z.AI, Kimi, Claude, OpenAI)

View the current setting with /config mobile. When mobile_models is not set, the app uses the built-in default list.

Model

KeyJSON fieldDescription
modelmodelDefault model for all sessions
model.compactmodel_compactModel used for smart compaction (defaults to model)
model.consultmodel_consultModel used for /consult second opinion calls. No default.
model.tagsmodel_tagsModel used for tagging (defaults to model)
model.titlemodel_titleModel used for auto-titling sessions (defaults to model)

All five accept full model IDs with or without provider prefix:

/config set model zai/glm-5.1
/config set model.compact zai/glm-5.1
/config set model.consult accounts/fireworks/models/kimi-k2p5
/config set model.title accounts/fireworks/models/gpt-oss-120b
/config set model.tags accounts/fireworks/models/gpt-oss-120b

Or set directly in config.json using the JSON field names.

Node

Settings for registering a daemon as a node with an existing hub.

KeyJSON fieldDescription
hub.node_namehub_node_nameDisplay name for this node in the hub (defaults to hostname)
hub.node_tokenhub_node_tokenToken this daemon uses to authenticate with the hub (same as the hub's hub.auth_token)
hub.urlhub_urlHub URL that this daemon registers with (e.g. http://hub-host:4097)

See the Hub setup guide for the full connection flow.

Providers

Set API keys via /config set or environment variables. Resolution order: environment variable > /config set.

KeyJSON fieldEnv varDescription
anthropic.api_keyanthropic_api_keyANTHROPIC_API_KEYAnthropic API key
brave.api_keybrave_api_keyBRAVE_SEARCH_API_KEYBrave Search API key (for web search tool)
deepinfra.api_keydeepinfra_api_keyDEEPINFRA_API_KEYDeepInfra API key
fireworks.api_keyfireworks_api_keyFIREWORKS_API_KEYFireworks AI API key
google.api_keygoogle_api_keyGOOGLE_API_KEYGoogle AI API key
grok.api_keygrok_api_keyGROK_API_KEYGrok / xAI API key
mistral.api_keymistral_api_keyMISTRAL_API_KEYMistral API key
ollama.urlollama_urlOLLAMA_URLOllama server URL (default: http://localhost:11434)
openai.api_keyopenai_api_keyOPENAI_API_KEYOpenAI API key
textbelt.api_keytextbelt_api_keyTextbelt API key (for SMS tools)
zai.api_keyzai_api_keyZAI_API_KEYZ.AI API key
zai.coding_planzai_coding_planEnable Z.AI coding plan mode (bool)

Or use environment variables directly:

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"

Scheduler

KeyJSON fieldDescription
scheduler.allowed_toolsscheduler_allowed_toolsComma-separated list of tools the scheduler may run

Note: Scheduled agent tasks (created via schedule_task or /schedule add-task) bypass the scheduler.allowed_tools allowlist. The spawned agent enforces its own tool policy at runtime.

SMS

KeyJSON fieldDescription
textbelt.api_keytextbelt_api_keyTextbelt 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.

Tools

KeyJSON fieldDescription
tools.ask_usertools_ask_userEnable/disable the ask_user tool (default: true)
tools.disabledtools_disabledComma-separated list of tools to disable (e.g. bash,file_write)
permissions.modepermissions_modeTool approval mode: ask, accept-edits, or full-auto

Boolean values accept: true/false, on/off, yes/no, 1/0 (case-insensitive).

Permission modes:

  • ask: prompt before bash and file edits (default)
  • accept-edits: auto-approve in-project file edits, still ask for bash
  • full-auto: auto-approve most actions, but still blocks sensitive paths
/permissions ask
/permissions accept-edits
/permissions full-auto

Model Aliases

Use short aliases instead of full model IDs:

AliasResolves to
claude-haikuclaude-haiku-4-5-20251001
claude-opusclaude-opus-4-6
claude-sonnetclaude-sonnet-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:

PrefixProviderExample
anthropic/Anthropicanthropic/claude-sonnet-4-6
deepinfra/DeepInfradeepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct
fireworks/Fireworks AIfireworks/kimi-k2p5
google/Google AIgoogle/gemini-2.0-flash
grok/ or xai/Grok / xAIgrok/grok-3
mistral/Mistralmistral/mistral-large-latest
ollama/Ollama (local)ollama/llama3.3
openai/OpenAIopenai/gpt-4o
zai/, zai-sdk/, or zhipu/Z.AIzai/glm-5.1

The fireworks/ prefix is shorthand — the provider automatically prepends accounts/fireworks/models/. Both fireworks/kimi-k2p5 and accounts/fireworks/models/kimi-k2p5 work.

Auto-Detection

When no prefix is given, muxd detects the provider from the model name:

PatternDetected provider
accounts/fireworks/models/*Fireworks AI
autoglm-*, glm-*Z.AI
claude-*Anthropic
codestral-*, ministral-*, mistral-*, pixtral-*Mistral
gpt-*, o1*, o3*, o4*OpenAI
grok-*Grok / xAI
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 zai/glm-5.1                                                # Z.AI (prefix)
/config set model fireworks/kimi-k2p5                                        # Fireworks (prefix)
/config set model accounts/fireworks/models/kimi-k2p5                       # Fireworks (full path)
/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

ModelInput ($/1M tokens)Output ($/1M tokens)
claude-haiku-4-5-20251001$1.00$5.00
claude-opus-4-6$5.00$25.00
claude-sonnet-4-6$3.00$15.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

PathContents
~/.config/muxd/config.jsonUser preferences and API keys
~/.config/muxd/pricing.jsonCustom pricing overrides
~/.local/share/muxd/muxd.dbSQLite database (sessions and messages)