OpenAI Codex: who decides what
How to read this page
A seat is a judgment the agent makes over and over: which model runs, what the model sees, may this command run, is the work done. Each card records the question, how it is answered, and who or what holds it, with the code that implements or exposes that decision. Seat ids (A1, D12 …) are links.
Each answer describes what Codex does by default at the commit named above. Exceptions named are the main ones, not a complete list.
The chip on each card has two words. The first is about the question: a RULE has one right answer given its inputs, so a run that answers differently is a bug; a RULING is one that competent people could answer differently. Enforcing a limit someone set is a RULE; choosing what to keep, what to trust or how long to wait is a RULING, even when code holds it.
The second word is who holds it: llm = a language-model call; model = another learned model (here, image generation); code = code in their repository; human = a person; external = a service outside the repository.
Paths are relative to codex-rs/ unless they say otherwise. A bare :120-140 means lines in the file named just before it.
Counts
165 seats across 9 stages: A 14, B 33, C 11, D 38, E 23, F 14, G 7, H 14, I 11.
| Kind of question · holder | Seats |
|---|---|
| RULE · code | 77 |
| RULING · code | 44 |
| RULING · llm | 20 |
| RULING · human | 13 |
| RULING · external | 10 |
| RULING · model | 1 |
What this edition does not have
There is no list of gaps. No coverage figure: this edition does not say how many of Codex's model calls and decision points the seats leave out. Each card shows the question, the answer and its holder; for most seats we also recorded what checks the judgment and how it has failed, but those notes are not shown here. One seat from our earlier reading of the code no longer exists at this commit and is not counted.
What is left out of this edition
8 of the 165 cards are left out of this edition. The counts above include them.
A. Intake and routing
A1 Does this submitted input start a new turn, steer the running one, or get refused? RULE · code
- Answered how
Code:
start_or_steerhands inter-agent communication input toagent::submit(codex-rs/core/src/session/turn_input.rs:368-373); for other input it first tries to append the input to the active turn (steer_input); only onNoActiveTurndoes it admit and spawn a newRegularTask; any other refusal reason is returned asNotSubmitted(codex-rs/core/src/session/turn_input.rs:414-491).- Held by
codex-rs/core/src/session/turn_input.rs:363
A2 Can the running turn accept steered input at all? RULE · code
- Answered how
Code:
steer_inputrefuses when the active task is a Review or Compact task, when the caller's expected turn id differs, when the input is empty, or when the caller requires a different final-output JSON schema than the running turn has (codex-rs/core/src/session/turn_input.rs:908-941).- Held by
codex-rs/core/src/session/turn_input.rs:917
A3 May automatic (non-user) work start a turn, given Plan mode? RULE · code
- Answered how
Code: automatic starts (mailbox, response-item continuations) are refused if the current or proposed collaboration mode is Plan; user and recovery starts are always permitted (
codex-rs/core/src/session/turn_input.rs:79-94, checked again before reservation atcodex-rs/core/src/session/turn_input.rs:525-531).- Held by
codex-rs/core/src/session/turn_input.rs:82
A4 Is the host admitting new turns right now, and which inputs bypass a drain? RULE · code
- Answered how
Code: every new turn takes an admission token from the extension host (
admit_turn_start); during a drain the input is refused asServerDraining, except explicit input delegated by a parent to a thread-spawned sub-agent (codex-rs/core/src/session/turn_input.rs:436-455) and a one-shot review delegate finishing its parent's work (codex-rs/core/src/session/turn_input.rs:533-552).- Held by
codex-rs/core/src/session/turn_input.rs:449
A5 Does pending inter-agent mail that asks for a turn take precedence over an idle start? RULE · code
- Answered how
Code: before (and again after) reserving an idle turn,
start_if_idlerefuses withPendingTriggerTurnif the mailbox holds trigger-turn items, and hands the start to the pending-work scheduler instead (codex-rs/core/src/session/turn_input.rs:518-522,572-578).- Held by
codex-rs/core/src/session/turn_input.rs:518
A6 Does a user ! shell command run inside the active turn or as its own task? RULE · code
- Answered how
Code: if a turn is active the command runs as an auxiliary of that turn (
UserShellCommandMode::ActiveTurnAuxiliary) on a spawned task; otherwise a fresh turn context with default settings runs aUserShellCommandTask(codex-rs/core/src/session/handlers.rs:109-135).- Held by
codex-rs/core/src/session/handlers.rs:110
A7 What is a review asked to look at (which target becomes which reviewer prompt)? RULE · code
- Answered how
Code:
review_promptmaps the target to the reviewer's instruction text: uncommitted changes, base branch and commit each get a fixed built-in prompt (a commit's title is embedded when supplied), while a custom target's own text, trimmed, IS the prompt; for a base branch it computes the merge base and embeds the SHA, falling back to a prompt that tells the reviewer to compute it with git when none is found (codex-rs/prompts/src/review_request.rs:18-40, 59-99).- Held by
codex-rs/prompts/src/review_request.rs:59
A8 Which model runs when the session names none, or names one the provider does not offer? RULING · external
- Answered how
External with code: with no model given, code takes the catalog entry flagged
is_default, else the first entry (codex-rs/models-manager/src/manager.rs:951-958); when provider fallback is allowed, a requested model absent from the catalog is replaced by that default (codex-rs/models-manager/src/manager.rs:900-907). The catalog itself comes from the provider's models endpoint or the bundledmodels.json.- Held by
codex-rs/models-manager/src/manager.rs:951
A9 Which model metadata (base prompt, context window, tool types) applies to this model name? RULING · code
- Answered how
Code: the longest catalog slug that is a prefix of the requested name wins; if none matches, one leading
namespace/segment is stripped and the match retried; if still none, a hard-coded fallback descriptor is used (272,000-token window, bundled base prompt, unified-exec shell) (codex-rs/models-manager/src/manager.rs:1008-1042,codex-rs/models-manager/src/model_info.rs:98-148).- Held by
codex-rs/models-manager/src/manager.rs:1022
A10 What reasoning effort does this request carry? RULE · code
- Answered how
Code: the selected effort (collaboration mode setting, else the model default) is sent unchanged unless the model client has reasoning-effort overrides enabled for that model; only then is it resolved against the model (
Ultramaps to the model's multi-agent effort when that is a supported non-Ultra level, elseMaxif supported, else the last non-Ultra supported level, elseMedium;Persistentbecomesdisabled) and pinned per context window so sampling and compaction share it (codex-rs/core/src/session/reasoning_effort.rs:94-157;codex-rs/protocol/src/openai_models/reasoning_effort.rs:10-40).- Held by
codex-rs/core/src/session/reasoning_effort.rs:94
A11 May the session's requested settings (model, approval policy, reviewer) be accepted under managed requirements? RULE · code
- Answered how
Code:
StepSettings::applychecks each requested change against the managedConfigRequirements; changing the model to one that requires auto-review forces theAutoReviewreviewer unless the caller chose one;validaterefuses a model that requires auto-review when the guardian is off or the turn has full-disk write access (codex-rs/core/src/session/step_settings.rs:253-337).- Held by
codex-rs/core/src/session/step_settings.rs:253
A12 May a running turn switch model or settings mid-turn without changing its safety posture? RULE · code
- Answered how
Code: only for an update that touches model settings (model, effort, summary, service tier) or that names neither a reviewer nor environments, and only with the
step_model_switchingfeature on (otherwise the update is rejected outright),check_legacy_turn_safetyrefuses a destination that changes the admitted approval policy, the model-required review authority or the prefix-rule policy, or (viacheck_legacy_model_safety) uses fallback model metadata or changes the Cyber classification, node-REPL review requirement or availability, Guardian coverage, the explicit reviewer model, the Guardian V2 classification settings, or (with no reviewer override) the Guardian parent-fallback policies (codex-rs/core/src/session/step_activation.rs:32-221, called at:365-372insideapply_turn_settings, gate at:243-250). The authors label these checks temporary: 'Remove these restrictions as their consumers migrate to captured step settings' (:29-31).- Held by
codex-rs/core/src/session/step_activation.rs:32
A13 Which execution environment(s) does this turn run in, and which is primary? RULE · code
- Answered how
Code:
update_selectionskeeps the first selection for each environment id, reuses a still-healthy previous environment with the same workspace, restarts failed ones, and silently skips ids the environment manager does not know; the first resolved selection is primary (codex-rs/core/src/environment_selection.rs:484-486,:540-697,:1338). Request-boundary validation refuses unknown or duplicate ids and over-long cwds (codex-rs/core/src/environment_selection.rs:138-161).- Held by
codex-rs/core/src/environment_selection.rs:484
A14 Does a spoken request in a realtime voice session go to the coding agent? RULING · llm
- Answered how
The hosted realtime voice model decides, by calling its
background_agentfunction; code accepts only afunction_callitem with that name, takes the transcript from known argument keys (else the raw arguments string), wraps it and submits it as a user turn with triggerrealtimethroughStartOrSteer(codex-rs/codex-api/src/endpoint/realtime_websocket/protocol_v2.rs:142-166,:191-210;codex-rs/core/src/realtime_conversation.rs:1843-1854;codex-rs/core/src/session/turn_input.rs:816-834).- Held by
codex-rs/codex-api/src/endpoint/realtime_websocket/protocol_v2.rs:142
B. Context: what the model sees
B1 Which base instructions does the model get for this window? RULE · code
- Answered how
Code: the model catalog entry's
instructions_template(or the configbase_instructionsoverride,codex-rs/models-manager/src/model_info.rs:46-48) is rendered byrender_model_instructions; in incremental-tools windows custom base instructions are used as given (codex-rs/core/src/session/world_state.rs:97-136).- Held by
codex-rs/core/src/session/world_state.rs:81
B2 Does the base prompt keep its update_plan guidance? RULE · code
- Answered how
Code: when the
update_plantool is off, no custom model catalog is set, and the instructions are Codex-owned (an incremental-tools window, no configbase_instructions, or base instructions whose provenance is the model),without_update_plan_instructionsdeletes sections whose heading is exactly## Planning(only if a line in it starts with one of two fixed sentences about the tool),## `update_plan`,## Plan toolor## Plan Mode vs update_plan tool, plus a two-lineProgress visibility:block and two bullet patterns with their indented continuations (codex-rs/prompts/src/update_plan_instructions.rs:4-58; triggercodex-rs/core/src/session/world_state.rs:81-96).- Held by
codex-rs/prompts/src/update_plan_instructions.rs:4
B3 Does the base prompt keep its # Personality section? RULE · code
- Answered how
Code: when the personality setting is
None,strip_personality_sectionremoves the text from a line exactly# Personalityto the next H1 heading (codex-rs/models-manager/src/model_info.rs:49-56,:61-88).- Held by
codex-rs/models-manager/src/model_info.rs:61
B4 Is the model told that the model serving it changed? RULE · code
- Answered how
Code: in ordinary windows, when the previous model (the saved snapshot, else the previous turn's model) differs from the current one AND the new model's instructions are non-empty, the model section emits a
ModelSwitchInstructionsfragment carrying them; a switch to a model with empty instructions produces no notice. In incremental-tools windows it emits aModelInstructionsupdate naming the new model (unless theSuppressModelChangeAnnouncementsfeature is on,codex-rs/core/src/session/world_state.rs:106-109) and/or carrying changed instructions, and re-asserts the full base instructions when no prior snapshot is known. The initial-context builder puts a model-switch fragment first among developer sections (codex-rs/core/src/context/world_state/model.rs:38-143;codex-rs/core/src/session/mod.rs:4950-4956).- Held by
codex-rs/core/src/context/world_state/model.rs:119
B5 Does the model need to be re-told a context section this step (known, unknown, or absent before)? RULE · code
- Answered how
Code: for each world-state section,
render_history_diffdecides what the model already saw: a persisted snapshot counts as Known unless the section requires its fragment to survive in history and it no longer does; with no snapshot, a text match of a legacy fragment in history counts as Unknown; otherwise Absent. Each section then renders only its change (codex-rs/core/src/context/world_state/mod.rs:534-577). The baseline is cleared on compaction, history replacement and front-trimming (codex-rs/core/src/context_manager/history.rs:737,:760,:801).- Held by
codex-rs/core/src/context/world_state/mod.rs:534
B6 Are a project's AGENTS.md files read at all for this project? RULE · code
- Answered how
Code: if the active project is untrusted, project AGENTS.md discovery is skipped and only host-supplied user instructions remain (
codex-rs/core/src/agents_md.rs:64-66); the cached snapshot is dropped when the trust level or environment selection changes (codex-rs/core/src/agents_md_manager.rs:89-95).- Held by
codex-rs/core/src/agents_md.rs:64
B7 Which AGENTS.md files are found for this working directory? RULE · code
- Answered how
Code: walk up from the cwd to the nearest directory with a project-root marker (default
.git; project-scoped config layers are not allowed to set the markers), then in each directory from root down to cwd take the FIRST existing candidate amongAGENTS.override.md,AGENTS.md, then configured fallback names; files below the cwd and above the root are never read (codex-rs/core/src/agents_md.rs:192-296).- Held by
codex-rs/core/src/agents_md.rs:192
B8 How much of the AGENTS.md text reaches the model, and which file is cut? RULING · code
- Answered how
Code: one shared byte budget (
project_doc_max_bytes, default 32 KiB,codex-rs/core/src/config/mod.rs:259,:4607) is spent in discovery order, root first and cwd last, across all environments; the file that crosses the budget is truncated and later files are dropped (codex-rs/core/src/agents_md.rs:68-95,:145-180). The section is re-sent with a replacement notice when the text changes (codex-rs/core/src/context/world_state/agents_md.rs:44-80).- Held by
codex-rs/core/src/agents_md.rs:156
B9 Which global (home-directory) instructions does the model get? RULE · code
- Answered how
Code: in
CODEX_HOME, the first non-empty ofAGENTS.override.mdthenAGENTS.mdis used, trimmed; a failed read keeps the last good value and reports each warning once (codex-rs/codex-home/src/instructions/mod.rs:41-109).- Held by
codex-rs/codex-home/src/instructions/mod.rs:41
B10 Are host-supplied thread instructions small enough to accept? RULE · code
- Answered how
Code: thread-scoped instructions from the host provider over 10,000 estimated tokens fail the refresh with
InvalidRequest; repository instructions are re-discovered only when the environment selection or trust level changed (codex-rs/core/src/agents_md_manager.rs:68-149,:187-199).- Held by
codex-rs/core/src/agents_md_manager.rs:192
B11 What is the model told about its sandbox, approval policy and approved commands? RULE · code
- Answered how
Code:
from_permission_profilederives a sandbox label from the permission profile (full write → danger-full-access, no writable roots → read-only, else workspace-write), picks the approval text by policy and reviewer, appends request-permission and approved-prefix sections, and lists writable roots and denied reads within a 32 KiB path budget (codex-rs/prompts/src/permissions_instructions.rs:184-279,:311-385,:49,:121-142). Later steps send only newly approved prefixes as a delta (codex-rs/core/src/context/world_state/permissions.rs:111-129).- Held by
codex-rs/prompts/src/permissions_instructions.rs:184
B12 Which collaboration-mode instructions (Default or Plan) does the model see? RULE · code
- Answered how
Code: the catalog's mode text wins, else the mode settings' non-empty developer instructions; when the
update_plantool is off,update_planguidance is stripped from text counted as built-in, which is catalog text from a non-custom catalog, or settings text equal as a whole string to a bundled preset; custom text is left unchanged (codex-rs/core/src/context/world_state/collaboration_mode.rs:28-81).- Held by
codex-rs/core/src/context/world_state/collaboration_mode.rs:28
B13 What is the model told about its environment (cwd, shell, date, timezone, network, filesystem, sub-agents)? RULE · code
- Answered how
Code:
EnvironmentsStatecollects per-environment cwd/status/shell, the PowerShell version (only with thePowerShellShellVersionfeature and a single local PowerShell environment), the date, the timezone wheninclude_environment_context_timeis on, the network and filesystem summary of the primary environment, and, for multi-agent V2, a sub-agent list capped at 8 names and 1,024 bytes (V1 uses a legacy formatter). A fragment is sent only when an environment entry changed or the shell version, date, timezone, network or filesystem changed; it then carries the changed environment entries plus the current shell version, date, timezone, network, filesystem and sub-agent list. A change to the sub-agent list alone sends nothing (codex-rs/core/src/context/world_state/environment.rs:45-202;codex-rs/core/src/session/world_state.rs:40-41,:137-170).- Held by
codex-rs/core/src/context/world_state/environment.rs:45
B14 Is the model given app and plugin usage instructions this step? RULE · code
- Answered how
Code: app instructions appear only when the config's
include_apps_instructionsis on, apps are enabled, at least one connector is accessible and enabled after app policy, and the model opts in (include_apps_usage_instructions); plugin instructions when plugins are available and the model opts in (codex-rs/core/src/session/world_state.rs:327-353).- Held by
codex-rs/core/src/session/world_state.rs:327
B15 In what order and under which role does the initial context reach the model? RULE · code
- Answered how
Code:
build_initial_context_with_world_stategathers config developer instructions, extension thread/turn context, token-budget context, then world-state fragments; model-switch text goes first, multi-agent mode after the usage hint, managed developer instructions in their own trailing message, and for guardian sub-agents the developer instructions are emitted as a separate guardian-policy message (codex-rs/core/src/session/mod.rs:4781-5059).- Held by
codex-rs/core/src/session/mod.rs:4781
B16 What does an external notes server add to the context-window block? RULING · external
- Answered how
External: when the token-budget feature is on and the history-notes extension is not used, core calls the MCP tool
notes/thread_hintand pastes its text into the context-window block (codex-rs/core/src/session/mod.rs:4879-4919).- Held by
codex-rs/core/src/session/mod.rs:4887
B17 Which uninstalled plugins does the model get to recommend? RULING · external
- Answered how
External with code: the recommendations endpoint supplies a plugin list; code removes installed, remotely installed and user-disabled ones (
codex-rs/core-plugins/src/manager.rs:2066-2126); the result becomesRecommendedPluginsInstructions(codex-rs/core/src/session/mod.rs:4815-4834,:4983-4995).- Held by
codex-rs/core-plugins/src/manager.rs:2066
B18 Which tools does the model see this step? RULE · code
- Answered how
Code:
build_tool_routerregisters core tools (shell, apply-patch, utilities, collaboration), MCP tools after exposure policy, extension tools, dynamic tools and hosted tools, filtered by the session tool policy and code-mode rules (codex-rs/core/src/tools/spec_plan.rs:122-189,:371-402).- Held by
codex-rs/core/src/tools/spec_plan.rs:122
B19 Which MCP tools become model tools, and which are hidden for budget? RULING · code
- Answered how
Code: non-app MCP tools that are model-visible, plus app tools allowed by app policy, are registered; agent-plugin tools are admitted in discovery order while each spec is at most 8,000 bytes and the running total at most 64,000 bytes, and the rest are registered Hidden (
codex-rs/core/src/mcp_tool_exposure.rs:19-20,:136-240).- Held by
codex-rs/core/src/mcp_tool_exposure.rs:136
B20 Is each MCP tool shown directly or only through tool search? RULE · code
- Answered how
Code: when the model supports the search tool, an eligible tool is deferred (reachable only via
tool_search); otherwise it is direct; server and appomit_tools_fromlists and direct-only namespaces narrow the choice, and in Code-Mode-only mode a tool is deferred only if it keeps its Code Mode exposure. With theCodeModeOnlyStrictThirdPartyToolsfeature in Code-Mode-only mode, this policy is skipped entirely: the operator'somit_tools_fromlists are ignored (a conflict is logged withwarn!only) and the tool keeps the exposure it was registered with (codex-rs/core/src/tools/spec_plan.rs:191-292).- Held by
codex-rs/core/src/tools/spec_plan.rs:200
B21 Which deferred tools does a tool search surface to the model? RULING · code
- Answered how
Code: BM25 over each deferred tool's search text, embedder fitted to that corpus; the top
limit(default 8) are returned and loaded for the next call (codex-rs/core/src/tools/handlers/tool_search.rs:166-175,:237,:334-348).- Held by
codex-rs/core/src/tools/handlers/tool_search.rs:342
B22 Which skills, and how much of each description, appear in the model's skill catalog? RULING · code
- Answered how
Code: the catalog gets a budget of 2% of the context window in tokens (or a configured cap up to 10,000 tokens, or 8,000 characters when the window is unknown); if every full line fits it is shown whole; else, if every skill fits at its minimum, the remaining budget is shared out as shortened descriptions; else every description is removed and skills are kept in list order while their minimum lines still fit, the rest omitted (
codex-rs/ext/skills/src/render.rs:23-26,:169-195,:380-421).- Held by
codex-rs/ext/skills/src/render.rs:380
B23 Which skill does a $name mention in core's host-skill path inject? RULE · code
- Answered how
Code: structured skill inputs resolve by path first; text mentions resolve by path, then by plain name only when exactly one enabled skill has that name and no connector shares the slug (
codex-rs/skills/src/selection.rs:44-200, ambiguity check:181-193). Called fromcodex-rs/core/src/session/turn.rs:1153,:1230; guardian sub-agents never interpret mentions (codex-rs/core/src/session/turn.rs:1186-1190).- Held by
codex-rs/skills/src/selection.rs:44
B24 Which skill does a $name mention inject from the skills extension's catalog (executor, cloud, bundled, MCP-resource skills)? RULE · code
- Answered how
Code: the extension's own
collect_explicit_skill_mentionsresolves structured and path mentions, then for a plain name takes the FIRST enabled catalog entry with that name, with no ambiguity check and no connector check (codex-rs/ext/skills/src/selection.rs:21-80, plain-name branch:65-76); its main prompt is read and truncated with a warning if too long (codex-rs/ext/skills/src/extension.rs:380,:436-460).- Held by
codex-rs/ext/skills/src/selection.rs:21
B25 What remembered context does the model start each thread with? RULE · code
- Answered how
Code: when the memory tool feature and
use_memoriesare on, the extension readsmemory_summary.mdfrom the memory root, truncates it to 2,500 tokens, renders it into the read-path template and adds it as a developer-policy fragment (v2: split into 8,900-byte fragments) (codex-rs/ext/memories/src/prompts.rs:35-64;codex-rs/ext/memories/src/extension.rs:46-53,:56-104; limitcodex-rs/ext/memories/src/lib.rs:16).- Held by
codex-rs/ext/memories/src/prompts.rs:35
B26 What extra context do configured hooks add to the model's input? RULING · external
- Answered how
External: hook commands configured by the user or admin return
additionalContext; core records each as a developer-role message (codex-rs/core/src/hook_runtime.rs:886-910; rolecodex-rs/core/src/context/hook_additional_context.rs:24-26), from prompt-submit hooks (codex-rs/core/src/session/turn.rs:1006-1034) and tool hooks (codex-rs/core/src/tools/registry.rs:973-976).- Held by
codex-rs/core/src/hook_runtime.rs:886
B27 Under which role does client-supplied additional context reach the model, and when is it re-sent? RULE · code
- Answered how
Code: each keyed entry is re-sent only when its value changed;
Untrustedentries become a user-role fragment (or, with theUntrustedAsToolOutputfeature on, a tool-output item) andApplicationentries a developer-role fragment (codex-rs/core/src/state/additional_context.rs:50-99), merged at every start or steer (codex-rs/core/src/session/turn_input.rs:985-1006).- Held by
codex-rs/core/src/state/additional_context.rs:50
B28 What does the model see of past turns (missing tool outputs, orphans, unsupported media)? RULING · code
- Answered how
Code: before each prompt the history is normalized: a call with no recorded output gets a synthetic output
aborted; a function, custom-tool or client tool-search output whose call id matches no call is removed (named outputs with no call id, and server-executed tool-search outputs, are kept); and image/audio content is stripped when the model lacks the modality (codex-rs/core/src/context_manager/history.rs:1036-1055;codex-rs/core/src/context_manager/normalize.rs:21-155,:197-227,:346,:394).- Held by
codex-rs/core/src/context_manager/history.rs:1036
B29 What does the model see of an image (resized, or replaced by a placeholder)? RULE · code
- Answered how
Code: inline images are resized/encoded per the model's detail or unified budget mode; remote URLs,
lowdetail where unsupported, oversized and unprocessable images are replaced by fixed placeholder text that says why; user-message resizes can add a resize notice (codex-rs/core/src/image_preparation.rs:126-164,:33-39,:111-123).- Held by
codex-rs/core/src/image_preparation.rs:126
B30 What does the model learn of a user's ! shell command? RULE · code
- Answered how
Code: the command, exit code, duration and output are recorded as a
<user_shell_command>user-role fragment: as a conversation item for a standalone command, or injected into the running turn without starting a new one (codex-rs/core/src/tasks/user_shell.rs:440-468; fragmentcodex-rs/core/src/context/user_shell_command.rs:32-54).- Held by
codex-rs/core/src/tasks/user_shell.rs:440
B31 Is a current-time reminder due before this request? RULE · code
- Answered how
Code: with the reminder feature on, a reminder is recorded on a new context window, when the interval is zero or has elapsed, and (in after-output mode) only after a user message or tool output (
codex-rs/core/src/session/time_reminder.rs:63-96,:156-202).- Held by
codex-rs/core/src/session/time_reminder.rs:63
B32 What startup context does the realtime voice model get? RULE · code
- Answered how
Code: a startup blob with token-budgeted sections: current thread (1,200), recent work from up to 40 recent threads grouped by cwd including other workspaces (2,200), a two-level workspace tree (1,600) and notes (300) (
codex-rs/core/src/realtime_context.rs:30-45,:59).- Held by
codex-rs/core/src/realtime_context.rs:59
B33 Are the organisation's managed developer instructions small enough to place in context? RULE · code
- Answered how
Code: managed
additional_developer_instructionsover 10,000 estimated tokens (including markers and the replacement notice) are rejected; accepted text is sent as its own developer message and replaced or withdrawn with an explicit notice when it changes (codex-rs/core/src/context/world_state/managed_developer_instructions.rs:59-85,:19-21).- Held by
codex-rs/core/src/context/world_state/managed_developer_instructions.rs:59
C. Choosing the next action
C1 Given everything in the context window, what is the agent's next move: which tool(s) to call with which arguments, or what to say? RULING · llm
- Answered how
The main model answers it in one streamed Responses call per step (
tool_choice: "auto"; parallel calls only when the prompt allows them and the model is not a Responses Lite model,codex-rs/core/src/client.rs:1161); the code only parses what comes back.- Held by
codex-rs/core/src/session/turn.rs:2833
C2 After the model's response finishes, does the agent go round the loop again or stop and hand back to the user? RULE · code
- Answered how
Code: it continues when the response held any tool call (dispatched, or answered directly), when the server marked
end_turn: false, or when user or mailbox input is pending; otherwise it runs the stop hooks and ends.- Held by
codex-rs/core/src/session/turn.rs:636
C3 Which of the model's output items are tool calls, and how is each mapped to a registered tool name and payload kind? RULE · code
- Answered how
Code:
build_tool_callmapsFunctionCallto a Function payload, a client-executedToolSearchCallto a ToolSearch payload andCustomToolCallto a Custom (freeform) payload, normalising the namespace; anything else is not a call.- Held by
codex-rs/core/src/tools/router.rs:271
C4 Is the call addressed to a tool registered for this step, with the payload kind that tool takes, and arguments the handler can read? RULE · code
- Answered how
Code: the registry looks the name up (unknown: "unsupported call: <name>" goes back to the model), checks the payload kind (mismatch: a FATAL error that ends the turn), then each handler parses the JSON arguments with serde (failure: "failed to parse function arguments" goes back to the model).
- Held by
codex-rs/core/src/tools/registry.rs:768
C5 When the model sends exec_command with a command line that invokes apply_patch, is it rerouted to the patch path (verification, patch approval, turn diff) or run as an ordinary shell command? RULE · code
- Answered how
Code: a Tree-sitter Bash query accepts exactly two whole-script shapes (
apply_patch <<'EOF' ... EOFandcd <path> && apply_patch <<'EOF' ... EOF, or the direct argv formapply_patch <patch>); a match is verified and applied as a patch; a raw patch passed as the whole command is refused as "implicit invocation"; anything else runs in the shell unchanged.- Held by
codex-rs/core/src/tools/handlers/apply_patch.rs:459
C6 Does the patch text parse under the patch grammar, and can each Update hunk be located in the current file contents (each Delete target read) before anything is approved or written? RULE · code
- Answered how
Code:
parse_patchchecks the grammar;verify_apply_patch_argsresolves every path, refuses two operations on one path, reads deleted files, and computes each update's new content by locating its old lines (C7).- Held by
codex-rs/core/src/tools/handlers/apply_patch.rs:483
C7 When a patch's old lines do not match the file byte for byte, how loose may the match be, and which occurrence wins? RULING · code
- Answered how
Code:
seek_sequencesearches from the end of the previous hunk (not the file start) and tries four passes in decreasing strictness (exact, trailing whitespace ignored, both-side whitespace ignored, then Unicode dashes, quotes and spaces folded to ASCII), returning the FIRST position that matches in the earliest pass that matches; it never checks whether the context occurs more than once. For an end-of-file hunk it searches only from the last possible position onward; its doc comment says it falls back to searching fromstart, but the code has no such fallback. If no match is found and the hunk ends in a blank line, the caller retries once without that line (codex-rs/apply-patch/src/seek_sequence.rs:1-110; callercodex-rs/apply-patch/src/file_update.rs:68-120).- Held by
codex-rs/apply-patch/src/seek_sequence.rs:12
C8 When one response contains several tool calls, which of them may run concurrently? RULING · code
- Answered how
Code: each call starts as soon as its item finishes streaming; a tool that declares
supports_parallel_tool_callstakes a shared (read) lock and runs alongside others, any other tool takes the exclusive (write) lock. Outputs are recorded back in call order.- Held by
codex-rs/core/src/tools/parallel.rs:286
C9 When inter-agent mail arrives while the model is mid-response, is the response stopped after the current commentary/reasoning item so the next request can carry the mail? RULING · code
- Answered how
Code: after a completed reasoning, commentary or partial-answer item, if mailbox items are pending and the
DeferMailboxPreemptionfeature is off, sampling stops and the turn follows up; final answers and tool calls never trigger it.- Held by
codex-rs/core/src/session/turn.rs:3146
C10 In the streamed assistant text, which spans are shown as the message, which become the Plan item (Plan mode <proposed_plan> blocks), and which are stripped as citation markup? RULE · code
- Answered how
Code: a streaming parser splits deltas into normal text and plan segments as they arrive (
handle_plan_segments); when the item completes, a second extractor pulls the plan text from the whole message and strips citations; citations are stripped from every visible message.- Held by
codex-rs/core/src/session/turn.rs:2543
C11 With instant interrupt on, when the person sends a steering message while the model is mid-response, is the response stopped (or drained) so the next request can include the new message? RULING · code
- Answered how
Code: a watcher cancels the step's preempt token when user input arrives; the stream loop then either asks a Responses Lite server to drain the response and continues reading, or drops the stream at once and marks the step for follow-up; if the step is already draining a Responses Lite response for queued mailbox items, the cut only resets the token and reading continues (
codex-rs/core/src/session/turn.rs:2934-2937). Tool calls already started keep running and are collected.- Held by
codex-rs/core/src/session/turn.rs:2938
D. Gatekeeping: may this action run?
D1 May this file patch be applied without asking, must it ask, or is it rejected? RULE · code
- Answered how
Code: an empty patch is rejected; under
UnlessTrustedit always asks; otherwise a patch whose every target (and move destination) is writable under the configured filesystem policy, with a sandbox available or a Disabled/External profile, is auto-approved; else it is rejected when the policy forbids sandbox prompts (Never, or Granular withoutsandbox_approval) and asks otherwise.- Held by
codex-rs/core/src/safety.rs:67
D2 Does an exec-policy rule allow, prompt for, or forbid this command (or every segment of a parsed shell script)? RULE · code
- Answered how
Code: the command is split into plain commands (
bash -lc/ PowerShell parsing,codex-rs/core/src/exec_policy.rs:913-943), unfamiliar executables are evaluated by executable alone (codex-rs/core/src/exec_policy/executable_identity.rs:62-101), then the merged Starlark-style.rulespolicy is checked with the D3 fallback for unmatched segments;Forbiddenforbids,Promptasks unless the approval policy disallows that prompt (then forbids),Allowskips approval and bypasses the sandbox only if every segment matched an explicit allow rule (codex-rs/core/src/exec_policy.rs:466-480).- Held by
codex-rs/core/src/exec_policy.rs:358
D3 For a command no exec-policy rule matches, should it run, ask, or be forbidden? RULE · code
- Answered how
Code: if D4 flags it dangerous (or Windows has managed filesystem limits but no sandbox backend) it prompts, or is forbidden under
Never; otherwiseNeverallows (relying on the sandbox),UnlessTrustedprompts, andOnRequest/Granular allow unless the call asks for a sandbox override, in which case they prompt; an unrestricted or external sandbox allows.- Held by
codex-rs/core/src/exec_policy.rs:807
D4 Is this command dangerous enough that it must not run without a person's say-so? RULING · code
- Answered how
Code: on POSIX only
rmwith a force flag matches, looked throughsudo,envandtrapwrappers and through literal commands inside abash -lcscript, up to 8 wrapper levels (deeper nesting is itself treated as dangerous); Windows adds its own word lists for cmd and PowerShell.- Held by
codex-rs/shell-command/src/command_safety/is_dangerous_command.rs:43
D5 Which reusable "don't ask again for commands that start with X" rule should be offered to the person with this prompt? RULING · code
- Answered how
Code: the model's own
prefix_rulesuggestion is used if it is non-empty, not on a banned list, no policy rule already matched, and adding it as an allow rule would approve every parsed segment of the command; otherwise the first heuristic Prompt (or, for the sandbox-retry case, Allow) segment is proposed.- Held by
codex-rs/core/src/exec_policy.rs:1007
D6 Does the first attempt of this command run outside the sandbox, inside it, or inside it with approved extra write roots? RULE · code
- Answered how
Code: if the filesystem policy has denied-read paths, only an approved explicit escalation widens it, and then still inside a sandbox (
EscalatedSandboxWithRestrictions); otherwise an exec-policy Allow withbypass_sandboxor a request for escalated permissions bypasses the sandbox on the first attempt; else no override.- Held by
codex-rs/core/src/tools/sandboxing.rs:253
D7 Which platform sandbox, if any, wraps the command (Seatbelt, Linux seccomp/bwrap, Windows restricted token or MXC, or none)? RULE · code
- Answered how
Code: if the profile needs sandboxing (or the tool requires it) the host's platform sandbox is chosen; on Windows with the sandbox disabled there is none, and the call then runs as
SandboxType::Noneeven though the policy asked for one.- Held by
codex-rs/sandboxing/src/manager.rs:313
D8 Did this command fail because of the sandbox (and so is a candidate for a retry outside it)? RULING · code
- Answered how
Code: with no sandbox or exit 0 the answer is no; otherwise ANY non-zero exit whose stdout, stderr or aggregated output contains one of seven keywords ("operation not permitted", "permission denied", "read-only file system", "seccomp", "sandbox", "landlock", "failed to write file") is a denial; only after that check are exit codes 2/126/127 quick-rejected, and Linux seccomp's SIGSYS exit (128+SIGSYS) is a denial.
- Held by
codex-rs/sandboxing/src/denial.rs:13
D9 May a command the sandbox (probably) blocked be run again outside the sandbox? RULE · code
- Answered how
Code: no if the denial carried a network-policy decision that cannot be turned into a network approval, if the tool does not escalate on failure, if the approval policy does not want no-sandbox approvals (
Never,OnRequest;OnRequestis let through only for a network denial that would itself need approval), or if denied-read restrictions forbid unsandboxed execution and the denial was not a network one; otherwise yes, with or without a fresh approval (D10).- Held by
codex-rs/core/src/tools/orchestrator.rs:449
D10 Does running the command again outside the sandbox need a fresh approval, or does the first approval carry over? RULING · code
- Answered how
Code: the retry skips approval when the first approval was not a human-required checkpoint (
NeedsHumanApproval), strict auto-review is off, the denial was not a network one, and the tool'sshould_bypass_approvalsays so, which is true whenever the first attempt was approved by the person or a PermissionRequest hook (or the policy isNever); an approval given by the automatic reviewer does not carry over; otherwise it asks again with the retry reason (D32 when a person answers).- Held by
codex-rs/core/src/tools/orchestrator.rs:498
D11 Who answers this approval request: a configured PermissionRequest hook, the automatic reviewer, or the person? RULE · code
- Answered how
Code: depending on the request, a configured PermissionRequest hook, the automatic reviewer (D15) or the person answers it, and some requests are rejected before any of them is asked (
codex-rs/core/src/tools/approvals.rs:520-699).- Held by
codex-rs/core/src/tools/approvals.rs:596
D12 Does a configured PermissionRequest hook allow or deny this action, or abstain? RULING · external
- Answered how
External: each trusted (D14) matching hook command receives the action as JSON on stdin and may answer by JSON decision or by exit 2 with a stderr reason (a deny); any Deny among the matching hooks wins, otherwise any Allow allows, except that an Allow from an environment-sourced hook is ignored (
codex-rs/hooks/src/events/permission_request.rs:232-238); no decision falls through to D15 or the person (codex-rs/hooks/src/events/permission_request.rs:134-173), and for a human-required checkpoint an Allow also goes on to the person (D11).- Held by
codex-rs/core/src/hook_runtime.rs:274
D13 Does a configured PreToolUse hook block this tool call, or rewrite its input before it runs? RULING · external
- Answered how
External: trusted (D14) matching hook commands run before the handler; a hook blocks by exit code 2 with a reason on stderr, or by JSON
decision: blockwith a reason; it may instead return an updated input, and the latest-finishing rewrite wins.- Held by
codex-rs/core/src/hook_runtime.rs:196
D14 May this configured hook run at all (is it enabled and trusted, or modified since it was trusted)? RULE · code
- Answered how
Code: built-in and managed hooks are trusted; any other hook runs only if its stored trusted hash equals the hash of its current normalized config (else Modified or Untrusted, and it is listed but not run), unless
bypass_hook_trustis set; for a plugin hook with a content fingerprint the compared hash also covers the plugin's contents (codex-rs/hooks/src/engine/discovery.rs:836-841,:863-879), and a plugin hook with no fingerprint but a stored trusted hash is admitted with its trust record attached for a later check this card did not read (codex-rs/hooks/src/engine/discovery.rs:844-862,:917-919); with the managed-only requirement, non-managed sources are skipped entirely.- Held by
codex-rs/hooks/src/engine/discovery.rs:1000
D15 Does this approval go to the automatic reviewer ("auto-review"/guardian) instead of the person, and must the reviewer run a fresh model review rather than reuse cached evidence? RULE · code
- Answered how
Code: with full access the reviewer approves after only validating the action; otherwise registered approval contributors (the guardian-v2 extension, D16) answer first; with no contributor answer the review runs when guardian is required or when the policy is
OnRequest/Granular with reviewerAutoReview, else the request goes to the person; a fresh review is forced by synchronous mode, a mandatory-review model without async scoring, cancellation, a retry, or an escalated exec.- Held by
codex-rs/ext/guardian-reviewer/src/routing.rs:127
D16 Is a recent background ("async") risk score for this thread low enough, current enough and authorized under the same conditions, to approve this action without a fresh model review? RULING · code
- Answered how
Code (guardian-v2 contributor): with full access it allows; if the reviewer is the person or the policy is not on-request/granular it hands back; per the model policy's review mode, in Adaptive mode, when the host passed a serving assessment for the action it allows if that assessment needs no review and otherwise asks for a synchronous review (
codex-rs/ext/guardian-v2/src/async_scorer/approval.rs:111-115); without one it reuses the newest score when the action fits the size budget, compaction is compatible, authorization evidence is unchanged, the score is withinmax_tool_call_lagtool calls, no unscored failure intervened, andaction_risk < review_threshold; the first node-REPL computer-usejscall is approved without a score when the policy allows it; anything else asks for a synchronous review (D18), which a newly published low score can still release early (not on the serving-assessment path,codex-rs/ext/guardian-v2/src/async_scorer/approval.rs:181-185).- Held by
codex-rs/ext/guardian-v2/src/async_scorer/approval.rs:318
D17 Given the conversation so far and the planned tool call, is this action high risk or low risk? (background guardian-v2 classifier, run per tool call before approval is needed) RULING · llm
- Answered how
LLM: a "Luna" sampler call returns its first output token, which must be exactly
highorlow; that becomesaction_risk1.0 or 0.0, published only if authorization and history generation are still current.- Held by
codex-rs/ext/guardian-v2/src/async_scorer/classification.rs:364
D18 Is this specific action (command, patch, MCP call, network host, stdin, or permission request) acceptably safe to run, given the conversation and what the user actually authorized? RULING · llm
- Answered how
LLM: a separate reviewer session (model
codex-auto-reviewby default, low reasoning effort when supported, else the parent model) receives the policy as base instructions and the transcript plus the exact action JSON, may make read-only tool checks, and must end with JSON whoseoutcomeisallowordeny; up to 3 attempts within an overall deadline that defaults to 90 s whenauto_review.timeout_msis omitted (codex-rs/ext/guardian-reviewer/src/lib.rs:85-87).- Held by
codex-rs/ext/guardian-reviewer/src/review.rs:141
D19 Has the automatic reviewer denied so many requests in this turn that the turn should be interrupted? RULE · code
- Answered how
Code: per turn, 3 consecutive completed denials or 10 denials in the last 50 reviews (1 and 1 for a cyber-specialty model) interrupt the turn once with a
TooManyDenialserror. A review that runs and does not end in Deny, including a failed review, resets the consecutive count; a cached approval returns before any of this accounting (codex-rs/ext/guardian-reviewer/src/review.rs:218-246).- Held by
codex-rs/ext/guardian-reviewer/src/circuit_breaker.rs:53
D20 Was an equivalent command (or every file of this patch) already approved "for this session", so no one is asked again? RULE · code
- Answered how
Code: an in-memory map keyed by the serialized approval key: for commands the environment, executable, canonicalized command, cwd, tty, sandbox permissions, additional permissions and the exec-policy fingerprint; for patches each file path; if every key holds
ApprovedForSession, skip; a newApprovedForSessionis stored per key.- Held by
codex-rs/core/src/tools/sandboxing.rs:72
D22 May a process under the managed network proxy connect to this host and port? RULE · code
- Answered how
Code: an unparseable host is blocked; an explicit deny entry always wins; unless local binding is allowed, loopback and non-public IP literals are blocked unless explicitly allowlisted, and allowlisted hostnames that resolve to non-public IPs are blocked (a failed or timed-out DNS lookup counts as non-public); otherwise the host must match the allowlist without matching a managed review selector, or (D23) be approved (
codex-rs/network-proxy/src/runtime.rs:892-894).- Held by
codex-rs/network-proxy/src/runtime.rs:848
D23 When a sandboxed command reaches a host that is not on the allowlist, may that be put to a reviewer (hook, auto-reviewer or person), and is the answer remembered for the session or written to policy? RULE · code
- Answered how
Code: session-denied hosts are denied and session-approved hosts allowed at once; with no active turn, an unattributable request, a non-Managed permission profile, or approval policy
Neverthe request is denied; otherwise one pending approval per host/turn/execution is raised through D11, and the answer becomes allow-once, allow-for-session, or a persisted allow/deny network rule.- Held by
codex-rs/core/src/tools/network_approval.rs:717
D24 When the model calls request_permissions for extra filesystem or network access, may it be granted, for this turn or the session, and who decides? RULE · code
- Answered how
Code: under
Never, or Granular without request-permissions allowed, it returns an empty grant at once; otherwise it goes straight to the automatic reviewer (D15/D18) and, if no reviewer claims it, to the person (D30); an approval grants the requested profile for the turn (or the session forApprovedForSession), normalized against the environment.- Held by
codex-rs/core/src/session/mod.rs:3287
D25 Is the project (directory, project root, or the main repository of a linked worktree) trusted, so that its .codex config, hooks and exec-policy rules are loaded? RULE · code
- Answered how
Code: looks up the trust map by the directory, then the discovered project root, then the git repository root (so a linked worktree inherits its main repository's trust); only
Trustedloads;Untrustedor no entry disables the project layer with a reason telling the person how to trust it.- Held by
codex-rs/config/src/loader/mod.rs:1083
D27 Should this command run, run and be allowed for the rest of the session, run and add a "don't ask again" rule (D5), be skipped, or stop the turn? RULING · human
- Answered how
Human: the person at the TUI approval overlay picks one of the options the core offered (
available_decisions); "Yes, proceed" is the first option and uses the approve key.- Held by
codex-rs/tui/src/bottom_pane/approval_overlay.rs:859(role: the person at the TUI approval overlay)
D28 Should this command be allowed to reach this network host just once, for this conversation, always (persisted allow rule), or never (persisted deny rule)? RULING · human
- Answered how
Human: the same overlay, with network-specific labels ("Yes, just this once", "Yes, and allow this host for this conversation", "Yes, and allow this host in the future", "No, and block this host in the future").
- Held by
codex-rs/tui/src/bottom_pane/approval_overlay.rs:869(role: the person at the TUI approval overlay)
D29 Should these file changes be applied, and should later changes to the same files stop asking? RULING · human
- Answered how
Human: the person picks "Yes, proceed", "Yes, and don't ask again for these files", or "No, and tell Codex what to do differently".
- Held by
codex-rs/tui/src/bottom_pane/approval_overlay.rs:1042(role: the person at the TUI approval overlay)
D30 Should the model's requested extra permissions (named paths read/write/deny, network) be granted for this turn, for this turn with strict auto-review, for the session, or denied? RULING · human
- Answered how
Human: the person at the permissions overlay picks a grant scope or denies.
- Held by
codex-rs/tui/src/bottom_pane/approval_overlay.rs:1062(role: the person at the TUI approval overlay)
D32 The command failed, possibly because of the sandbox: should it be run again with no sandbox? RULING · human
- Answered how
Human: the person sees the ordinary command overlay (D27's options) with the fixed reason "command failed; retry without sandbox?" and decides; reached only when D9 allows a retry and D10 requires a fresh approval. Like every approval it goes through
request_approval, where a PermissionRequest hook (D12) deny always wins; otherwise a hook allow, or, when strict auto-review or the automatic reviewer is configured, the reviewer (D15), answers instead of the person, except that for a human-required checkpoint (NeedsHumanApproval) a hook allow is not enough and the reviewer is skipped (codex-rs/core/src/tools/approvals.rs:594-621,:681-699); the person decides only when neither answers.- Held by
codex-rs/core/src/tools/orchestrator.rs:536(role: the person at the TUI approval overlay; reason text set here, built atcodex-rs/core/src/tools/orchestrator.rs:661-665)
D35 When the model writes input to a running process, does that write need an approval first? RULE · code
- Answered how
Code: no approval when the input is empty, a Ctrl-C to a non-TTY process, or the WriteStdinApproval feature is off. Otherwise approval is needed whenever the terminal runs with more than the baseline permissions (it was launched escalated, holds a filesystem escalation, its policy differs from the current one, or it carries additional permissions), or strict auto-review is on. Only on that path is input containing a NUL byte refused (
codex-rs/core/src/unified_exec/stdin_approval.rs:125-148,:197-236).- Held by
codex-rs/core/src/unified_exec/stdin_approval.rs:191
D36 A skill the person selected needs MCP servers that are not installed: install and enable them in the global config now, or skip? RULING · human
- Answered how
Human: the person answers a blocking "Install MCP servers?" question with Install or Skip; Skip also stops the question for those servers this session. Code skips the question when the permission prompt is auto-approved (then installs) or the approval policy is Never (then does not).
- Held by
codex-rs/core/src/mcp_skill_dependencies.rs:266(role: the person answering the request_user_input question)
E. Execution and observation
E1 For an exec_command call, which shell executable is used (the session's, or one the model names), login or not, and how is the command string turned into argv? RULE · code
- Answered how
Code: the model may name any shell path (
shellargument), otherwise the environment's reported shell (or the session shell) is used; a login shell is used unless config disables it;derive_exec_argsbuilds the argv. In a remote environment the requested shell must match the environment's shell type.- Held by
codex-rs/core/src/tools/handlers/unified_exec.rs:151
E2 After exec_command starts a process, how long does the tool wait for output before answering, and does a still-running process keep running in the background? RULE · code
- Answered how
Code: the model's
yield_time_ms(default 10 s) is clamped to 250 ms .. 30 s (with a 10 s floor on Windows); at the deadline the tool returns the output so far plus a session ID and the process keeps running, reachable throughwrite_stdin; the one-shot variant instead kills the process attimeout_ms(default 10 s).- Held by
codex-rs/core/src/unified_exec/mod.rs:206
E3 When a command's output exceeds the collection cap, which part of it survives to be shown to the model? RULING · code
- Answered how
Code: a head-and-tail buffer keeps the first 512 KiB and the last 512 KiB of a 1 MiB cap and counts the bytes dropped from the middle; the count is shown as an omission marker.
- Held by
codex-rs/utils/head-tail-buffer/src/lib.rs:41
E4 Of the captured output, how much goes into the tool result the model reads, and how is the cut marked? RULING · code
- Answered how
Code: the budget is the smaller of the model's
max_output_tokens(default 10,000) and the model catalog's truncation policy; text over budget is cut from the middle with a "Warning: truncated output (original token count: N)" header, then trimmed again so header plus body fit the serialisation budget.- Held by
codex-rs/core/src/tools/context.rs:527
E5 When the 64-process cap is reached and the model starts another command, which existing process is terminated to make room? RULING · code
- Answered how
Code: the eight most recently used are protected; of the rest, the least recently used process that has already exited goes first, else the least recently used live one; it is terminated without telling the model.
- Held by
codex-rs/core/src/unified_exec/process_manager.rs:1775
E6 When the model calls write_stdin with a session ID, which process receives the characters, how long does the tool wait for new output, and what is returned? RULE · code
- Answered how
Code: the process manager looks up the session ID, writes the characters (an empty write is a poll), waits up to the clamped yield time (empty polls at least 5 s, at most the background cap), and returns new output shaped as in E4.
- Held by
codex-rs/core/src/unified_exec/process_manager.rs:892
E7 Once a patch is verified and allowed, how are its hunks written, and what state is left (and reported) when a later hunk fails or the sandbox denies a write? RULE · code
- Answered how
Code: the runtime re-parses the patch text and applies hunks one file at a time; on failure it returns exit code 1 with stderr, and the files already written stay written (the delta of committed changes is kept for the turn diff). A sandbox denial on an
on-request-style policy can be retried without the sandbox after approval, which runs the whole patch again.- Held by
codex-rs/core/src/tools/runtimes/apply_patch.rs:183
E9 When an MCP server returns a result, which of its parts (text and image content, structuredContent, error flag) reach the model, and how much of it? RULING · code
- Answered how
Code: if any content block carries Codex encrypted content (
_metakeycodex/encryptedContent), the content blocks are passed through andstructuredContentis ignored (codex-rs/protocol/src/models.rs:2485-2494, key at:2529); otherwise, ifstructuredContentis present and not null, the model sees ONLY its JSON serialisation and everycontentblock (text, images) is dropped (:2496-2513); otherwise the content blocks are converted item by item (:2515-2518). A "Wall time ... Output:" header is prepended and the whole payload is truncated to the model's token budget.- Held by
codex-rs/protocol/src/models.rs:2496
E10 When history is turned into the next prompt, which tool calls lack an output (interrupted, crashed, inherited from a fork), what is put in their place, and which outputs lacking a call are dropped? RULE · code
- Answered how
Code:
normalize_historyinserts a synthetic output after any call with none ("aborted" for function, custom and local-shell calls; an empty "completed" result for tool_search), and removes unmatched function and custom outputs and client-executed tool-search outputs that carry a call id; call-less outputs and server-executed tool-search outputs are kept. Both run on everyfor_prompt.- Held by
codex-rs/core/src/context_manager/normalize.rs:21
E11 When a handler fails, a user rejects the action, or the turn is cancelled while a tool runs, what text comes back to the model as that call's result? RULE · code
- Answered how
Code: a handler error becomes a failed output carrying the error text (
success: false); a cancelled call that had not finished is aborted and answered "aborted by user after N s" (forexec_command: "Wall time: N seconds / aborted by user"), with any output produced so far discarded; a deferred call cancelled before it was dispatched is answered "aborted before dispatch"; a failed or cancelledtool_searchis answered as "completed" with zero tools, with no error text.- Held by
codex-rs/core/src/tools/parallel.rs:454
E12 When a tool result or message carries an image or audio and the model lacks that input modality, or the image is too large or in an unsupported detail level, what is sent instead? RULE · code
- Answered how
Code: three places substitute text: history normalisation replaces images and audio with an "unsupported media" fragment; MCP results replace image and audio blocks with "<image content omitted because you do not support image input>" and the audio equivalent; image preparation resizes images at record time and can add an image-resize notice, or a placeholder when an image cannot be processed.
- Held by
codex-rs/core/src/context_manager/normalize.rs:346
E13 When the model calls a tool that the embedding application registered for this thread, what result comes back? RULING · external
- Answered how
External: Codex emits a DynamicToolCall item to the client and waits for the client's response (content items plus a success flag), which becomes the tool result.
- Held by
codex-rs/core/src/tools/handlers/dynamic.rs:239
E14 When the model stream fails (disconnect, 5xx, rate limit, timeout, overload), is the request retried, after what delay, how many times, and does Codex switch from WebSockets to HTTPS? RULING · code
- Answered how
Code: the error's kind decides if it is retryable at all (
retry_delay); retryable errors wait for server advice or exponential backoff and retry up to the provider'sstream_max_retries(default 5, cap 100); when the budget is spent, a WebSocket session falls back to HTTPS (after waiting out any server retry deadline) and the count restarts; withUnboundedConnectionRetries, connection failures on sampling requests retry forever with 5 s .. 60 s backoff, except for internal sessions and Amazon Bedrock providers, which keep the bounded budget (codex-rs/core/src/responses_retry.rs:58-177).- Held by
codex-rs/core/src/responses_retry.rs:58
E15 When the response is blocked by the provider's content filter, does Codex retry, and what guidance does the model get before the retry? RULING · code
- Answered how
Code: for sampling requests, a guidance message is recorded into history ("Your previous response was blocked by a content filter. Do not treat this as a transient failure ... Briefly explain the limitation and offer a permitted alternative") and then the normal retry seat (E14) retries, since
ContentFilteris classed retryable.- Held by
codex-rs/core/src/responses_retry.rs:69
E16 When the model calls request_user_input with one or more questions (with or without options), what does the person choose or type, and does the turn wait for it? RULING · human
- Answered how
The person, in the TUI's question overlay (or an app-server client), picks options or types answers and submits; sub-agents may not ask;
codex execrefuses the request because no person is present. The core waits for the answer in every mode (codex-rs/core/src/tools/handlers/request_user_input.rs:87-94). Outside Plan mode the request is marked non-blocking (:83), and the TUI then answers for a silent person: after a 60 s hidden grace and a 60 s visible countdown with no key press or paste, it submits an empty answer set (codex-rs/tui/src/bottom_pane/request_user_input/mod.rs:73-74,:270-312,:917-939); any key or paste stops the countdown (:264-268,:1208,:1488). In Plan mode there is no countdown.- Held by
codex-rs/tui/src/bottom_pane/request_user_input/mod.rs:862
E17 When the person runs a shell command directly (the !//shell path, not a model tool call), is its output recorded into the conversation the model will read, and how is it cut? RULE · code
- Answered how
Code: yes. The command runs unsandboxed with a one-hour default timeout and no managed proxy; its exit code, duration and output (truncated to the model's policy) are recorded as a user-shell-command fragment, either as its own turn or injected into the active turn.
- Held by
codex-rs/core/src/tasks/user_shell.rs:440
E18 When the model searches for tools it cannot yet see, which registered deferred tools are returned, in what order, and how many? RULING · code
- Answered how
Code: a BM25 lexical index over each deferred tool's search text ranks matches for the query; the top
limit(model-chosen, defaultTOOL_SEARCH_DEFAULT_LIMIT) are returned as loadable specs; in Code Mode, results are filtered to tools the current step allows.- Held by
codex-rs/core/src/tools/handlers/tool_search.rs:342
E19 When the model runs the web.run tool, what results come back? RULING · external
- Answered how
External: Codex sends the model's search commands, the model name and the recent conversation input to the provider's search endpoint (
SearchClient) and returns its output, capped by the model's truncation budget.- Held by
codex-rs/ext/web-search/src/tool.rs:151
E20 When the response reports (via the OpenAI-Model header) a different model from the one requested, what does Codex conclude and tell the person? RULING · code
- Answered how
Code: any case-insensitive mismatch is reported once per turn as a model reroute with reason
HighRiskCyberActivity, plus a fixed warning that the account "was flagged for potentially high-risk cyber activity and this request was routed to gpt-5.2 ... To regain access to gpt-5.3-codex", whatever models were actually involved.- Held by
codex-rs/core/src/session/turn.rs:3269
E21 When a Code Mode exec cell finishes or yields, how is its combined output cut before it returns to the model? RULING · code
- Answered how
Code: the cell's output items are truncated to the script's
max_output_tokens(default 10,000) with the text-only or mixed-content truncator; nested tool results inside the script are passed raw to the script (code_mode_result), not truncated.- Held by
codex-rs/core/src/tools/code_mode/mod.rs:328
E22 At the end of each sampling step, which file changes are summarised to the person as the turn's unified diff? RULE · code
- Answered how
Code: only changes made through the patch path (the apply_patch tool, or a shell command intercepted as a patch, C5) are tracked; edits a shell command makes directly (sed, scripts, the
apply_patchexecutable reached through the shell) are not in the diff.- Held by
codex-rs/core/src/turn_diff_tracker.rs:92
E23 When the model asks the image tool to generate or edit an image, what image comes back? RULING · model
- Answered how
Model: the configured Images client generates (or edits) the image from the request; the bytes are saved as an artifact and returned to the model as an image in the tool output, for its follow-up.
- Held by
codex-rs/ext/image-generation/src/tool.rs:154(handle_call: generate:188, edit:193)
F. Limits and memory
F1 Has the conversation grown enough that it must be compacted now? RULING · code
- Answered how
Code compares the active context tokens (or, in
BodyAfterPrefixscope, the tokens added after the window's prefill) against the auto-compact limit plus an optional fallback buffer, and against the model's full usable window; either crossing setstoken_limit_reached.- Held by
codex-rs/core/src/session/context_window.rs:108
F2 Should the turn compact BEFORE sampling, with the PREVIOUS model, because the model changed? RULING · code
- Answered how
Code compacts pre-turn with the previous turn's model when both turns declare compaction-compatibility hashes and they differ, or when switching to a model with a smaller context window while the current usage already exceeds the new model's limit.
- Held by
codex-rs/core/src/session/turn.rs:1511
F3 What does the compaction summary say (local, summarizing compaction)? RULING · llm
- Answered how
A language model is sent the whole history plus a synthesized user message carrying the compaction prompt, and its last assistant message becomes the summary that replaces the history.
- Held by
codex-rs/core/src/compact.rs:125
F4 Which of the user's own messages survive a local compaction, and how much of each? RULING · code
- Answered how
Code walks the user messages newest first, keeping each whole while a 20,000-token budget lasts, truncates the one that crosses it, and drops everything older; summaries from earlier compactions are excluded. A message that carries an image or audio keeps only its text parts even when it fits the budget, so media in the user's own messages is dropped at compaction (
codex-rs/core/src/compact.rs:63,:714-803).- Held by
codex-rs/core/src/compact.rs:63
F5 When the compaction request itself overflows the context window, what is thrown away? RULING · code
- Answered how
Code removes the single oldest history item and retries, repeatedly, until the request fits or one item is left; at one item it marks the token count full and raises.
- Held by
codex-rs/core/src/compact.rs:368
F6 What does a REMOTE (server-side, v2) compaction keep? RULING · external
- Answered how
The OpenAI Responses backend returns exactly one opaque
Compactionitem that stands for the dropped history; client code then decides which visible items are kept alongside it (user messages, hook prompts, small non-final agent messages, optionally client tool outputs and client developer messages) within a 64,000-token newest-first budget.- Held by
codex-rs/core/src/compact_remote_v2.rs:464
F7 Should a speculative background compaction start now, and may its result be used? RULING · code
- Answered how
Code starts a background remote compaction once usage passes
async_compaction_threshold_percentof the full window (and before the hard limit), at most once per history version/model/hash/auth generation, and later adopts the candidate only if the history version it was built from is still current.- Held by
codex-rs/core/src/session/async_compaction.rs:172
F8 Should the finished turn compact before the next user message (turn-end compaction)? RULING · code
- Answered how
Code compacts after a turn with no follow-up only when auto-summarization is enabled and
model_post_turn_compact_threshold_percentis above 0; then, provided no input is pending and the turn was not cancelled, it compacts when usage is at or above that percent of the usable window (or the hard limit is reached), or when a ready background candidate exists. A threshold of 0 turns off turn-end compaction entirely, including adoption of a ready candidate (codex-rs/core/src/session/turn.rs:810-856;codex-rs/core/src/session/context_window.rs:111-117).- Held by
codex-rs/core/src/session/context_window.rs:112
F9 In token-budget mode, when should the context window be reset, and what should be carried across it? RULING · llm
- Answered how
The model decides: it is told its remaining tokens (a reminder once below a threshold, and
get_context_remainingon demand) and may callnew_contextto request a fresh window; with the history-notes extension it can write and read notes through backend tools before and after the reset.- Held by
codex-rs/core/src/tools/handlers/new_context_window.rs:61
F10 When a token-budget window is full and the model has not reset it, what survives the forced reset? RULING · code
- Answered how
Code installs a fresh window holding only the rebuilt initial context plus (when their features are on) retained client tool outputs and client developer messages, newest first within 64,000 tokens; every user and assistant message of the old window is dropped and nothing is summarized.
- Held by
codex-rs/core/src/session/mod.rs:5136
F11 Has the whole agent tree spent its rollout token budget? RULE · code
- Answered how
Code adds each response's weighted usage (server-provided
codex_rollout_budget_units, or output tokens and non-cached input tokens times configured weights) to one counter shared by the root thread and every sub-agent, and once it reacheslimit_tokensevery later usage report raisesSessionBudgetExceededunless the config setsenforce_limitto false (default true); reminders are injected as thresholds are crossed.- Held by
codex-rs/core/src/rollout_budget.rs:67
F12 How much of each tool output is kept in the model's history? RULING · code
- Answered how
Code truncates every function and custom-tool output to the model's truncation policy (tokens or bytes, plus a serialization allowance) or to a per-item override when the tool supplied one, at the moment it is recorded in live history; the rollout keeps the full payload.
- Held by
codex-rs/core/src/context_manager/history.rs:600
F13 Has the active goal used up its token budget? RULE · code
- Answered how
The state database adds each accounted token delta to the goal and, in the same UPDATE, flips an active goal to
budget_limitedonce tokens used reach the goal's budget; the goal extension then injects a one-time budget-limit steering message into the running turn.- Held by
codex-rs/state/src/runtime/goals.rs:564
F14 Should the running turn stop now? (the person presses Esc / interrupt) RULING · human
- Answered how
The person at the TUI (or an app-server client) sends
Op::Interrupt; the session aborts the active task and its tools.- Held by
codex-rs/core/src/session/handlers.rs:514
G. Judging the result
G1 Is this turn finished? RULING · llm
- Answered how
The model decides by what it emits: a sampling step whose output contains no tool call leaves
needs_follow_upfalse, and unless user input is pending the loop runs the Stop hooks and ends the turn with that last assistant message.- Held by
codex-rs/core/src/session/turn.rs:636
G2 Do the user's Stop / SubagentStop hooks accept that the agent is done? RULING · external
- Answered how
User-configured hook commands (external) are run with the last assistant message and a
stop_hook_activeflag; if any asks to stop, the turn ends; if any blocks with a continuation prompt, that prompt is recorded as a hook message and the turn continues.- Held by
codex-rs/core/src/hook_runtime.rs:449
G3 Does the code change under review have bugs, and is the patch correct? (/review) RULING · llm
- Answered how
A one-shot sub-agent thread running the review model (
review_model, else the session model) with the review rubric as its base instructions and the target-specific review request as its user message explores the repository and returns findings plus an overall correctness verdict.- Held by
codex-rs/core/src/tasks/review.rs:119
G4 Which findings did the reviewer report? (parsing the review reply) RULE · code
- Answered how
Code tries strict JSON, then the substring from the first
{to the last}, and otherwise wraps the whole reply asoverall_explanationwith zero findings and an empty correctness verdict.- Held by
codex-rs/core/src/tasks/review.rs:193
G5 Has the thread goal been achieved (or is it genuinely blocked)? RULING · llm
- Answered how
The model decides by calling
update_goalwithcompleteorblocked; code accepts any ofcomplete,blocked,pausedfrom the model, charges final usage, and stops automatic continuation.- Held by
codex-rs/ext/goal/src/tool.rs:254
G6 Should the agent start another turn on its own to keep pursuing the goal? RULING · code
- Answered how
When the thread goes idle and its goal is still
active, code starts a new turn whose only input is the continuation steering message, unless continuation was deferred or the thread or tools are unavailable.- Held by
codex-rs/ext/goal/src/runtime.rs:476
G7 Has the goal loop stopped making progress, so the goal should be marked blocked without the model saying so? RULING · code
- Answered how
Code marks an active goal
blockedafter three consecutive automatic goal turns with no activity (empty final or interrupted), after three consecutive turns whose executions failed with no successful tool, or on any turn error; usage limits mark itusage_limited.- Held by
codex-rs/ext/goal/src/accounting.rs:245
H. Delegation
H1 Should part of this work go to a sub-agent, of which role and model, with what instructions? (multi-agent V1) RULING · llm
- Answered how
The model decides by calling
spawn_agent(V1 namespace) with a message or items, an optionalagent_typerole, model, reasoning effort andfork_context; code validates the arguments and starts a child thread.- Held by
codex-rs/core/src/tools/handlers/multi_agents/spawn.rs:65
H2 Should part of this work go to a sub-agent, and how much parent history should it inherit? (multi-agent V2) RULING · llm
- Answered how
The model calls
spawn_agent(V2) with a requiredtask_nameandmessageplus optional role, model, reasoning effort andfork_turns(allornone); a missing or blankfork_turnsmeansall, so the child inherits the full parent history unless the model asks fornone(codex-rs/core/src/tools/handlers/multi_agents_v2/spawn.rs:221-233); code starts a child at a task path under the caller.- Held by
codex-rs/core/src/tools/handlers/multi_agents_v2/spawn.rs:115
H3 Is this sub-agent nested too deep to spawn (or resume)? RULE · code
- Answered how
For V1 only, code computes the child's depth from the caller's session source and refuses when it exceeds
agent_max_depth, telling the model "Agent depth limit reached. Solve the task yourself."; V1 also hides the spawn tool at that depth.- Held by
codex-rs/core/src/agent/registry.rs:94
H4 Are there already too many sub-agents to start another? RULE · code
- Answered how
Code reserves a spawn slot against a cap: V1 counts spawned threads against
agent_max_threads(defaultDEFAULT_AGENT_MAX_THREADS); V2 counts resident threads againstmax_concurrent_threads_per_session - 1and, when full, first tries to unload an idle resident (H5) before refusing withAgentLimitReached.- Held by
codex-rs/core/src/agent/registry.rs:103
H5 Which idle sub-agent is unloaded to make room for a new one? (V2) RULING · code
- Answered how
Code walks residents oldest-touched first, skips the protected thread and unstarted (
PendingInit) agents, and evicts the first one that is not busy; an evicted agent's mail is transferred and it can be reloaded later.- Held by
codex-rs/core/src/agent/control/residency.rs:239
H6 What does a sub-agent inherit: model, instructions, permissions, working directory, history? RULING · code
- Answered how
Code builds the child config from the parent's live turn (model, reasoning, base and developer instructions, token budget preference), layers the requested role and model overrides, and then re-applies the parent turn's approval policy, approvals reviewer, cwd and permission profile last, so a role cannot widen them.
- Held by
codex-rs/core/src/agent/child_config.rs:180
H7 Should this agent send a message to another agent now, without starting its turn? (V2 send_message) RULING · llm
- Answered how
The model calls
send_messagewith a target task path and message; code resolves the target in the caller's tree and queues the message on the recipient's mailbox.- Held by
codex-rs/core/src/tools/handlers/multi_agents_v2/send_message.rs:40
H8 Should this agent hand another agent a follow-up task and wake it? (V2 followup_task) RULING · llm
- Answered how
The model calls
followup_taskwith a non-root target and message; code delivers it and triggers a turn if the target is idle.- Held by
codex-rs/core/src/tools/handlers/multi_agents_v2/followup_task.rs:40
H9 Should this agent redirect another agent's work, interrupting it or queueing? (V1 send_input) RULING · llm
- Answered how
The model calls
send_inputwith an agent id, a message or items, and aninterruptflag; code loads the target if needed, interrupts it first when asked, and delivers the input.- Held by
codex-rs/core/src/tools/handlers/multi_agents/send_input.rs:48
H10 Should this agent interrupt another agent's current turn? (V2 interrupt_agent) RULING · llm
- Answered how
The model calls
interrupt_agent(V2); code refuses the root and the caller itself, interrupts the target's current turn (the agent stays available), and returns its previous status.- Held by
codex-rs/core/src/tools/handlers/multi_agents_v2/interrupt_agent.rs:45
H11 How long should the parent wait for its sub-agents before doing something else? RULING · code
- Answered how
The model picks
timeout_mswhen callingwait_agent. V1: code rejects zero or negative values and clamps the rest between fixed constants (codex-rs/core/src/tools/handlers/multi_agents/wait.rs:95-103). V2: code reads configurable minimum, maximum and default, REJECTS a value above the maximum, raises a smaller one to the minimum, and uses the default when none is given (codex-rs/core/src/tools/handlers/multi_agents_v2/wait.rs:54-66).- Held by
codex-rs/core/src/tools/handlers/multi_agents/wait.rs:102
H12 What does a finished sub-agent hand back to its parent? RULING · code
- Answered how
Code turns the child's terminal status into one inter-agent message: the child's last assistant message verbatim on completion (an empty message when it had none), an error truncated to 900 tokens with a fixed next-action line on error, "Agent shut down." / "Agent was not found.", and nothing at all for an interrupted child. A child stopped after repeated Guardian denials gets a separate message whose fixed line tells the parent to tell the user and not resume or retry until the user confirms (
codex-rs/core/src/session_prefix.rs:9-55).- Held by
codex-rs/core/src/session_prefix.rs:26
H13 Is a message-board notice small enough, and from a valid member, to be delivered into an agent's turn? RULING · code
- Answered how
Code checks that the actor belongs to this board and owns its tree path, and drops a remote board notice whose content plus paths exceed 1,024 bytes (the post stays readable through the board tools).
- Held by
codex-rs/core/src/agent_message_board.rs:274
H14 Should this agent close another agent, and every open descendant of it? (V1 close_agent) RULING · llm
- Answered how
The model calls
close_agent(V1) with any agent id; code shuts down that thread and every live descendant and returns the target's previous status. No root, self or ancestry check.- Held by
codex-rs/core/src/tools/handlers/multi_agents/close_agent.rs:42
I. Learning and feedback
I1 Should the background memory pipeline run at this session start at all? RULING · code
- Answered how
Code starts it only for a non-ephemeral root session with
Feature::MemoryToolon and a state DB, and then runs phases 1 and 2 only if the Codex rate-limit windows still have at leastmin_rate_limit_remaining_percentheadroom.- Held by
codex-rs/memories/write/src/start.rs:80
I2 Which past threads are eligible to be learned from? RULING · code
- Answered how
The state DB claims, per startup, a bounded set of threads whose
memory_modeisenabled, from allowed sources, inside the age window, idle at leastmin_rollout_idle_hours, not the current thread, and not already claimed by another worker.- Held by
codex-rs/state/src/runtime/memories.rs:244
I3 Has this thread seen external content, so it must not feed memories? RULING · code
- Answered how
When
memories.disable_on_external_contextis on, code marks the threadpolluted(and queues forgetting) when a response item is a web search, tool search or a call-less function output, when a tool output declares external context, or when an MCP server is flagged as polluting.- Held by
codex-rs/core/src/stream_events_utils.rs:157
I4 What should be remembered from a past thread? (memory phase 1, extraction) RULING · llm
- Answered how
A language model reads the thread's filtered, secret-redacted rollout and returns a structured memory (
raw_memory,rollout_summary, optionalrollout_slug); an empty memory or summary is stored as "no output".- Held by
codex-rs/memories/write/src/phase1.rs:311
I5 Which extracted memories are worth consolidating? (phase 2 selection) RULING · code
- Answered how
Code keeps non-empty memories used (or created) within
max_unused_days, ranks them by usage count, then recency, and passes the topmax_raw_memories_for_consolidationto phase 2; anything not selected is deleted from the workspace by the sync.- Held by
codex-rs/state/src/runtime/memories.rs:484
I6 How should the memory store be rewritten from the new inputs? (phase 2, consolidation agent) RULING · llm
- Answered how
An internal sub-agent (consolidation model) is pointed at the memories root and a git-style workspace diff, and edits
MEMORY.md,memory_summary.md,skills/and related files itself, with approvalsNever, collab off, no MCP servers, and (under a managed profile) write access to the memories root only, no network.- Held by
codex-rs/memories/write/src/phase2.rs:177
I7 Did the model actually use a memory? (citation → usage count) RULING · llm
- Answered how
The model decides by emitting a memory citation block in its answer; code parses
<citation_entries>/<rollout_ids>blocks and incrementsusage_countfor each cited thread, which then ranks memories in I5.- Held by
codex-rs/core/src/stream_events_utils.rs:204
I8 Is the consolidated memory well-formed enough to become the new baseline? RULE · code
- Answered how
Code removes any symlinks (and fails if there were any), requires
MEMORY.mdto be a file (V1), requiresmemory_summary.mdto start withv1, and for V2 requires four section headers and under 10,000 bytes; only then is the git baseline reset and the job marked successful.- Held by
codex-rs/memories/write/src/workspace.rs:76
I9 Should what the user just said be written down as a memory note? (ad-hoc note tool) RULING · llm
- Answered how
The model decides to call
add_ad_hoc_notewith a timestamped filename and verbatim Markdown; the backend appends it to the ad-hoc notes, which phase 2 later consolidates.- Held by
codex-rs/ext/memories/src/tools/ad_hoc_note.rs:77
I10 How was this? (the person's /feedback rating; the picker's own title) RULING · human
- Answered how
The person picks bug, bad result, good result, safety check or other in the TUI feedback picker; the category goes to OpenAI with the report.
- Held by
codex-rs/tui/src/bottom_pane/feedback_view.rs:148
I11 May the session's logs and transcript go with the feedback? RULING · human
- Answered how
The person answers "Upload logs?" after seeing the list of files that would be sent (the header starts with
codex-logs.log,client-logs.txt (if available)and the doctor report,codex-rs/tui/src/bottom_pane/feedback_view.rs:251-259; the function also takes the rollout path and an optional sandbox log,:222-224); yes and no both continue to a note.- Held by
codex-rs/tui/src/bottom_pane/feedback_view.rs:219
How this map was made
Four readers each took a part of the agent and wrote seat cards from the source at an earlier commit. The map's author re-read every seat against the cited lines and corrected what the source did not support. For this edition the cards were carried to the commit named above: citations whose lines moved were renumbered, and every shown card citing code that changed was re-read at that commit. Reviews by a model from another family (read-only, at the commit named above) checked the answers against the code, and each of their findings was checked against the code before anything changed. Nothing on this page was produced by running their code.