openai/codex · error · std::io::Error

features.multi_agent_v2.default_wait_timeout_ms must be at l

Error message

features.multi_agent_v2.default_wait_timeout_ms must be at least features.multi_agent_v2.min_wait_timeout_ms

What it means

Config requires default_wait_timeout_ms to lie within [min_wait_timeout_ms, max_wait_timeout_ms]. The lower-bound check fires when default < min: the default wait would violate the configured minimum, so Config::load fails with InvalidInput rather than silently clamping.

Source

Thrown at codex-rs/core/src/config/mod.rs:3734

            "features.multi_agent_v2.min_wait_timeout_ms",
            multi_agent_v2.min_wait_timeout_ms,
        )?;
        validate_multi_agent_v2_wait_timeout(
            "features.multi_agent_v2.max_wait_timeout_ms",
            multi_agent_v2.max_wait_timeout_ms,
        )?;
        validate_multi_agent_v2_wait_timeout(
            "features.multi_agent_v2.default_wait_timeout_ms",
            multi_agent_v2.default_wait_timeout_ms,
        )?;
        if multi_agent_v2.min_wait_timeout_ms > multi_agent_v2.max_wait_timeout_ms {
            return Err(std::io::Error::new(
                std::io::ErrorKind::InvalidInput,
                "features.multi_agent_v2.min_wait_timeout_ms must be at most features.multi_agent_v2.max_wait_timeout_ms",
            ));
        }
        if multi_agent_v2.default_wait_timeout_ms < multi_agent_v2.min_wait_timeout_ms {
            return Err(std::io::Error::new(
                std::io::ErrorKind::InvalidInput,
                "features.multi_agent_v2.default_wait_timeout_ms must be at least features.multi_agent_v2.min_wait_timeout_ms",
            ));
        }
        if multi_agent_v2.default_wait_timeout_ms > multi_agent_v2.max_wait_timeout_ms {
            return Err(std::io::Error::new(
                std::io::ErrorKind::InvalidInput,
                "features.multi_agent_v2.default_wait_timeout_ms must be at most features.multi_agent_v2.max_wait_timeout_ms",
            ));
        }
        validate_multi_agent_v2_tool_namespace(multi_agent_v2.tool_namespace.as_deref())?;
        let agents_enabled = cfg
            .agents
            .as_ref()
            .and_then(|agents| agents.enabled)
            .unwrap_or(true);
        let agent_max_threads = cfg
            .agents

View on GitHub (pinned to 339751715c)

Solutions

  1. Raise `default_wait_timeout_ms` to at least `min_wait_timeout_ms`.
  2. Or lower `min_wait_timeout_ms`.
  3. Or remove `default_wait_timeout_ms` so the built-in default applies.

Example fix

# before
[features.multi_agent_v2]
default_wait_timeout_ms = 1000
min_wait_timeout_ms = 5000

# after
[features.multi_agent_v2]
default_wait_timeout_ms = 5000
min_wait_timeout_ms = 5000
Defensive patterns

Strategy: validation

Validate before calling

import tomllib
ma = tomllib.load(open("config.toml", "rb")).get("features", {}).get("multi_agent_v2", {})
d, mn = ma.get("default_wait_timeout_ms"), ma.get("min_wait_timeout_ms")
assert d is None or mn is None or d >= mn, "default_wait_timeout_ms must be >= min_wait_timeout_ms"

Try / catch

match config_result {
    Err(ref e) if e.kind() == std::io::ErrorKind::InvalidInput
        && e.to_string().contains("default_wait_timeout_ms must be at least") => {
        // raise the default or lower the min, then retry
    }
    other => other,
}

Prevention

When it happens

Trigger: Any layer combination where default_wait_timeout_ms resolves below min_wait_timeout_ms (e.g. default = 1000, min = 5000). Runs after the min<=max check, so the range itself is already consistent.

Common situations: Raising the min for slow agents but keeping an old default; layered configs where different owners set the default and the min.

Understand the failure class

Related errors


AI-assisted analysis of openai/codex@339751715c (2026-08-25). Data as JSON: /api/errors/ff8e05d90f15b0bb. Report an issue: GitHub.