<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sunny</title>
    <description>The latest articles on DEV Community by sunny (@z_jc_37f8254a1cb25bff22ed).</description>
    <link>https://dev.to/z_jc_37f8254a1cb25bff22ed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4185272%2Ffce840ad-0606-4f26-a193-f74c543ab978.png</url>
      <title>DEV Community: sunny</title>
      <link>https://dev.to/z_jc_37f8254a1cb25bff22ed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/z_jc_37f8254a1cb25bff22ed"/>
    <language>en</language>
    <item>
      <title>Two coding agents agreed—and still built incompatible APIs</title>
      <dc:creator>sunny</dc:creator>
      <pubDate>Fri, 30 Oct 2026 02:16:53 +0000</pubDate>
      <link>https://dev.to/z_jc_37f8254a1cb25bff22ed/two-coding-agents-agreed-and-still-built-incompatible-apis-2gle</link>
      <guid>https://dev.to/z_jc_37f8254a1cb25bff22ed/two-coding-agents-agreed-and-still-built-incompatible-apis-2gle</guid>
      <description>&lt;p&gt;The frontend agent proposed API A. The backend proposed API B. Later, the frontend agreed to B—and the backend agreed to A.&lt;/p&gt;

&lt;p&gt;Both were cooperating. Their implementations still did not connect.&lt;/p&gt;

&lt;p&gt;While building Sunny Code, we compared one coding agent working across two repositories with two agents splitting frontend and backend work. That exchange changed what we needed to measure: sending a message, receiving it in context, agreeing on a contract, and implementing that contract are separate events.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xgfzoj9g07qp8wwldp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xgfzoj9g07qp8wwldp9.png" alt="Schematic of crossed API confirmations: the frontend adopts B while the backend adopts A. A process illustration, not a raw chat screenshot." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three rounds, three different questions
&lt;/h2&gt;

&lt;p&gt;Each round had four paired comparisons using GPT-6.1 Sol at medium reasoning. The first two compared one session with two. The third used two agents in both arms and changed message delivery timing. These rounds should not be pooled into a leaderboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start with an agreed API
&lt;/h3&gt;

&lt;p&gt;The task was an OAuth integration with persistence, concurrent callbacks, expiry, workspace isolation, retries, and browser navigation. Both arrangements received the complete interface contract and shared a task-level budget.&lt;/p&gt;

&lt;p&gt;All eight saved artifacts passed 28 checks after we corrected two evaluator assertions that incorrectly required lowercase “connected” instead of accepting “Connected”. We re-evaluated unchanged artifacts; the agents did not repair them.&lt;/p&gt;

&lt;p&gt;Two sessions were faster in three of four pairs, with mean implementation time 12.6% lower. Their cumulative reported tokens were 2.17× the single-session total. That includes repeated cache reads, so it does not mean twice the dollar cost. The timing also excluded independent acceptance and human review.&lt;/p&gt;

&lt;p&gt;This supported a narrow finding: splitting an already-specified interface can give a parallel benefit. It did not tell us whether the agents could negotiate one.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Leave the interface unsettled
&lt;/h3&gt;

&lt;p&gt;We added safe disconnection to a working OAuth product. An old request retried after a lost response must not disconnect a newly established connection.&lt;/p&gt;

&lt;p&gt;Some pairs started with incompatible API drafts; others continued real maintenance histories. Both arrangements could access the relevant information, but its organization and retrieval costs differed.&lt;/p&gt;

&lt;p&gt;Under a shared ten-minute, 1.6-million cumulative-token and 24,000-output-token budget:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Round two outcome&lt;/th&gt;
&lt;th&gt;One session, two repos&lt;/th&gt;
&lt;th&gt;Two sessions, queued messages&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Completed within budget and passed&lt;/td&gt;
&lt;td&gt;4/4&lt;/td&gt;
&lt;td&gt;0/4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saved artifact passed all 48 checks&lt;/td&gt;
&lt;td&gt;4/4&lt;/td&gt;
&lt;td&gt;1/4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Passing code and completed delivery were separate outcomes. One two-session artifact passed every check after exceeding its budget.&lt;/p&gt;

&lt;p&gt;The bridge accepted 38 messages, but only 20 entered recipients’ persisted histories before the tasks stopped. The delivery mode queued messages until the recipient’s current execution settled. A decision could remain waiting while both agents implemented their own assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Change when messages enter context
&lt;/h3&gt;

&lt;p&gt;Both arms now used two agents, reusing round two’s starting snapshots, tasks, histories and budgets. Queued follow-ups were compared with delivery at tool boundaries during execution.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Round three outcome&lt;/th&gt;
&lt;th&gt;Queued follow-up&lt;/th&gt;
&lt;th&gt;Mid-execution delivery&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Completed within budget and passed&lt;/td&gt;
&lt;td&gt;0/4&lt;/td&gt;
&lt;td&gt;1/4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saved artifact passed all 48 checks&lt;/td&gt;
&lt;td&gt;1/4&lt;/td&gt;
&lt;td&gt;4/4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messages entered before stop&lt;/td&gt;
&lt;td&gt;14/32&lt;/td&gt;
&lt;td&gt;45/47&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Earlier entry aligned the final code more often in this small comparison. It did not solve bounded completion: three of four mid-execution runs still exceeded budget. Delivery at a tool boundary also does not interrupt a running tool or guarantee arrival before the immediately following step.&lt;/p&gt;

&lt;p&gt;The crossed-confirmation exchange occurred here too. In the mid-execution arm, the agents subsequently froze a final version and aligned their code. That artifact passed all 48 checks, but exceeded the output budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the checks, too
&lt;/h2&gt;

&lt;p&gt;We later added 12 boundary checks and calibrated them against a reference implementation and four deliberately broken variants. The reference passed all 12; the corresponding checks caught each broken variant.&lt;/p&gt;

&lt;p&gt;We then evaluated unchanged copies of all 16 saved artifacts from rounds two and three, without rerunning the agents. All ten previously passing artifacts passed the added checks. This increases confidence in those particular boundaries, not complete coverage: the audit was post-hoc and the reviewer knew the earlier outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would check next time
&lt;/h2&gt;

&lt;p&gt;For a new task spanning two repositories, we currently lean toward explicitly attaching both to one session. That is a product judgment informed by these runs, not a universal ranking.&lt;/p&gt;

&lt;p&gt;For separate sessions, I want the record to distinguish &lt;strong&gt;queued → entered context → answered → implemented&lt;/strong&gt;, with one agreed contract checked against both implementations. Mandatory handshakes and designated coordinators were not tested here.&lt;/p&gt;

&lt;p&gt;There were only four pairs per round. File-access boundaries were primarily instruction-based, and one two-agent run in each of rounds two and three used host Playwright outside the built-in-dependencies-only premise. Those runs remain disclosed in the results. We did not measure full human review and rework time.&lt;/p&gt;

&lt;p&gt;The useful failure was concrete: two agents can both say yes while building different interfaces. Message counts alone would have missed it.&lt;/p&gt;




&lt;p&gt;Adapted from &lt;a href="https://www.sunnycode.pro/blog/cross-repository-agents/" rel="noopener noreferrer"&gt;our original experiment, with per-run results and method disclosures&lt;/a&gt;. AI-assisted writing; experiment findings and limitations checked against the published record.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>testing</category>
    </item>
    <item>
      <title>Continue, compact, fork or start fresh? A 120-run coding-agent experiment</title>
      <dc:creator>sunny</dc:creator>
      <pubDate>Mon, 26 Oct 2026 15:17:27 +0000</pubDate>
      <link>https://dev.to/z_jc_37f8254a1cb25bff22ed/continue-compact-fork-or-start-fresh-a-120-run-coding-agent-experiment-5e8</link>
      <guid>https://dev.to/z_jc_37f8254a1cb25bff22ed/continue-compact-fork-or-start-fresh-a-120-run-coding-agent-experiment-5e8</guid>
      <description>&lt;p&gt;When a coding agent finishes a task, should the next task continue the conversation, compact it, fork it, or start fresh?&lt;/p&gt;

&lt;p&gt;We compared five session strategies across two models and two rounds: &lt;strong&gt;120 runs&lt;/strong&gt;. There was no universal winner. Keeping history could be expensive without improving delivery in one model, yet faster in another.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experiment design
&lt;/h2&gt;

&lt;p&gt;Every strategy received the same target instructions, repository, documentation and evidence. Fresh meant no inherited chat, not an empty project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fresh:&lt;/strong&gt; start from the task and repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continue:&lt;/strong&gt; retain the full conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compact:&lt;/strong&gt; continue after native compaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fork:&lt;/strong&gt; copy history into a new session identity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fresh + summary:&lt;/strong&gt; start fresh with a shared, frozen handoff summary generated by Sol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two rounds × two models × two target tasks × five strategies × three repetitions = 120 runs. Models were gpt-6.1-sol (medium) and deepseek-flash (medium requested, high resolved by the runtime; displayed as DeepSeek V4.1 Flash).&lt;/p&gt;

&lt;p&gt;History came from real development. The second round used more complex prior work—durable queues, idempotency, leases, cancellation and recovery—but was &lt;strong&gt;not longer&lt;/strong&gt;. Sol history went from roughly 442k to 425k tokens; DeepSeek from 331k to 295k. This is not a controlled context-length staircase.&lt;/p&gt;

&lt;p&gt;The target tasks were E2E verification of an existing export feature, including honest reporting of expected failures, and a redaction bugfix. The fix had to preserve structural identities and raw diff comparisons while using redacted text for both display and layout width.&lt;/p&gt;

&lt;h2&gt;
  
  
  One group, all five strategies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sol · complex prior-work round · E2E verification&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;th&gt;Mean recorded cost/run (USD)&lt;/th&gt;
&lt;th&gt;Median minutes&lt;/th&gt;
&lt;th&gt;Complete deliveries&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fresh&lt;/td&gt;
&lt;td&gt;$0.194&lt;/td&gt;
&lt;td&gt;2.7&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continue&lt;/td&gt;
&lt;td&gt;$2.293&lt;/td&gt;
&lt;td&gt;14.0&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compact&lt;/td&gt;
&lt;td&gt;≥$0.548&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;2/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fork&lt;/td&gt;
&lt;td&gt;$3.813&lt;/td&gt;
&lt;td&gt;14.2&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fresh + summary&lt;/td&gt;
&lt;td&gt;$0.207&lt;/td&gt;
&lt;td&gt;2.6&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The ≥ value is a recorded lower bound after interruption. Failed attempts remain in the means. Summary preparation and prior development are excluded.&lt;/p&gt;

&lt;p&gt;In this group, full history increased cost and time without adding completed deliveries. That ordering did not generalize: in DeepSeek's complex-round E2E, Fresh took 6.8 minutes, Continue 3.0, and Fork 2.2, all with 3/3 complete deliveries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cache hits do not make an entire task cheap
&lt;/h2&gt;

&lt;p&gt;For Sol's complex-round E2E, Continue averaged &lt;strong&gt;$1.266 in cache-read cost alone&lt;/strong&gt;, versus &lt;strong&gt;$0.194 for the entire Fresh run&lt;/strong&gt;—about 6.5×. This compares task-level costs, not token unit prices.&lt;/p&gt;

&lt;p&gt;Continue cumulatively read about 6.33 million cached tokens per run across repeated calls. Full-history groups produced roughly 2.8–3.8× the output tokens of Fresh. Traces contained longer verification, scripts and repeated checks; we cannot label every additional step unnecessary.&lt;/p&gt;

&lt;p&gt;A long-input pricing tier also contributed. Repricing the same recorded usage without its surcharge attributed about 47% of Continue's and 49% of Fork's recorded cost to the tier in this group. Pricing effects are not evidence of “context gravity.”&lt;/p&gt;

&lt;h2&gt;
  
  
  A summary remains a hypothesis
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F639w1fkus4ymdw0l9301.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F639w1fkus4ymdw0l9301.jpg" alt="Fresh plus summary relative to Fresh across all eight groups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fresh + summary was close to Fresh for Sol. In DeepSeek's complex E2E it cost about $0.082 and took 4.1 minutes, versus $0.103 and 6.8 minutes for Fresh. Yet across both bugfix rounds, summary runs passed functional checks 4/6, versus 6/6 for Fresh.&lt;/p&gt;

&lt;p&gt;We would try a fresh session with a short summary first. &lt;strong&gt;The experiments have not shown it is the best choice.&lt;/strong&gt; We used a shared frozen summary rather than a newly tailored summary for each target task; the main comparison excludes preparation cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Correctness and measurement boundaries
&lt;/h2&gt;

&lt;p&gt;Of 120 runs, &lt;strong&gt;102 completed successfully&lt;/strong&gt;. The other 18 comprised 14 runtime failures/timeouts and four completed runs with functional boundary defects. Some interrupted runs already passed code acceptance but had not finished the delivery protocol.&lt;/p&gt;

&lt;p&gt;Defects included visible paths mistakenly treated as immutable identities, and layout width calculated from original text after display redaction. The latter violates the task boundary; it does not by itself demonstrate a plaintext leak.&lt;/p&gt;

&lt;p&gt;Three repetitions per group used one fixed development history per round. Four E2E judgments were corrected after manual review of permitted verification-script locations; original judgments were retained and models were not rerun. Cache warmth, routing and host load were not fully controlled.&lt;/p&gt;

&lt;p&gt;Costs are &lt;strong&gt;fixed-rate API-equivalent estimates&lt;/strong&gt;, not current prices or subscription bills. They include recorded uncached input, cache reads, cache writes and output, plus native compaction. Recorded cache writes were zero; incomplete usage can understate interrupted-run costs.&lt;/p&gt;

&lt;p&gt;We have neither established a stable best strategy nor identified a context-gravity threshold. Next we want to test task-specific summaries, count preparation costs, and examine decisions that exist only in old chat rather than repository files.&lt;/p&gt;

&lt;p&gt;Originally published on the &lt;a href="https://www.sunnycode.pro/blog/session-context/" rel="noopener noreferrer"&gt;Sunny Code engineering blog&lt;/a&gt;, with interactive comparisons, methodology and downloadable aggregate data.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Same model, faster agent: Harness Fast mode</title>
      <dc:creator>sunny</dc:creator>
      <pubDate>Sun, 18 Oct 2026 17:52:12 +0000</pubDate>
      <link>https://dev.to/z_jc_37f8254a1cb25bff22ed/same-model-faster-agent-harness-fast-mode-1m85</link>
      <guid>https://dev.to/z_jc_37f8254a1cb25bff22ed/same-model-faster-agent-harness-fast-mode-1m85</guid>
      <description>&lt;p&gt;Can a coding agent deliver sooner without switching to a faster model? We tested that in Sunny Code by comparing &lt;strong&gt;Fast and Standard execution policies&lt;/strong&gt;, with the model and reasoning setting held fixed.&lt;/p&gt;

&lt;p&gt;Across nine small tasks, Fast reached local delivery sooner in all 36 paired observations. Across the six cohort-by-model aggregates, mean completion time fell &lt;strong&gt;50.4%–80.1%&lt;/strong&gt;, and mean new-token usage fell &lt;strong&gt;10.2%–38.7%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The important boundary: this measures time until the agent ends the task. Independent acceptance ran afterward and is not included in that duration. Faster delivery did not mean every delivery passed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbpsluzi9a5lwkv2ytbzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbpsluzi9a5lwkv2ytbzg.png" alt="Normal-verification cohort mean completion time in seconds: GPT-6.1 Sol Standard 106.4 vs Fast 31.3; DS4.1 Flash Standard 94.5 vs Fast 18.8." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Normal-verification cohort only; each bar averages six runs, including failed deliveries. Time ends when the agent finishes the task and excludes subsequent independent acceptance.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup: 9 tasks, 2 models, 72 runs
&lt;/h2&gt;

&lt;p&gt;We used &lt;strong&gt;GPT-6.1 Sol&lt;/strong&gt; and &lt;strong&gt;DS4.1 Flash&lt;/strong&gt;, both with low thinking. Each task ran twice with each model in each mode: 9 × 2 × 2 × 2 = 72 runs.&lt;/p&gt;

&lt;p&gt;Pairs held the task, code snapshot, dependencies, model, and reasoning setting fixed. Runs were serial, with alternating mode order. We compared the product modes as complete configurations; provider caching and service load were not fully controlled.&lt;/p&gt;

&lt;p&gt;The tasks covered seven repositories:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cohort&lt;/th&gt;
&lt;th&gt;Repositories and tasks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal verification&lt;/td&gt;
&lt;td&gt;Sunny Code: local preview URL boundaries; text prompt learning and media input. Click: normalized Choice shell completion.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap verification&lt;/td&gt;
&lt;td&gt;boltons: Unicode line splitting/indentation and relative JSONL seeking. python-slugify: bypass the transliteration backend for ASCII input.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No existing unit tests&lt;/td&gt;
&lt;td&gt;fogleman/primitive: bound ellipse vertical radius by height. fogleman/ln: zero-direction ray–box intersection. fogleman/sdf: tetrahedron scaling.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cheap-verification repositories had median native-suite baselines of about 0.7–2.7 seconds. This helped test whether the result persisted when repository tests were already inexpensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Completion time
&lt;/h2&gt;

&lt;p&gt;Each cell below is the mean of six runs, including failed deliveries.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cohort&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Fast&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal verification&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;106.4 s&lt;/td&gt;
&lt;td&gt;31.3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Normal verification&lt;/td&gt;
&lt;td&gt;DS4.1 Flash&lt;/td&gt;
&lt;td&gt;94.5 s&lt;/td&gt;
&lt;td&gt;18.8 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap verification&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;54.3 s&lt;/td&gt;
&lt;td&gt;24.9 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap verification&lt;/td&gt;
&lt;td&gt;DS4.1 Flash&lt;/td&gt;
&lt;td&gt;29.6 s&lt;/td&gt;
&lt;td&gt;14.7 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No existing unit tests&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;47.6 s&lt;/td&gt;
&lt;td&gt;23.3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No existing unit tests&lt;/td&gt;
&lt;td&gt;DS4.1 Flash&lt;/td&gt;
&lt;td&gt;34.9 s&lt;/td&gt;
&lt;td&gt;9.6 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fast aims to keep the agent focused on the task, limit extra work, and deliver promptly after making and inspecting the changes. The modes did &lt;strong&gt;not&lt;/strong&gt; perform identical verification, so these numbers should not be interpreted as the same work simply executing faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  New tokens also decreased
&lt;/h2&gt;

&lt;p&gt;Here, &lt;strong&gt;new tokens = provider-reported input + output, excluding cacheRead and cacheWrite&lt;/strong&gt;. This is neither total processed tokens nor an actual bill.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cohort&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Fast&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal verification&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;23,518&lt;/td&gt;
&lt;td&gt;14,411&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Normal verification&lt;/td&gt;
&lt;td&gt;DS4.1 Flash&lt;/td&gt;
&lt;td&gt;23,626&lt;/td&gt;
&lt;td&gt;16,034&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap verification&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;25,213&lt;/td&gt;
&lt;td&gt;16,650&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap verification&lt;/td&gt;
&lt;td&gt;DS4.1 Flash&lt;/td&gt;
&lt;td&gt;19,964&lt;/td&gt;
&lt;td&gt;15,573&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No existing unit tests&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;15,281&lt;/td&gt;
&lt;td&gt;13,726&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No existing unit tests&lt;/td&gt;
&lt;td&gt;DS4.1 Flash&lt;/td&gt;
&lt;td&gt;15,004&lt;/td&gt;
&lt;td&gt;9,224&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Token reduction and time reduction were different in size. For example, Sol in the no-tests cohort used 10.2% fewer new tokens while finishing 51.1% sooner. Our preceding experiment included cached input in its token totals, so its percentages are not directly comparable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What passed—and what failed
&lt;/h2&gt;

&lt;p&gt;After timing ended, we ran independent behavioral checks on separate copies of the delivered code, alongside available repository regression checks. Failed runs stayed in the results; we did not repair source and then count it as passing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cohort&lt;/th&gt;
&lt;th&gt;Strict acceptance: Standard / Fast&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal verification&lt;/td&gt;
&lt;td&gt;8/12 / 8/12&lt;/td&gt;
&lt;td&gt;All eight Click deliveries missed supplementary empty-prefix requirements.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cheap verification&lt;/td&gt;
&lt;td&gt;8/12 / 8/12&lt;/td&gt;
&lt;td&gt;Behavior passed 24/24. Eight slugify deliveries failed a legacy assertion that conflicted with the new requirement.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No existing unit tests&lt;/td&gt;
&lt;td&gt;12/12 / 12/12&lt;/td&gt;
&lt;td&gt;External behavior and total acceptance passed 24/24.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the slugify task, ASCII input was supposed to bypass the transliteration backend, but the old test still expected backend initialization. Updated upstream tests passed in supplementary diagnosis; that does not replace the original failures.&lt;/p&gt;

&lt;p&gt;Equal pass counts do not establish quality equivalence. Tests retained in Standard deliveries may also have future maintenance value that this timing metric does not capture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I take from this
&lt;/h2&gt;

&lt;p&gt;An agent's delivery policy is worth measuring alongside model choice. For these tasks, Fast shortened local-delivery time even when native verification was cheap or absent. This experiment does not isolate the contribution of any particular implementation change.&lt;/p&gt;

&lt;p&gt;This is a deliberately selected sample of nine tasks with two repetitions per configuration—not 36 independent tasks. If your definition of delivery requires independent acceptance to pass, include that time and any rework in the comparison.&lt;/p&gt;

&lt;p&gt;I'm building Sunny Code to explore more efficient AI coding, better interactions, and the future of programming. These experiments are one way of making that exploration measurable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sunnycode.pro/blog/harness-fast-mode/" rel="noopener noreferrer"&gt;Full experiment: charts, task requirements, acceptance coverage, and all 72 run records&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Where do you draw the delivery boundary for a coding agent: when it finishes editing, when local checks pass, or after independent acceptance?&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Same Model, Different Agents: Comparing Token Usage, Cost, and Task Success</title>
      <dc:creator>sunny</dc:creator>
      <pubDate>Wed, 14 Oct 2026 18:16:29 +0000</pubDate>
      <link>https://dev.to/z_jc_37f8254a1cb25bff22ed/same-model-different-agents-comparing-token-usage-cost-and-task-success-h67</link>
      <guid>https://dev.to/z_jc_37f8254a1cb25bff22ed/same-model-different-agents-comparing-token-usage-cost-and-task-success-h67</guid>
      <description>&lt;p&gt;Does using the same model mean similar token usage across coding agents?&lt;/p&gt;

&lt;p&gt;We compared Codex, SunnyCode Base and SunnyCode CodeMode on eight tasks from p-queue, Click and markdown-it. All used GPT-6 Astra with medium reasoning and Fast off. Each configuration ran each task three times, with shared primary acceptance checks and failed runs retained.&lt;/p&gt;

&lt;p&gt;I develop SunnyCode, so this is a developer-run comparison, not an independent benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;Means across 24 runs per configuration, including failures:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;th&gt;Estimated cost/run&lt;/th&gt;
&lt;th&gt;Checks passed&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;725,185&lt;/td&gt;
&lt;td&gt;$1.440&lt;/td&gt;
&lt;td&gt;21/24&lt;/td&gt;
&lt;td&gt;222.6 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SunnyCode Base&lt;/td&gt;
&lt;td&gt;281,080&lt;/td&gt;
&lt;td&gt;$0.785&lt;/td&gt;
&lt;td&gt;23/24&lt;/td&gt;
&lt;td&gt;297.1 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SunnyCode CodeMode&lt;/td&gt;
&lt;td&gt;165,566&lt;/td&gt;
&lt;td&gt;$0.669&lt;/td&gt;
&lt;td&gt;23/24&lt;/td&gt;
&lt;td&gt;232.2 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The biggest gap was cached input
&lt;/h2&gt;

&lt;p&gt;Cached input accounted for 96.5% of Codex’s additional recorded tokens relative to CodeMode. These totals include context processed across requests—not just generated code.&lt;/p&gt;

&lt;p&gt;Because cached input is discounted, CodeMode’s 77.2% reduction in tokens translated to a smaller 53.5% reduction in estimated cost.&lt;/p&gt;

&lt;p&gt;Codex still had the fastest overall mean completion time. Fewer tokens did not automatically mean faster execution.&lt;/p&gt;

&lt;p&gt;Costs are API-equivalent estimates, not subscription bills, using frozen rates of $10/M uncached input, $1/M cached input and $50/M output.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does—and doesn’t—show
&lt;/h2&gt;

&lt;p&gt;Agent configuration is worth measuring alongside model choice. Separate cached input, uncached input and output, and compare acceptance and time alongside cost.&lt;/p&gt;

&lt;p&gt;But this is eight tasks, not a general ranking. System prompts differed, Base runs were collected later, and provider/cache conditions were not randomized. Supplemental checks also found defects beyond the primary acceptance results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sunnycode.pro/blog/reducing-ai-coding-token-usage/" rel="noopener noreferrer"&gt;Methodology, per-run results and source data&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
