Using an output schema makes Codex return a final response that matches a defined JSON object instead of free-form text. That is useful for scripts, CI jobs, and other automation that need stable keys from codex exec.
The --output-schema option points Codex at a JSON Schema file that describes the final assistant message. The final message printed to stdout and the optional file written by -o both follow that schema, while --json remains the separate mode for full JSONL event streaming.
A loose schema can still allow missing or extra fields, so keep required keys explicit and set "additionalProperties": false when the downstream consumer expects a fixed shape. Run the command from a trusted repository directory for the normal path, and use repository-check bypass flags only when the working directory policy blocks the run.
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["ok", "action_required"]
},
"summary": {
"type": "string"
}
},
"required": ["status", "summary"],
"additionalProperties": false
}
The schema is passed by file path, so save it before running Codex.
$ codex exec --output-schema schema.json -o result.json "Return status ok and summary schema verified."
{"status":"ok","summary":"schema verified"}
Codex prints the final JSON to stdout and writes the same final message to result.json when -o is present. Related: How to save the last Codex response to a file
If Codex stops with a trusted-directory or repository-check error, use How to fix Codex trusted directory error or How to skip Codex git repository checks for that separate policy issue.
$ cat result.json
{"status":"ok","summary":"schema verified"}
That file is the clean handoff point for another script, CI step, or parser that expects stable keys instead of free-form text.