multica-ai/multica · error

unknown config key %q (supported: %s)

Error message

unknown config key %q (supported: %s)

What it means

applyConfigSet is a closed switch over the supported config keys (server_url, app_url, workspace_id, device_name, runtime_name, workspaces_root, max_concurrent_tasks, poll_interval, heartbeat_interval, agent_timeout, codex_* timeouts, disable_* toggles, auto_update_check_interval, disable_auto_reload). Any other key hits the default branch; the message lists the supported set via joinKeys(configSetSupportedKeys).

Source

Thrown at server/cmd/multica/cmd_config.go:252

		}
	case "codex_handshake_timeout":
		if err := assignPositiveDuration(&cfg.CodexHandshakeTimeout, key, value); err != nil {
			return err
		}
	case "disable_auto_update":
		if err := assignBool(&cfg.DisableAutoUpdate, key, value); err != nil {
			return err
		}
	case "auto_update_check_interval":
		if err := assignPositiveDuration(&cfg.AutoUpdateCheckInterval, key, value); err != nil {
			return err
		}
	case "disable_auto_reload":
		if err := assignBool(&cfg.DisableAutoReload, key, value); err != nil {
			return err
		}
	default:
		return fmt.Errorf("unknown config key %q (supported: %s)", key, joinKeys(configSetSupportedKeys))
	}
	return nil
}

// assignBool parses value as a strict bool into dst. Shared by the
// disable_* toggles. Empty string clears the field (false).
func assignBool(dst *bool, key, value string) error {
	if value == "" {
		*dst = false
		return nil
	}
	b, err := strconv.ParseBool(value)
	if err != nil {
		return fmt.Errorf("%s must be 'true' or 'false' (got %q)", key, value)
	}
	*dst = b
	return nil
}

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Read the supported list in the error message and use the exact key (keys are snake_case).
  2. Check `multica config show` to see current keys and `config set --help` for the authoritative list.
  3. If the key should exist, upgrade the CLI binary — you may be on an older version.

Example fix

# before
multica config set poll-interval 30s
# after
multica config set poll_interval 30s
Defensive patterns

Strategy: validation

Validate before calling

# validate the key against the supported set before setting
SUPPORTED="server_url app_url workspace_id device_name runtime_name workspaces_root max_concurrent_tasks poll_interval heartbeat_interval agent_timeout codex_semantic_inactivity_timeout codex_handshake_timeout disable_auto_update auto_update_check_interval disable_auto_reload"
echo "$SUPPORTED" | tr ' ' '\n' | grep -qx "$KEY" || { echo "unsupported key: $KEY" >&2; exit 2; }
multica config set "$KEY" "$VAL"

Prevention

When it happens

Trigger: `multica config set timeout 30s` (key renamed to agent_timeout), `... poll-interval` (dash vs underscore), or a key from a newer/older CLI version than the running binary supports.

Common situations: Following outdated docs or a teammate's notes; version skew between the CLI binary and documentation; muscle-memory abbreviations of key names.

Related errors


AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15). Data as JSON: /api/errors/8f053a7e5e7010fb. Report an issue: GitHub.