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
.agentsView on GitHub (pinned to 339751715c)
Solutions
- Raise `default_wait_timeout_ms` to at least `min_wait_timeout_ms`.
- Or lower `min_wait_timeout_ms`.
- 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
- Keep default inside [min, max] whenever editing any of the three
- Assert the full ordering min<=default<=max in config generation
- Review timeout triples as one unit so reviewers catch drift
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
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- features.multi_agent_v2.min_wait_timeout_ms must be at most
- features.multi_agent_v2.default_wait_timeout_ms must be at m
- features.multi_agent_v2.max_concurrent_threads_per_session m
- Environment variable {env_var} for MCP server '{server_name}
- Invalid MCP server name '{server_name}': must match pattern
AI-assisted analysis of openai/codex@339751715c (2026-08-25).
Data as JSON: /api/errors/ff8e05d90f15b0bb.
Report an issue: GitHub.