openai/codex · error
runner: empty capability SID list
Error message
runner: empty capability SID list
What it means
Error "runner: empty capability SID list" thrown in openai/codex.
Source
Thrown at codex-rs/windows-sandbox-rs/src/bin/command_runner/win.rs:252
fn spawn_ipc_process(req: &SpawnRequest) -> Result<IpcSpawnedProcess> {
let log_dir = req.codex_home.clone();
hide_current_user_profile_dir(req.codex_home.as_path());
let token_mode = token_mode_for_permission_profile(
&req.permission_profile,
&req.workspace_roots,
&req.cwd,
&req.env,
)
.context("resolve permission profile token mode")?;
let mut cap_psids: Vec<LocalSid> = Vec::new();
for sid in &req.cap_sids {
cap_psids.push(
LocalSid::from_string(sid)
.context("ConvertStringSidToSidW failed for capability SID")?,
);
}
if cap_psids.is_empty() {
anyhow::bail!("runner: empty capability SID list");
}
let network_proxy_restricting_sid = req
.network_proxy_restricting_sid
.as_deref()
.map(LocalSid::from_string)
.transpose()
.context("ConvertStringSidToSidW failed for network proxy restricting SID")?;
// The token helpers still take raw SID pointers, but we keep ownership in `LocalSid`
// wrappers for as long as possible. That way any failure after SID parsing but before the
// child is fully spawned still releases the backing LocalAlloc memory automatically.
let cap_psid_ptrs: Vec<*mut _> = cap_psids.iter().map(LocalSid::as_ptr).collect();
let additional_restricting_sid_ptrs: Vec<*mut _> = network_proxy_restricting_sid
.iter()
.map(LocalSid::as_ptr)
.collect();
let base = OwnedWinHandle::new(unsafe { get_current_token_for_restriction()? });
let h_token = OwnedWinHandle::new(unsafe {View on GitHub (pinned to 339751715c)
When it happens
Trigger: Thrown at codex-rs/windows-sandbox-rs/src/bin/command_runner/win.rs:252 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of openai/codex@339751715c (2026-08-25).
Data as JSON: /api/errors/70e0e637c27f3a24.
Report an issue: GitHub.