Key Findings for Codex’s Web Search Behavior, GPT-interpreted - Extension
Test Workflow
- Run
python scripts/framework.py --test {test_id} --track vscode-codex-interpreted - Review terminal output
- Copy the provided prompt asking agent to report on fetch results:
character count, token estimate,
truncation status, content completeness, Markdown formatting integrity, and tool visibility - Open a new session in VS Code Codex, paste the prompt into the chat window
- Approve
curlescalation and shell permission requests; skip requests for runs of local scripts - Capture the agent’s full response; observe the gap between self-report and actual retrieval behavior
as the interpreted finding - Log structured metadata as described in
framework-reference.md - Ensure results saved to
/results/vscode-codex-interpreted/results.csv
Platform Limit Summary
| Limit | Observed |
|---|---|
| Hard Character Limit |
None detected via curl: fetches returned payloads from EC-3’s 254 chars to BL-3’s 4,848,853 chars;web path reflects a line-indexed window, not a byte ceiling |
| Hard Token Limit |
None detected via curl: counts ranged from 38 to 1,212,213; SC-2’s 134804 tokens truncated marker against an Original token count: 144884 largest display cap, terminal-rendering cap independent of HTTP retrieval, consistent with T1’s EC-6 finding, different threshold |
| Output Consistency |
LLM-and-level-stratified: same URL + reasoning level regularly produce distinct retrieval strategies, output;BL-1’s GPT-5.5 Medium,Extra High web-only at ~85K chars while Light (Low), High escalate to 509,025 chars with same LLM |
| Content Selection Behavior |
Two-tier retrieval: web returns a rendered, line-indexed extraction; full content requires curl escalation with network permissions; OP-4’s GPT-5.4-Mini Extra High exposed wordlim:200 parameter, supporting T1’s SC-1 inference of agent-adjustable soft-default rather than fixed extraction size |
| Truncation Pattern |
At least three independent layers: web line-indexed window, LLM-page-dependent; terminal display cap,SC-2’s 134804 tokens truncated marker; curl response body, never truncated on successful escalations;BL-3 shows window cutpoint on structural boundary against terminal display cutpoint arbitrary |
webLine-Indexed Window |
Page-architecture-dependent, sharper than T1: EC-6:L54 across runs with most LLM + reasoning levels, SC-2:L139-140, SC-3:L353 comparably tight; LLM splits elsewhere - OP-1:L304/L556, OP-2:L317-318/L590-591, OP-4:L237/L616; BL-1:L420 mostly holds with L119 outlier; SC-1:L344; SC-4:L657 |
curlEscalation |
Dominant, not universal: curl use 99/119 runs; success often led to saving full HTTP response; BL-2, BL-3, OP-4, OP-2, SC-1 heavy curl use; EC-3 rare due to small size; BL-3, SC-2 retrieve full bodies only JS-rendered scaffolding, not prose; attempts with Browser, headless Chrome, Playwright failed |
| Session Contamination |
Structurally reduced, not eliminated: /private/tmp clears between T2 sessions, no run wrote to a project-persistent directory; SC-4’s GPT-5.4-Mini Extra High displayed workspace substitution; filename collision risk from independently fetched runs sharing path often, most heavily EC-6, OP-4 |
| Post-Session Auto-Editing | Data integrity risk, reversed from T1: confirmed across most runs; all BL-1, BL-2, EC-1 12/13 runs, half of OP-4, SC-4, OP-4; T1 double report resolves during cleanup, T2 single report doubles; screenshot capture at runtime remains primary record |
| JS-Rendered Pages |
Structural retrieval failure: SC-2, Next.js hydrated shell ~578,000 chars with prose absent regardless of path or reasoning level; BL-3 different tutorial page than T1, same pattern at ~4.5 to 4.85 million chars |
Cache MissFailure |
No longer systematic for the URL that defined it: only 1/13 EC-6 runs emitted Cache Miss versus 17/20 in T1; most return windowed L54 extraction instead of failure; BL-3 Cache Miss 6/8 web attempts |
| Self-reported Completeness | Failure abstraction mirrors T1: agents sanitize issues into success language rather than debugging or correcting misuse, users lose learning opportunities, analysis in Retrieved-Report Mismatches; BL-3 GPT-5.5 Extra High, GPT-5.4-Mini Low include outcome mischaracterizations, OP-1, OP-2, OP-4, SC-4 name failures without examination |
Results Details
| Track | T2 GPT-interpreted, VS Code with Codex Extension |
| Agents Observed | GPT-5.4-Mini, GPT-5.4, GPT-5.5* |
| Reasoning Levels | Light/Low, Medium, High, Extra High |
| Total Runs | 119 |
| Distinct URLs | 13 |
| Input Size Range | EC-3 254 chars to BL-3 ~4.85M chars |
| Truncation Events | 82 / 119 - 69% of runs report truncation in some form - yes includes web use, reported explicitly: 22- mixed, curl + web use, limits named: 44- implicit, pivot to curl citing web limit in reasoning: 16- no, curl-only and/or without truncation signal: 37 |
| Average Output Size | 429,563 chars |
| Output Size Range | 149 - 4,849,033 chars |
| Average Token Use | 102,606 tokens |
| Token Count Range | 38 - 1,212,213 tokens |
| Workspace Substitution | 1 / 119 runs explicitly reasoned; filename collision risk 16+ runs |
curl Escalation |
Dominant retrieval path; present 57%, in 68 / 119 runs |
web Bypass |
GPT-5.5 skipped web at least one reasoning level in BL-3, EC-1, EC-6, OP-4, SC-1;GPT-5.4-Mini, GPT-5.4 bypass occasionally, less consistently |
*Three-LLM roster reflects OpenAI’s retirement of GPT-5.2, GPT-5.3-Codex, GPT-5.4 between tracks; GPT-5.4 reappeared for EC tests, analysis in LLM Retirement.
Truncation + Inaccessibility
As in T1, agentic task completion isn’t a meaningful signal
for page readability on T2. Retrieval strategy still governs content accessibility more than reasoning level does: web
returns a line-indexed rendered extraction, and it’s up to the agent to paginate through the prose or escalate past it,
which most agents eventually did, but not consistently.
T2 diverges from T1 in how tightly the web ceiling holds across LLMs. EC-6’s identical L54 cutpoint across 10/13
runs, and SC-2, SC-3’s comparably tight L139-140 and L353 clusters, show web setting ceilings by page structure or a
fixed extraction default as much as LLM identity, suggesting a sharpening, not overturning, of T1’s LLM-dependent window
finding, most explicit from OP-1 and OP-2, which both still exhibit per-LLM splits across T2.
The same three-tier grouping from T1 split results regarding content accessibility. EC-3, BL-2, EC-6, SC-4, and SC-1
remain readable static payloads where either retrieval path returns usable prose. BL-1, OP-2, OP-1, SC-3, and OP-4
are large static HTML where web truncates, but curl consistently returns coherent responses. The JS-rendered or SPAs of
EC-1, BL-3, and SC-2 curl responses include scaffolding rather than prose regardless of tool sophistication or reasoning
level. BL-3’s specific URL changed between tracks after the original’s retirement, but the replacement lands in the identical
accessibility tier, confirming that the JS-rendered failure mode isn’t tied to one specific page.
The heat map below encodes truncation tier, not retrieval path. Rows are reasoning level, with LLM version as a sub-grouping.
GPT-5.4 only has data for EC tests and renders as empty cells elsewhere. Content accessibility difficulty determines
column order, mirroring T1’s heat map.
Truncation Analysis
| # | Finding | Tests | Observed | Conclusion |
|---|---|---|---|---|
| 1 | web returns line-indexed, rendered text, extraction window, not full page |
All tests |
Returns a line-numbered, HTML-to-text-extracted viewport; OP-4’s toolchain includes wordlim: 200; most reports include Total lines: N |
Output chars on web path reflect viewport depth, not retrieval ceiling; curl remains only path to raw HTTP body |
| 2 | No fixed character or token ceiling detected with curl |
BL-1BL-3OP-1 OP-2OP-4 SC-3 EC-6 |
BL-3: GPT-5.5 Low, Medium, High retrieved ~4.85M chars; OP-4: 6/8 runs retrieved 514,092 chars, several in under a minute |
Char/token access is escalation-test-ID-gated, not architecturally defined |
| 3 | Truncation layers conflict within test cycles | BL-3 EC-6 SC-2 |
BL-3 cutpoint at structural boundary against terminal display cutoff at arbitrary position; EC-6 confirms web line ceiling independent from HTTP body; SC-2’s terminal display shows token-count marker independent of both |
Self-reported truncation tool-dependent, disambiguating layers requires per-run, per-page-architecture analysis |
| 4 | curl escalation success size and LLM-version-dependent |
All tests |
68/119 runs, 57% success rate; ranges EC-3’s 2/12 to BL-2’s 8/8 depending on agent’s choice and/or whether payload size requires escalation |
Unlike T1’s cleaner per-version threshold, same T2 LLM bypasses web entirely on one test, fails to escalate on another |
| 5 | Higher reasoning levels continue to show inconsistent and/or diminishing or returns | BL-3 EC-6SC-1 SC-3 |
EC-6’s GPT-5.4-Mini Extra High spent 11m37s across three failed tool paths to retrieve nothing, while Light completed same test in 29 seconds; SC-3’sGPT-5.5 Extra High ran most streamlined path in its cycle |
Extra High doesn’t reliably improve retrieval outcomes; in several test cycles actively underperforms against Light/Low |
| 6 | Single write destination risks constant collision | BL-1BL-2 EC-1 EC-6 OP-4 |
T1 agents mostly wrote-reported to Documents/GitHub/Codex, most T2 agents wrote to /private/tmp without reporting it; BL-1’s GPT-5.4-Mini High only agent to write to project; SC-4’s GPT-5.4-Mini Extra High read prior logs instead of fetching; filename collision recurs across 16+ cycles, most heavily in EC-6, OP-4 |
/private/tmp clearing between sessions reduces cross-cycle collision, stale artifacts can’t persist to be misread later, but reducing paths to temp storage without any infrastructure contributes to constant collision, requires observability to untangle |
| 7 | JS-rendered pages remain structural retrieval failure | BL-3 SC-2 |
BL-3: a replacement URL, different from T1’s retired original, produces similar JS-rendered tutorial-body-absent pattern; SC-2: Next.js hydrated shell, ~578,000 chars, prose absent |
Neither web nor curl returns prose for CSP-gated or client-hydrated pages regardless of surface, pattern holds across URL replacement |
| 8 | Cache Miss no longer systematic for URL that defined it |
BL-3 EC-6 |
BL-3 includes Cache Miss all results; 1/13 EC-6 includes Cache Miss string vs T1’s 17/20; others return windowed L54 extraction instead |
Failure signature maybe URL-specific rather than stable property of raw and/or large payloads; same URL anchored T1’s Cache Miss finding fails silently into T2 text slice |
| 9 | web line ceiling page-architecture-driven |
EC-6 SC-2 SC-3 |
EC-6’s L54 identical cutpoint 10/13 runs; SC-2’s L139-140 and SC-3’s L353 show comparably tight cross-LLM clustering |
Where T1 found LLM-version-correlated windows, T2’s tightest cycles show opposite, same ceiling regardless of LLM. OP-1, OP-2, OP-4 show LLM-family splits; mechanisms coexist depending on URL |
| 10 | T2 agents reported wordlim:200 less |
OP-4 |
GPT-5.4-Mini Extra High’s reported web reference wordlim:200 alongside extraction window turn0view0, while T1 agents cited it at least 10+ |
In spite of web usage, no strong support for T1’s SC-1 inference as agent-adjustable parameter, less visibility likely due to version upgrades, stronger security |
| 11 | Pagination splits by reasoning level, but architecture more likely to determine fetch quality | EC-6 |
Light, Medium less likely to request more text after initial clip, pivots to curl; High, Extra High more likely to attempt more web calls, but that doesn’t always positively impact retrieval outcome |
Whether more web calls means more prose depends on page structure, as visualized in Truncation + Inaccessibility |
Retrieval Paths
This heat map encodes retrieval path built from tools_named cross-checked against output_chars and, where needed, the source screenshot
cross-checked against audits of session rollout JSON logs. A tool listed as attempted only counts if the session data traces back to it, as
tools_named is agent self-reported and agents intermittently under-report.
The primary retrieval method defines the cell category; cell notes include rare ~10 instances in which agents paginated through web text
extractions. Column notes include more comprehensive toolchains, including common verification of fetched responses and failed methods.
Tool paths identify default capacity and configuration discoverability gaps. Despite workspace access to AET documentation and research
concerns, an advantage T1 agents on the isolated Codex desktop app didn’t have, T2 agents of all reasoning levels still rediscover
default limitations each session rather than drawing on that access, and don’t advise ways to improve fetch quality through in-house
features. While agents relied on Codex’s fetch mechanism web, they often reasoned it unsuitable for fetching and describing web content,
pivoting to curl; paginating through text-extraction slices is expensive compared to tapping a server for content-length. Multiple
extension upgrades across the test cycle didn’t change this pattern or improve report quality. Workspace access, version updates, and reasoning
level all failed to move agents toward exposing debugging or sharing product knowledge that may help a user learn Codex.
Retrieval Outcomes
Output chars on the web surface remain an unsuitable retrieval ceiling metric, but reflect how far agents traversed through a
line-indexed viewport before stopping or changing strategy. T2 artifact write-saves were less consistent than T1. Several runs
wrote files without reporting them, a pattern documented across SC-1 through SC-4, contributing to continued abstraction of
agent activity across Codex testing. Rows below organized by page architecture:
raw files → static HTML → reference/wiki → JS-rendered/SPA
| Test | Expected | Received | Content Accessibility | Agent Characterization |
|---|---|---|---|---|
EC-3Redirect JSON |
~2 KB | web: 660 charscurl: 254 chars |
100% | Complete on both paths: GPT-5.4-Mini favors curl as authoritative measurement path at Medium, High, inverse of T1 pattern at those levels |
BL-2Mixed HTML Markdown |
~20 KB | 5,805 chars | 100% | Complete, consistent: char count differences reflect source updates, not surface behavior; continued misidentification but less expensive |
EC-6Raw GitHub Markdown |
~60 KB | curl: 91,869 char countweb: L54 Total lines: 55 |
curl 100%web ~13-28% |
Complete with curl: L54 web cutpoint most consistent finding across T2, identical regardless of LLM/reasoning level; Cache Miss error defined T1 only flagged in single rollout audit, not agent-reported |
SC-4Markdown Guide |
~30 KB | curl: 64,527 char countweb: L657 Total lines: 752 |
curl 100%web ~87% |
Complete with curl: L657 cutpoint consistent across GPT-5.5; GPT-5.4-Mini Extra High sourced metrics from prior logs rather than fetching |
SC-1Gemini API Docs |
~40 KB | curl: 125,248-125,252 charsweb: 16,390-34,000 chars |
curl 100%web 13-27% |
Complete with curl: GPT-5.4-Mini four different strategies across reasoning levels, widest intra-LLM T2 spread |
OP-2MDN Docs |
~120 KB | curl: 241,720 char count |
curl 100%web 13-25% |
Complete with curl: cutpoint splits by LLM, GPT-5.4-Mini High/Extra High ~L317-318 vs Medium, GPT-5.5 ~L590-591, supporting T1’s OP-1 LLM-dependent ceiling inference |
BL-1MongoDB Docs |
~85 KB | curl: 509,025 char count |
curl 100%web ~15-17% |
Complete with curl: L420 ceiling not as consistent as EC-6’s L54, GPT-5.4-Mini Extra High L119 cutpoint |
OP-4CommonMark Spec |
~500 KB | curl: 514,092 char count |
curl 100%web 2-3% |
Complete with curl: line-ceiling clusters GPT-5.4-Mini Medium/Extra High L237, GPT-5.5 Low/High L616; session contamination risk exhibited by filename-collision pairs |
OP-1Wikipedia with URL Fragment |
~40 KB | curl: 740,370 char count |
curl 100%web ~0.5-4% |
Complete with curl: mirrors T1 with #History silently dropped every run, web cutpoint LLM-family split GPT-5.4-Mini L304, GPT-5.5 L556 |
SC-3Wikipedia Table-Heavy |
~100 KB | curl: 786,213 char count |
curl 100%web 1-3% |
Complete with curl: consistent web L353 ceiling across LLM, reasoning levels where attempted |
EC-1Gemini API Docs |
~100 KB | curl: 119,785-120,001char range |
curl 100%web 7-18% |
Complete with curl: GPT-5.4-Mini Light full task failure while High exhibited most over-instrumented strategy to success |
SC-2Anthropic API Docs |
~80 KB | curl: 578,233-578,275char range |
Not accessible | Complete HTML shell, prose absent: JS-hydrated reference content never appears in any output; near-universal web L139-140 ceiling; terminal display 134,804 tokens truncated reported |
BL-3MongoDB Docs |
~4,531 KB | curl: 4,640,208-4,848,853char range |
Not accessible | Complete HTML shell, prose absent: web attempts returned Cache Miss; silently substituted URL, weakening support to every hypothesis |
Agent Ecosystem Testing