What we did upstream
claude-sdlc-harness now ships a communication-style file at ~/.claude/output-styles/operator.md, activated by a single settings key ("outputStyle": "Operator"). It targets a senior engineer reader: conclusion in the first sentence, one idea per sentence under ~20 words, active voice with the actor named, no preamble or closing offers, one word for one meaning, and "state what you verified and how" instead of "everything looks good."
The idea came from a widely-shared suggestion to put ASD-STE-100 (Simplified Technical English, the aerospace controlled-language standard) into CLAUDE.md. Worth reading the community thread's own caveat before copying it: STE is a controlled vocabulary with an approved word list. Telling a model "use ASD-STE-100" without that list gets you the register, not the standard, and several people reported it decaying after ~100k tokens. So we lifted the transferable rules and skipped the label.
The file, verbatim, is on the upstream branch fix/617-shape-and-target-required at ~/.claude/output-styles/operator.md — it is user-level config, so it is not in the repo tree. Copy the rules from this issue rather than hunting for the path.
The question for this repo
Does Codex CLI have an equivalent, and if so, is it worth wiring the same way? Genuinely unknown here — nobody has checked. Concretely:
- Does
codex support a persistent user-level style/persona file, the way Claude Code supports ~/.claude/output-styles/*.md plus an outputStyle settings key?
- If not, what is the nearest mechanism —
AGENTS.md, a config key in ~/.codex/config.toml, a -c override, a system-prompt append?
- Does it survive long sessions, or decay the way the community reports the
CLAUDE.md approach does?
Do not port this on faith. The rule that applies is the same one upstream keeps relearning: an instruction you have not run is not a claim you may ship. If the mechanism does not exist, the honest outcome of this issue is "Codex has no equivalent; here is what it has instead," written down — not a file added because the sibling repo has one.
Why it might matter beyond ergonomics
This is not only about tone. In this ecosystem Codex is the adversarial cross-model reviewer, and its output is read under time pressure while a merge is blocked. A reviewer that leads with its verdict and separates observed from inferred is materially cheaper to act on than one that narrates its way to a conclusion.
There is a live example upstream. A review leg returned CONFIDENCE: 93 with zero findings and never said what the missing 7% was. The merge gate refused it — correctly — and the recovery cost a full extra round to ask "what is the 7%", get the answer (an identity binding it had not checked and a redundancy claim it had asserted rather than measured), and have it re-post at 97. A style that requires naming the residual alongside the number would have collapsed that round into the first message.
Suggested rules, if a mechanism exists
- Conclusion, verdict, or failure in the first sentence. Evidence after.
- One idea per sentence. Active voice. Name the actor.
- No preamble, no restating the question, no closing offer of further help.
- One word for one meaning — no synonym variety in technical writing.
- Separate what was observed from what is inferred; say "I have not verified X" rather than implying you did.
- Report failures immediately and plainly; never bury a failure under what succeeded.
- Corrections in one sentence, then move on.
- Length is a cost. Spend it when it buys the reader something, never to appear thorough.
Acceptance
Filed from claude-sdlc-harness as a cross-repo share. No urgency and no dependency — upstream is mid-flight on #617 and this is not a blocker for it.
What we did upstream
claude-sdlc-harnessnow ships a communication-style file at~/.claude/output-styles/operator.md, activated by a single settings key ("outputStyle": "Operator"). It targets a senior engineer reader: conclusion in the first sentence, one idea per sentence under ~20 words, active voice with the actor named, no preamble or closing offers, one word for one meaning, and "state what you verified and how" instead of "everything looks good."The idea came from a widely-shared suggestion to put ASD-STE-100 (Simplified Technical English, the aerospace controlled-language standard) into
CLAUDE.md. Worth reading the community thread's own caveat before copying it: STE is a controlled vocabulary with an approved word list. Telling a model "use ASD-STE-100" without that list gets you the register, not the standard, and several people reported it decaying after ~100k tokens. So we lifted the transferable rules and skipped the label.The file, verbatim, is on the upstream branch
fix/617-shape-and-target-requiredat~/.claude/output-styles/operator.md— it is user-level config, so it is not in the repo tree. Copy the rules from this issue rather than hunting for the path.The question for this repo
Does Codex CLI have an equivalent, and if so, is it worth wiring the same way? Genuinely unknown here — nobody has checked. Concretely:
codexsupport a persistent user-level style/persona file, the way Claude Code supports~/.claude/output-styles/*.mdplus anoutputStylesettings key?AGENTS.md, a config key in~/.codex/config.toml, a-coverride, a system-prompt append?CLAUDE.mdapproach does?Do not port this on faith. The rule that applies is the same one upstream keeps relearning: an instruction you have not run is not a claim you may ship. If the mechanism does not exist, the honest outcome of this issue is "Codex has no equivalent; here is what it has instead," written down — not a file added because the sibling repo has one.
Why it might matter beyond ergonomics
This is not only about tone. In this ecosystem Codex is the adversarial cross-model reviewer, and its output is read under time pressure while a merge is blocked. A reviewer that leads with its verdict and separates observed from inferred is materially cheaper to act on than one that narrates its way to a conclusion.
There is a live example upstream. A review leg returned
CONFIDENCE: 93with zero findings and never said what the missing 7% was. The merge gate refused it — correctly — and the recovery cost a full extra round to ask "what is the 7%", get the answer (an identity binding it had not checked and a redundancy claim it had asserted rather than measured), and have it re-post at 97. A style that requires naming the residual alongside the number would have collapsed that round into the first message.Suggested rules, if a mechanism exists
Acceptance
--helpoutput that proves itFiled from
claude-sdlc-harnessas a cross-repo share. No urgency and no dependency — upstream is mid-flight on #617 and this is not a blocker for it.