Tool · Codex · OpenAI
exec_command
What matters here0 of 6 invariants hold · 3 fails · 3 unverified
- Offset base—8 others recorded
- Announces truncationinvariant—all 7 hold
- Binary not silentinvariantfailssrc4 of 5 hold
- Staleness checkinvariantfailssrc3 of 9 hold
- Regex dialectwhatever is on the machinesrconly one of 11
- Announces truncationinvariant—all 18 hold
- Agrees with readinvariant—6 of 7 hold
- Gitignorewhatever is on the machinesrconly one of 18
The facts the registry marks decision-changing, with how the other implementations answered. An invariant may be shown as pass/fail; a design choice never is, however unusual it looks.
How this differs from most implementations
- Output wrapperraw stdoutvs plain in 6 of 8
- Default line capnonevs 2000 in 6 of 7
- Byte / char capnonevs 50 KB in 3 of 5
- Per-line capnonevs 2000 chars in 4 of 4
- Giant single linenonevs per-line cap in 4 of 6
- Tools per harnessno search toolvs two tools in 18 of 19
- Glob syntaxwhatever is on the machinevs ripgrep --glob in 4 of 7
- Case sensitivitywhatever is on the machinevs sensitive, model can ask in 3 of 5
- How "no matches" readsempty stdoutvs sentence in 16 of 16
- Searches hidden fileswhatever is on the machinevs yes in 7 of 13
Derived by comparing every recorded value against the other implementations of the same capability. Differing is not a defect unless the row is marked an invariant.
Reached indirectly. Reached through the shell rather than a dedicated tool.
Description, as the model sees it
Not recorded yet — the verbatim description has not been captured for this tool.
Registered schema
Not recorded yet — the schema as registered has not been captured for this tool.
Observed · Read
compare all →| Fact | This tool | Across all implementations |
|---|---|---|
| Output shape | 3 of 3 recorded | |
| Dedicated read tool | none — cat/sed via exec_commandsrc | |
| Line numbering | nonesrc Raw bytes, no numbering at all. | like 2 of 7N + TAB ×2 · N: ×2 +12 unverified |
| Output wrapper | raw stdoutsrc | only one of 9plain ×6 · <path>/<type>/<content> ×2 |
| Limits | 3 of 4 recorded | |
| Default line cap | nonesrc | only one of 82000 ×6 · 1000 ×11 unverified |
| Byte / char cap | nonesrc | only one of 650 KB ×3 · 100 KB ×1 +12 unverified |
| Per-line cap | nonesrc | only one of 52000 chars ×42 unverified |
| Whichever hits first | — | 6 others recordedlines or bytes ×4 · chars ×1 +12 unverified |
| Pagination | 0 of 5 recorded | |
| Offset base | — n/a | 8 others recorded1-indexed ×7 · 0-indexed ×1 |
| Announces truncationinvariant | — No read tool; the shell returns whatever the command produced. | all 7 holdtrue ×71 unverified |
| Continuation hint | — | 7 others recorded(Showing X-Y of N. Use offset=Z) ×2 · (truncated) ×1 +41 unverified |
| Reports total lines | — | 4 others recordedyes ×2 · linesShown[] ×1 +14 unverified |
| Out-of-range offset | — n/a | 2 others recordedexplicit error w/ line count ×26 unverified |
| Non-text | 4 of 4 recorded | |
| Binary content never enters context silentlyinvariant | failssrc Reading through the shell puts raw bytes straight into context with nothing to mark them as binary. | 4 of 5 holdtrue ×44 unverified |
| Binary files | raw bytes into contextsrc | only one of 5error: Cannot read binary file ×2 · refuse ×1 +14 unverified |
| Images | separate view_imagesrc | only one of 9attachment (jpeg/png/gif/webp) ×1 · attachment + mime sniff ×1 +6 |
| Giant single line | nonesrc | only one of 7per-line cap ×4 · char budget absorbs it ×1 +12 unverified |
| Errors | 3 of 4 recorded | |
| Missing path | shell errorsrc | only one of 4Did you mean one of these? ×2 · error ×15 unverified |
| Path is a directory | listssrc | only one of 4lists entries ×2 · error ×15 unverified |
| Empty file | empty stdoutsrc | only one of 2explicit reminder ×17 unverified |
| Non-vision model | — | 2 others recordedexplicit note in output ×1 · requires image-capable model ×15 unverified |
| Correctness | 2 of 3 recorded | |
| Mixed line endings | rawsrc | only one of 2renders CR visibly ×17 unverified |
| Staleness check before writeinvariant | failssrc | 3 of 9 holdtrue ×3 |
| Line-number contamination guard | — n/a (no numbers) | 2 others recordedinstructs model to strip prefix ×1 · write-side detector rejects N| content ×1 |
Observed · Code search
compare all →| Fact | This tool | Across all implementations |
|---|---|---|
| Shape | 3 of 3 recorded | |
| What it searches | shellsrc | only one of 20by-content ×9 · by-name ×9 +1 |
| Tools per harness | no search toolsrc The same answer Codex gives for read. The shell is already there and it composes, but nothing about the search is the harness's to shape. | only one of 20two tools ×18 · one tool ×1 |
| Search engine | whatever is on the machinesrc rg if the user installed it, grep otherwise, with different regex dialects and different default scope. The harness makes no choice here, so neither does the agent. | only one of 19bundled ripgrep ×6 · ripgrep ×2 +101 unverified |
| Query language | 3 of 3 recorded | |
| Regex dialect | whatever is on the machinesrc | only one of 11Rust regex ×8 · varies by backend: Rust regex, git grep, POSIX, or JS RegExp ×1 +1 |
| Glob syntax | whatever is on the machinesrc | only one of 8ripgrep --glob ×4 · fd --glob ×1 +22 unverified |
| Case sensitivity | whatever is on the machinesrc | only one of 6sensitive, model can ask ×3 · always insensitive, not configurable ×213 unverified |
| Result shape | 3 of 4 recorded | |
| Line numbers in results | only if the model askssrc grep prints line numbers with -n and not otherwise, so whether a search result can be turned back into a location depends on the flag the model happened to type. | only one of 11Line N: ×3 · path:N: ×2 +5 |
| Result cap | nonesrc No cap of the harness's own; a broad pattern returns everything it matched, straight into the context window. | only one of 20100 files ×4 · 100 matches ×3 +10 |
| Announces truncationinvariant | — Nothing truncates, so there is nothing to announce. The invariant is not met or broken here — it does not arise. | all 18 holdtrue ×181 unverified |
| How "no matches" reads | empty stdoutsrc The one case on this page where a search that found nothing and a search that failed look identical to the model. | only one of 17sentence ×163 unverified |
| Agreement with read | 1 of 2 recorded | |
| Search line N is read line Ninvariant | — No read tool either; both halves are the shell. | 6 of 7 holdtrue ×6 · false ×12 unverified |
| Search counts as having read | no read tracking at allsrc | only one of 2yes — matched files are recorded as partial reads ×19 unverified |
| Scope | 3 of 3 recorded | |
| Respects .gitignore | whatever is on the machinesrc rg does, grep -R does not. | only one of 18yes ×8 · no, deliberately ×2 +52 unverified |
| Binary content never enters contextinvariant | failssrc Same failure as its read: grep without -I puts matched bytes from a binary file straight into context with nothing marking them as binary. | 2 of 3 holdtrue ×28 unverified |
| Ordering | 1 of 1 recorded | |
| Result ordering | whatever is on the machinesrc | only one of 16modification time, newest first ×5 · ripgrep traversal order ×5 +54 unverified |