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 = trimmedURLView on GitHub (pinned to 5cf97d0d15)
Solutions
- Copy a supported key exactly from the error's "Supported keys" list
- For provider settings use the dotted form: `ocr config set providers.<name>.api_key <key>`
- Run `ocr config get` (or view the config file) to see keys your config actually uses
- 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
- Copy key names from the error's Supported keys list, don't type from memory
- Provider settings need the dotted form providers.<name>.<field>
- Check release notes after upgrading ocr for renamed keys
- Use `ocr config get` to inspect existing keys before adding new ones
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
- invalid max_tokens %q: must be a positive integer
- invalid URL for %s: %w
- invalid model list for %s: %w
- invalid retry codes for %s: %w
- invalid %s for %s: %q contains whitespace
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/b1b900c4ef95a466.
Report an issue: GitHub.