Skip to main content

Configuration Reference

MushroomAgent's local runtime is configured from ~/.mushroom_agent/config.yaml. mushroom-agent init also writes ~/.mushroom_agent/node.yaml, prompt files, skills/log directories, and a local secrets sidecar referenced by config.yaml.

Configuration is loaded in order:

  1. MUSHROOM_ROOT/config/config.yaml from the project root
  2. ~/.mushroom_agent/config.yaml as the local override

Local settings override fields with the same name. The generated starter keeps local paths implicit: logs, prompt discovery, memory storage, skills, and tool working directories are derived from the local root at runtime.

Generated Files

File or directoryPurpose
config.yamlMain agent, model, tools, channel, voice, eval, and skill config
node.yamlNode identity, remote attachment settings, and builtin device capabilities
local secrets sidecarAPI keys and access keys referenced by config.yaml; do not commit it
prompts/IDENTITY.mdCanonical identity and role
prompts/SOUL.mdPersona and interaction style
prompts/AGENTS.mdOperating rules, project constraints, and boundaries
prompts/APPROACH_GREETING.mdGreeting style for camera approach events
skills/Local user skills
logs/Runtime logs

node.yaml

node.yaml contains node identity, remote connection settings, and builtin audio/video/speech/text capability configuration.

node:
node_id: "auto-generated"
node_name: "MyNode"
remote:
url: "ws://127.0.0.1:7860"
access_key: "mushroom-local-accesskey"
proxy: ""
headers: {}
builtin:
audio_input:
enabled: false
video_input:
enabled: false
speech_output:
enabled: false
text_input:
enabled: false

mushroom-agent start uses node.yaml to attach the current machine as the local node runtime. mushroom-agent node attach uses the same file when a device connects to a remote mushroom-agent serve host.

SectionPurpose
builtin.audio_inputMicrophone input, codec, device selection, local VAD, echo cancellation, noise suppression, debug recording
builtin.video_inputCamera input, device list, frame size, JPEG quality, vision settings, proximity observer, side-face gate
builtin.speech_outputSpeaker or stream output, codec, RTSP/WebSocket output options
builtin.text_inputConsole text input

Camera sizing, JPEG quality, proximity detection, and side-face gate settings live under node.yaml builtin video configuration, not under config.yaml.

agent

agent:
id: "local-agent"
name: "LocalAgent"
max_iterations: 90
FieldDescription
idStable agent identifier
nameDisplay name
max_iterationsMaximum think/action loop iterations
ephemeral_system_promptPer-turn temporary instructions, mainly for delegated sub-agents
skip_context_filesSkip workspace context files such as AGENTS.md, SOUL.md, and IDENTITY.md
quiet_modeSuppress non-essential output for sub-agents or quiet runs

llm

llm:
api_type: "openai"
api_key: "${MUSHROOM_LLM_API_KEY}"
base_url: "https://api.openai.com/v1"
model: "gpt-5.5"
reasoning: "medium"
temperature: 0.2
max_output_tokens: 4096
timeout: 600

Current init wizard text providers are openai, deepseek, and qwen. Voice mode can use OpenAI or Qwen as the main model provider, with OpenAI realtime models handled by realtime_llm.

FieldDescription
api_typeProvider type, for example openai, deepseek, or qwen
api_keyAPI key or secrets-sidecar placeholder
base_urlProvider endpoint
modelModel name
reasoningReasoning effort, such as none, minimal, low, medium, high, or xhigh
temperatureSampling temperature
max_output_tokensMaximum output tokens
timeoutRequest timeout in seconds

See LLM Providers for model/provider details.

embedding

embedding:
api_type: "openai"
api_key: ""
base_url: "https://qwen3-embed.kiwilightyear.com/v1"
model: "Qwen3-Embedding-0.6B"
embed_batch_size: 100
dimensions: 1024

Embeddings are used by memory and retrieval features. Keep the configured vector dimension aligned with the selected embedding model.

server

server:
host: "0.0.0.0"
port: 7860
accesskeys: []

server.accesskeys stores hashed accesskey records and previews. Plaintext accesskeys are printed only when created by mushroom-agent init or mushroom-agent accesskey create.

mcp

mcp:
enabled: false
servers: {}

MCP is disabled by default. Enable it only after adding server definitions under mcp.servers.

tools

Builtin tools are loaded from tools.* configuration. The actual visible tools can be inspected with:

mushroom-agent tools list
SectionDefaultPurpose
skill_manageenabledCreate or update skills in writable skill roots
skill_viewenabledInspect skills from readable roots
readenabledRead text and image files
execenabledRun shell commands
web_fetchenabledFetch URLs and HTTP response content
web_searchenabledSearch the web
image_generationenabledGenerate images through the configured provider
video_generationdisabledGenerate videos through VolcEngine Ark or Google provider settings
video_analyzedisabledAnalyze video through provider settings
audio_analyzedisabledAnalyze audio through provider settings
attach_artifactenabledAttach generated artifacts
processenabledManage longer-running background processes
memory_searchenabledSearch agent memory
memory_add_fileenabledAdd local text/Markdown files to memory
manage_scheduleenabledSchedule management
skip_voice_replydisabledVoice-mode helper to skip spoken reply
emit_ui_commanddisabledEmit UI commands in voice/UI runtimes
update_identity_profileenabled in starterUpdate identity profile data
delegate_taskdisabledSpawn constrained child agents

The current default builtin registry does not register standalone write or api_request tools. Use exec/process for local automation, web_fetch/web_search for web access, and service APIs for external integrations.

channels

channels:
feishu:
enabled: false
app_id: ""
app_secret: ""
verification_token: ""
encrypt_key: ""
discord:
enabled: false
bot_token: ""
openim:
enabled: false
magiccampus:
enabled: false
livekit:
enabled: false

Platform channels adapt external chat or media platforms into MushroomAgent messages. Direct communication transports (http, websocket, func) are selected with mushroom-agent serve --communications rather than this section.

Voice Sections

SectionPurpose
sttSpeech-to-text provider and behavior
rtcRealtime voice mode switch, recording, identity, VAD, interruptions
ttsText-to-speech provider and voice output settings
realtime_llmRealtime LLM model and API key for realtime voice
rtc:
enabled: false
identity_enabled: false
voice_mode: "realtime"
vad_mode: "vad"
allow_interruptions: true

realtime_llm:
model: "gpt-realtime-2"
api_key: "YOUR_REALTIME_API_KEY"

When rtc.enabled=false, normal mushroom-agent serve --ui and text WebSocket chat do not require TTS or realtime LLM credentials.

skills

skills:
enabled: true
roots: []
include_defaults: true
include_bundled: true
explicit_only: false
FieldDescription
enabledEnable skill discovery and injection
rootsAdditional skill root directories
include_defaultsInclude the default local skills root
include_bundledInclude bundled official skills
explicit_onlyOnly load skills explicitly requested by the user/task

self_improvement

self_improvement:
enabled: false
skill:
enabled: true
post_turn_nudge: true
skill_curator:
enabled: true

Self-improvement features are disabled by default. Enable them only when you want the agent to suggest, review, or curate skills over time.

dev.eval

dev:
eval:
enabled: true
max_concurrency: 1
keep_runs: 20
default_enable_judge: false
case_timeout: 120

This controls the Eval Panel at /i/dev/eval. See Eval Panel for usage and token-cost guidance.

Updating Config Safely

  • Prefer mushroom-agent init for first-time generation.
  • Use mushroom-agent init --force only when you intentionally want to overwrite generated files.
  • Do not commit local secrets sidecars.
  • For remote devices, create accesskeys with mushroom-agent accesskey create and store the plaintext immediately.
  • Treat mushroom-cli/mushroom_cli/configs/local-config.template.yaml, local-node.template.yaml, and local-builtin.template.yaml in the framework repository as the source of truth for generated defaults.