alibaba/open-code-review · error

unknown config key: %s Supported keys: %s Provider fields: a

Error message

unknown config key: %s
Supported keys: %s
Provider fields: api_key, api_key_cmd, url, protocol, model, models, auth_header, extra_body, extra_headers, retry_codes, aws_region, aws_profile
Protocol values: anthropic, anthropic-bedrock, openai, openai-responses
MCP server fields

What it means

setConfigValue only accepts a fixed set of top-level keys (enumerated in supportedConfigKeys, which the error message prints). Any key outside the providers./custom_providers./mcp_servers. prefixes and the known switch cases produces this error listing all supported keys and provider fields.

Source

Thrown at cmd/opencodereview/config_cmd.go:605

		cfg.ensureTelemetry()
		cfg.Telemetry.ContentLog = b
	case "llm.extra_body", "llm.ExtraBody":
		var m map[string]any
		if err := json.Unmarshal([]byte(value), &m); err != nil {
			return fmt.Errorf("invalid JSON for llm.extra_body: %w", err)
		}
		cfg.Llm.ExtraBody = m
	case "llm.retry_codes", "llm.RetryCodes":
		codes, warnings, err := llm.ParseRetryCodes(value)
		if err != nil {
			return err
		}
		for _, w := range warnings {
			fmt.Fprintf(os.Stderr, "[ocr] WARNING: %s\n", w)
		}
		cfg.Llm.RetryCodes = codes
	default:
		return fmt.Errorf("unknown config key: %s\nSupported keys: %s\nProvider fields: api_key, api_key_cmd, url, protocol, model, models, auth_header, extra_body, extra_headers, retry_codes, aws_region, aws_profile\nProtocol values: anthropic, anthropic-bedrock, openai, openai-responses\nMCP server fields: type, command, args, env, url, headers, tools, setup", key, strings.Join(supportedConfigKeys, ", "))
	}
	return nil
}

func applyProviderField(providerName string, entry *ProviderEntry, field, key, value string) error {
	switch field {
	case "api_key":
		entry.APIKey = value
	case "api_key_cmd":
		entry.APIKeyCmd = value
	case "url":
		trimmedURL := strings.TrimSpace(value)
		if trimmedURL != "" {
			if err := validateBaseURL(trimmedURL); err != nil {
				return fmt.Errorf("invalid URL for %s: %w", key, err)
			}
		}
		entry.URL = trimmedURL

View on GitHub (pinned to 5cf97d0d15)

Solutions

  1. Copy a supported key exactly from the error's "Supported keys" list
  2. For provider settings use the dotted form: `ocr config set providers.<name>.api_key <key>`
  3. Run `ocr config get` (or view the config file) to see keys your config actually uses
  4. If a key was renamed in an upgrade, check the release notes and migrate to the new name

Example fix

// before
ocr config set api_key sk-...
// after
ocr config set providers.openai.api_key sk-...
Defensive patterns

Strategy: validation

Validate before calling

var supported = map[string]bool{"provider":true,"model":true,"max_tokens":true,"effort":true,"language":true,
  "llm.url":true,"llm.auth_token":true,"llm.auth_token_cmd":true,"llm.auth_header":true,"llm.model":true,
  "llm.protocol":true,"llm.use_anthropic":true,"llm.extra_body":true,"llm.extra_headers":true,"llm.retry_codes":true,
  "telemetry.enabled":true,"telemetry.exporter":true,"telemetry.otlp_endpoint":true,"telemetry.content_logging":true}
if !supported[key] && !strings.HasPrefix(key, "providers.") &&
   !strings.HasPrefix(key, "custom_providers.") && !strings.HasPrefix(key, "mcp_servers.") {
    return fmt.Errorf("unsupported key %q; see error message for the full list", key)
}
_ = runConfigSet(key, value)

Try / catch

if err := runConfigSet(key, value); err != nil {
    if strings.Contains(err.Error(), "unknown config key") {
        fmt.Fprintln(os.Stderr, err) // message already lists every supported key
    }
}

Prevention

When it happens

Trigger: `ocr config set <key> <value>` with a typo'd or nonexistent key, a deprecated key removed in a newer version, or a provider field applied at the top level instead of under providers.<name>.<field>.

Common situations: Typos like `maxtoken` or `telemetry_enable`; applying `api_key` directly instead of `providers.<name>.api_key`; old tutorial commands referencing renamed keys; forgetting the `llm.` or `telemetry.` prefix.

Related errors


AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02). Data as JSON: /api/errors/b1b900c4ef95a466. Report an issue: GitHub.