Skip to content

CrossVendorAudit runs codex at reasoning effort "none" under the isolated CODEX_HOME #2276

Closed

Description

@christauff

Thanks for the isolated CODEX_HOME in CrossVendorAudit.ts. Keeping a LifeOS-for-Codex persona out of the audit fixed a real problem here. It has one side effect I ran into, reported in case it helps.

What happens

buildIsolatedCodexHome() creates a fresh home containing only auth.json. Without a config.toml, nothing sets a reasoning effort, and the exec args at LifeOS/install/LIFEOS/TOOLS/CrossVendorAudit.ts:413 don't pass one. On codex-cli 0.159.3, codex then runs the audit at no reasoning effort. Its own session header says so:

model: gpt-5.6-sol
provider: openai
reasoning effort: none

So the cross-vendor pass that is supposed to catch what the Claude reviewers missed runs as a no-reasoning call.

Repro

H=$(mktemp -d); ln -s ~/.codex/auth.json "$H/auth.json"
echo "Reply with the single word ok." | CODEX_HOME="$H" codex exec \
  --sandbox read-only --skip-git-repo-check --ephemeral --model gpt-5.6-sol - 2>&1 | grep -i "reasoning effort"
# -> reasoning effort: none

With -c 'model_reasoning_effort="high"' added, the same command prints reasoning effort: high.

Suggested fix

Pass the effort explicitly in invokeCodex(), since the isolated home will never carry a config:

["exec", "--sandbox", "read-only", "--skip-git-repo-check", "--ephemeral",
 "-c", 'model_reasoning_effort="high"',
 "--output-schema", schemaPath, "--model", CROSS_VENDOR.forge, "-"]

I'm running that locally, and an end-to-end audit through the tool now reports high.

Optional: also record what codex's header says in the verdict. The model's self-reported model_used came back as "gpt-5" while the header said gpt-5.6-sol, so the header is the reliable source. Locally I parse ^model: and ^reasoning effort: from codex's stdout/stderr into codex_model / codex_effort and log both to cato-findings.jsonl. Then an audit that ran without reasoning shows up in the record instead of passing silently.

Happy to adjust if you'd rather set this in models.ts alongside the model ID.

Activity

  1. danielmiessler commented on Oct 3, 2026

    @danielmiessler
    Owner

    Thanks @christauff, the session-header repro made this clear. The isolated home has no config.toml, so the audit now passes model_reasoning_effort on the codex exec command line instead of inheriting nothing (LIFEOS/TOOLS/CrossVendorAudit.ts). It's pinned to the effort our audit lane is documented to run at, and a test checks the flag is there. Next release carries it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions