Agent Ecosystem Testing

Key Findings for Codex’s Web Search Behavior, GPT-interpreted - Extension


Test Workflow

  1. Run python scripts/framework.py --test {test_id} --track vscode-codex-interpreted
  2. Review terminal output
  3. 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
  4. Open a new session in VS Code Codex, paste the prompt into the chat window
  5. Approve curl escalation and shell permission requests; skip requests for runs of local scripts
  6. Capture the agent’s full response; observe the gap between self-report and actual retrieval behavior
    as the interpreted finding
  7. Log structured metadata as described in framework-reference.md
  8. 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
web
Line-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
curl
Escalation
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 Miss
Failure
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-1
BL-3
OP-1 OP-2
OP-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-6
SC-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’s
GPT-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-1
BL-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-3
Redirect JSON
~2 KB web: 660 chars
curl: 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-2
Mixed 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-6
Raw
GitHub Markdown
~60 KB curl: 91,869 char count
web: 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-4
Markdown Guide
~30 KB curl: 64,527 char count
web: 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-1
Gemini
API Docs
~40 KB curl: 125,248-125,252 chars
web: 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-2
MDN
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-1
MongoDB 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-4
CommonMark 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-1
Wikipedia
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-3
Wikipedia
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-1
Gemini
API Docs
~100 KB curl: 119,785-120,001
char 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-2
Anthropic API Docs
~80 KB curl: 578,233-578,275
char 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-3
MongoDB Docs
~4,531 KB curl: 4,640,208-4,848,853
char range
Not accessible Complete HTML shell, prose absent: web attempts returned Cache Miss; silently substituted URL, weakening support to every hypothesis