Stop coding agents from silently choosing what your requirement means.
Ambiguity Compiler turns one vague issue into competing behavioral contracts, shows the test cases where they disagree, and lets your team lock the intended behavior before Codex writes code.
No account required. Uses a synthetic TypeScript repository.
Valid code can still implement the wrong behavior.
- 01Vague issue enters.
- 02Agent assumes details.
- 03Existing tests pass.
- 04Product behavior is wrong.
- 01Vague issue enters.
- 02Behavioral forks become visible.
- 03Human selects.
- 04Tests enforce the choice.
“Users can export their monthly transactions.”— timezone boundary and pending-state semantics are unresolved.
Compile intent before implementation.
- Step 01Scope the context
You approve a small, sanitized set of file excerpts before anything is compiled.
- Step 02Compare executable contracts
The compiler outputs 2–3 candidate contracts with acceptance criteria and evidence.
- Step 03Lock the intended behavior
A human explicitly confirms one contract. The others remain visible, not deleted.
- Step 04Generate tests and verify
Codex materializes Vitest contracts, runs them, and records a decision receipt.
The interpretations only matter if their behavior differs.
| Discriminating scenario | Contract A Local calendar month | Contract B UTC calendar month | Contract C Rolling 30 days |
|---|---|---|---|
March 1, 00:15 in user timezone (Feb 28 UTC) { occurredAt: "2025-02-28T18:45:00Z", tz: "Asia/Kolkata" } | Included In user-local March | Excluded In UTC February | Included Within last 30 days |
Pending transaction inside window { state: "pending", occurredAt: "2025-03-15T10:00:00Z" } | Excluded Pending excluded | Excluded Pending excluded | Excluded Pending excluded |
Exact month-end boundary { occurredAt: "2025-03-31T23:59:59Z", tz: "UTC" } | Included Last second of March | Included Last second of March UTC | Included If requested by April 30 |
Empty result month { userId: "u1", month: "2024-11" } | Empty Header-only CSV | Empty Header-only CSV | Empty Rolling window may be non-empty |
- Contract A · Local calendar monthIncluded
- Contract B · UTC calendar monthExcluded
- Contract C · Rolling 30 daysIncluded
- Contract A · Local calendar monthExcluded
- Contract B · UTC calendar monthExcluded
- Contract C · Rolling 30 daysExcluded
- Contract A · Local calendar monthIncluded
- Contract B · UTC calendar monthIncluded
- Contract C · Rolling 30 daysIncluded
- Contract A · Local calendar monthEmpty
- Contract B · UTC calendar monthEmpty
- Contract C · Rolling 30 daysEmpty
Each layer has one job.
Reads scoped repository context. Materializes tests locally. Runs and fixes code.
Compiles plausible contracts. Separates evidence from assumptions. Generates discriminating scenarios.
Validates schemas. Enforces state transitions. Hashes locked contracts. Records verification.
The MCP server is the authoritative state and tool layer between Codex, the model, and your workspace.
Built as a real Codex plugin, not a prompt wrapper.
Text alternative to diagram
- Codex plugin
- Scoped context
- MCP tools
- GPT-5.6 (structured outputs)
- Contract store
- Embedded comparison UI
- Local tests + receipt
Supported ambiguity
When does the period begin and end?
"monthly export" — user timezone vs. UTC vs. rolling 30 days.
Who can perform the action, and on whose resource?
"Admins can retry failed jobs" — any admin, or tenant admin only?
What happens to pending, failed, cancelled or deleted records?
"Notify owner on completion" — success only, or any terminal state?
Your repository stays local. Only approved context leaves it.
- Context preview before transmission
- Secret scanning on excerpts
- Excerpt and size limits
- No server-side code execution
- Human confirmation before selection
- No code edits before selection
These are hardening measures, not absolute guarantees.