GC
User Guide / ConfigurationMenu
5 min read·Updated 2026-04-10

Configuration

Configuration is a stack of JSON files on a mounted volume. One file per concern. The dashboard is the normal editor.

Mental model

Configuration lives in three layers. The dashboard edits almost all of it; understanding the storage model matters only when you operate on disk, debug persistence, or script deployments.

The reader should picture configuration as a stack of JSON files on a mounted volume, each owning one runtime concern. Nothing is stored in a central database. Nothing is stored in the image. Restarting the container without the volume wipes everything except what is baked into the image.

Three layers

Workspace storage

The mounted volume at STORAGE_PATH. Holds sessions, preferences, skills, memory, traces, artifacts. The only place persistent state lives.

Disk

Runtime sections

Separate JSON files under preferences/ — llm-providers, model-router, tools, memory, skills, mcp, voice, hive, webhooks. Each owns one concern.

Runtime

User preferences

Operator-facing settings surface. The dashboard reads and writes the JSON files directly. Changes take effect without restart unless noted.

UI

Runtime sections

Runtime sections are separate files on purpose. A single giant config blob would force readers through everything to change one setting, complicate merge conflicts, and make diff review painful. Splitting by concern keeps changes scoped and inspectable.

Typical preferences/ layout
text
workspace/
└── preferences/
    ├── llm-providers.json      # API keys, provider type
    ├── model-router.json       # Tier mappings
    ├── tools.json              # Filesystem, shell, limits
    ├── memory.json             # Recall, promotion, disclosure
    ├── skills.json             # Skill management flags
    ├── mcp.json                # MCP global flag and timeouts
    ├── voice.json              # TTS/STT providers
    ├── hive.json               # Hive integration
    ├── webhooks.json           # Webhook endpoints and secret
    └── admin.json              # Admin account

Persistence and volume strategy

Without a mounted volume, every container restart wipes sessions, settings, admin credentials, skills, memory, and traces. Always mount a persistent volume in production.

Persist workspace and sandbox volumes
bash
docker run -d \
  -e STORAGE_PATH=/app/workspace \
  -e TOOLS_WORKSPACE=/app/sandbox \
  -v golemcore-bot-data:/app/workspace \
  -v golemcore-bot-sandbox:/app/sandbox \
  -p 8080:8080 \
  ghcr.io/alexk-dev/golemcore-bot:latest
Verify the volume is mounted
bash
docker inspect golemcore-bot --format '{{ range .Mounts }}{{ .Source }} → {{ .Destination }}{{ "\n" }}{{ end }}'
Example output
text
/var/lib/docker/volumes/golemcore-bot-data/_data → /app/workspace
/var/lib/docker/volumes/golemcore-bot-sandbox/_data → /app/sandbox

What to do next