1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# OpenAI Codex. Ships inside the ChatGPT desktop app on macOS, or standalone.
#
# Note: `codex exec review` is deliberately not used. It refuses a custom prompt
# alongside --base and returns prose regardless of --output-schema, so it cannot
# produce a machine-checkable verdict.
= [
"codex", "exec", "--json", "--skip-git-repo-check",
["-s", "workspace-write"],
["-m", "{model}"],
["-c", "model_reasoning_effort={effort}"],
["-C", "{cwd}"],
["--output-schema", "{schema_file}"],
"--", "{prompt}",
]
= "jsonl"
= "item.text"
# ChatGPT 26.924 moved the CLI into codex-cli/bin. The older location stays for
# anybody who has not updated the app yet.
= [
"/Applications/ChatGPT.app/Contents/Resources/codex-cli/bin",
"/Applications/ChatGPT.app/Contents/Resources",
"~/.codex/bin",
"/opt/homebrew/bin",
"/usr/local/bin",
"~/.local/bin",
]
# Hints for `spar init`. Never validated against, only written as comments.
#
# Codex enumerates neither set in its help. The effort list is its own enum,
# read out of the binary, in its own order except that high goes first so it is
# what `spar init` suggests. The models were read out of the binary
# too, and that is what made this list incomplete: gpt-5.3-codex-spark is not a
# string in the binary at all. It arrives in the model list the server hands the
# CLI, cached at ~/.codex/models_cache.json, which is the better place to look.
# Which models an account may actually call is a separate question again from
# which ones exist, so treat the list as a starting point rather than a promise.
#
# Spark is last because it is not a peer of the rest. It is a generation older,
# ultra-fast, 128k of context against 272k, text only, and no priority tier. It
# is here because it bills against its own quota allowance rather than the
# general one, which makes it the one entry on this list worth naming under
# [agents.codex.fallback]: a stand in for a weekly limit has to draw on a
# different pool than the model that just hit it.
= ["gpt-6.1-sol", "gpt-6-astra", "gpt-6-sol", "gpt-6-luna", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-5.6-pro", "gpt-5.5", "gpt-5.3-codex-spark"]
= ["high", "ultra", "max", "xhigh", "medium", "low", "minimal", "none"]
= "Codex lists neither set in its help. ~/.codex/models_cache.json is what your account is currently offered, and effort is passed through as -c model_reasoning_effort=..."
[]
= "item.completed"
= "agent_message"