Sunny Code

Same model, faster agent: Harness Fast mode

Can an agent finish the same coding task faster while using the same model? We compared Fast and Standard in Sunny Code, holding the model and reasoning settings fixed and changing the execution policy. Fast aims to keep the agent focused on the task, limit extra work, and deliver promptly after making and inspecting the changes.

Building on the token efficiency observed in our preceding same-model comparison, we now explore whether Fast can help the same agent reach task delivery sooner.

We used GPT-6.1 Sol and DS4.1 Flash, both with low thinking. Three cohorts cover Sunny Code and Click, Python repositories with cheap verification, and three repositories without existing unit tests. Nine tasks, two repetitions per configuration: 72 runs in total.

For these nine small tasks, Fast reached local delivery sooner in all 36 paired observations. Across six cohort-by-model aggregates, completion time fell by 50.4%–80.1%, and new tokens fell by 10.2%–38.7%. These ranges describe group aggregates, not a guaranteed reduction for any individual task.

Every delivery received independent acceptance after timing, but not every delivery passed. Failures and legacy-test conflicts are retained below. Independent acceptance time is excluded from the reported duration.

Mean completion time per runseconds
StandardFast

Normal verification

GPT-6.1 Sol
106.431.3
DS4.1 Flash
94.518.8

Cheap verification

GPT-6.1 Sol
54.324.9
DS4.1 Flash
29.614.7

No existing unit tests

GPT-6.1 Sol
47.623.3
DS4.1 Flash
34.99.6
060120
All groups share a 0–120 second scale. Each bar is the mean of six runs, including failed deliveries. Compare modes within the same cohort and model. Each task has only two repetitions; confidence intervals were not estimated.
How the experiment works

The experiments ran on October 18, 2026. Each cohort has three tasks, each run twice for both models in both modes: 24 runs per cohort. Pairs held the task, code snapshot, dependencies, model and reasoning setting fixed; runs were serial with alternating mode order. We compare the two product modes as complete configurations. Timing runs from task submission until the agent ends the task, measuring local delivery. Independent acceptance and PR publication/merge are excluded. Provider caching and service load were not fully controlled.

Three cohorts, one question

The first cohort covers tasks in Sunny Code itself and Click. The second selects tasks with median native-suite baselines of about 0.7–2.7 seconds. The third uses repositories without existing first-party unit tests. Delivery was still earlier in the latter two cohorts. This does not mean the modes performed identical checks, or that fewer repository tests alone predict the benefit.

Inspect exact completion times
CohortModelStandard (s)Fast (s)Time reduction
Normal verificationGPT-6.1 Sol106.431.3−70.6%
Normal verificationDS4.1 Flash94.518.8−80.1%
Cheap verificationGPT-6.1 Sol54.324.9−54.1%
Cheap verificationDS4.1 Flash29.614.7−50.4%
No existing unit testsGPT-6.1 Sol47.623.3−51.1%
No existing unit testsDS4.1 Flash34.99.6−72.4%

New tokens fell too, but by a different proportion

New tokens decreased for both models in all three cohorts, by 10.2%–38.7%. For example, Sol in the no-tests cohort used 10.2% fewer new tokens while finishing 51.1% sooner. A token reduction is not a direct estimate of time saved.

Mean new tokens per runtokens
StandardFast

Normal verification

GPT-6.1 Sol
23.5k14.4k
DS4.1 Flash
23.6k16.0k

Cheap verification

GPT-6.1 Sol
25.2k16.6k
DS4.1 Flash
20.0k15.6k

No existing unit tests

GPT-6.1 Sol
15.3k13.7k
DS4.1 Flash
15.0k9.2k
015k30k
New tokens = provider-reported input + output, excluding cacheRead and cacheWrite. Each value is the mean of six runs. This is neither total processed tokens nor an actual bill. The preceding article counted total tokens including cached input; its reduction percentages are not directly comparable.
Inspect exact new-token counts
CohortModelStandard new tokensFast new tokensToken reduction
Normal verificationGPT-6.1 Sol23,51814,411−38.7%
Normal verificationDS4.1 Flash23,62616,034−32.1%
Cheap verificationGPT-6.1 Sol25,21316,650−34.0%
Cheap verificationDS4.1 Flash19,96415,573−22.0%
No existing unit testsGPT-6.1 Sol15,28113,726−10.2%
No existing unit testsDS4.1 Flash15,0049,224−38.5%

Every delivery was checked. Not every delivery passed.

After timing ended, we ran independent behavioral boundary checks on separate copies of the delivered code, together with available repository regression checks. Failed runs remain in the results. We did not repair delivered source and then count it as passing. Agent-authored tests were recorded separately.

CohortStrict total (Standard / Fast)Behavior and supplementary diagnosis
Normal verification8/12 · 8/12All eight Click deliveries missed supplementary empty-prefix requirements. Both modes failing does not establish unchanged quality.
Cheap verification8/12 · 8/12Behavior passed 24/24. Eight slugify deliveries hit a legacy assertion conflicting with the new requirement. Updated upstream tests passed in supplementary diagnosis; original failures remain.
No existing unit tests12/12 · 12/12External behavior and total acceptance passed 24/24. No quality decline was observed within these tasks and checks.

Click passed the ordinary checks but failed supplementary requirement boundaries. The slugify task required ASCII input to bypass the transliteration backend, while an old test still asserted backend initialization. Frozen total acceptance was 16/24; a later supplementary diagnosis must not overwrite that result. These are different failure causes and are reported separately.

Tests retained in Standard deliveries may also have future maintenance value. This completion-time metric does not measure that value, longer-term regression risk or rework costs.

What these numbers cover

The evidence supports shorter local-delivery time under Fast for these nine small tasks. It does not establish that all tasks will be faster or that reading or editing alone is faster. Post-hoc trace classification in the first cohort could not isolate those benefits. This experiment also did not measure the independent contribution of any particular implementation change.

The modes did not perform identical verification. If your workflow counts delivery only after independent acceptance passes, that time must be added back. There were just nine tasks, two models and two repetitions per configuration. Two cheap-verification tasks share boltons; all three no-tests repositories have the same maintainer. Thirty-six pairs are not 36 independent tasks. Tasks were deliberately selected, including historical defects and edge cases, rather than randomly sampled. Equal observed pass counts do not establish quality equivalence.

Read speed, acceptance and delivery scope together

This comparison shows why agent modes are worth measuring even with the model held fixed. Shorter delivery time belongs alongside actual acceptance results and work scope. Hold tasks and acceptance criteria fixed, and record time, tokens and failure causes together. If delivery requires the same full verification, total time must be measured at that boundary instead.

Tasks and repositories

Seven repositories and nine tasks across three cohorts. A–C cover Sunny Code and Click; D–F have cheap verification; G–I use repositories without existing unit tests. Each task has eight runs: two models × two modes × two repetitions.

Inspect the seven repositories and task index
RepositoryLanguageTask
zjc-cloud/sunny-codeTypeScriptA, B
pallets/clickPythonC
mahmoud/boltonsPythonD, F
un33k/python-slugifyPythonE
fogleman/primitiveGoG
fogleman/lnGoH
fogleman/sdfPythonI

Normal verification

A · Local preview URL boundaries

zjc-cloud/sunny-code · TypeScript · Private repository; revision withheld

Problem · Local-address placeholders in startup logs were incorrectly recognized as clickable preview URLs.

Requirements and scope · Reject localhost:<port>, IPv4/IPv6 port placeholders and trailing colons without ports. Preserve complete local addresses and explicitly printed default-port URLs; leave other startup behavior unchanged.

Independent acceptance coverage · Check incomplete addresses, placeholders, complete URLs, foreign/authenticated URLs and ANSI/punctuation boundaries; combine with existing regression, type and build checks.

Strict total · Standard: 4/4 · Fast: 4/4

B · Text prompt learning and media input

zjc-cloud/sunny-code · TypeScript · Private repository; revision withheld

Problem · Reusable prompt learning concatenated multiple text blocks in one user message without a boundary.

Requirements and scope · Separate text blocks with newlines while preserving internal newlines and ordinary strings. Continue excluding image/mixed content, non-user messages and previously disallowed content; retain length and safety filters.

Independent acceptance coverage · Check multi-block and string messages, image/mixed-media exclusion, message roles and existing filtering boundaries; combine with regression, type and build checks.

Strict total · Standard: 4/4 · Fast: 4/4

C · Normalized Choice shell completion

pallets/click · Python · Historical upstream reference 2247b35e

Problem · Choice shell completion did not follow the same normalization rules as ordinary CLI value conversion.

Requirements and scope · Apply existing normalization and extension hooks to prefix matching. Preserve case rules, declaration order, value conversion, help and errors. Include empty and normalized-to-empty prefixes.

Independent acceptance coverage · Exercise real completion dispatch for Unicode, context/custom normalization, inherited subcommands and context isolation, plus supplementary empty-prefix boundaries. All eight deliveries passed ordinary checks but failed supplementary boundaries.

Strict total · Standard: 0/4 · Fast: 0/4

Cheap verification

D · Unicode line splitting and indentation

mahmoud/boltons · Python · Historical upstream reference 1cdc0e9d

Problem · iter_splitlines mishandled Unicode line/paragraph separators and could incorrectly split ordinary date text.

Requirements and scope · Handle U+2028/U+2029 and dependent indent behavior. Preserve existing separators, CRLF, repeated/leading/trailing empty lines and margin, newline and key options.

Independent acceptance coverage · Independent checks cover line-splitting and indentation boundaries, alongside the native suite including doctests. The median of three native baseline runs was 2.747 seconds.

Strict total · Standard: 4/4 · Fast: 4/4

E · ASCII path bypasses transliteration

un33k/python-slugify · Python · Historical upstream reference 2fe6cec4

Problem · Already-ASCII text still loaded a transliteration backend, creating an unnecessary dependency.

Requirements and scope · Bypass backend loading for ASCII at the transliteration stage, including when the backend is absent. Cover default/explicit legacy and modern modes; preserve non-ASCII, allow_unicode, replacements, entity decoding and parameter validation.

Independent acceptance coverage · Check ASCII handling, absent backends, non-ASCII and pipeline compatibility, plus the native suite. All eight deliveries passed behavior checks but hit the conflicting old assertion; supplementary diagnosis is separate. Native baseline median: 0.727 seconds.

Strict total · Standard: 0/4 · Fast: 0/4

F · Relative JSONL seeking

mahmoud/boltons · Python · Historical upstream reference 51508029

Problem · JSONLIterator raised TypeError when rel_seek was used on binary JSON-lines files.

Requirements and scope · Make forward binary iteration agree with equivalent text input. Preserve starting/ending/negative relative positions, empty files, EOF, ignore_errors and reverse text iteration; do not expand other binary reverse-iteration behavior.

Independent acceptance coverage · Compare relative seeks for text and binary input and check position, empty-file and error-handling boundaries; run the native suite including doctests. Native baseline median: 2.472 seconds.

Strict total · Standard: 4/4 · Fast: 4/4

No existing unit tests

G · Bound ellipse vertical radius by height

fogleman/primitive · Go · Historical upstream reference 69506c92

Problem · Ordinary Ellipse.Mutate bounded the vertical radius Ry by width on non-square canvases.

Requirements and scope · Bound Ry by height; the same height and random sequence must not change vertical results when width changes. Preserve random branches, horizontal radius, center updates and Circle synchronization; leave RotatedEllipse unchanged.

Independent acceptance coverage · External checks on independent copies use multiple random seeds and canvas sizes to test height bounds, width independence and preserved branches. No existing first-party unit suite was available.

Strict total · Standard: 4/4 · Fast: 4/4

H · Zero-direction ray–box intersection

fogleman/ln · Go · Historical upstream reference 12e6c6e7

Problem · With a zero direction component, Box.Intersect could produce NaN or incorrect parameter intervals on box faces, edges or corners.

Requirements and scope · Cover positive and negative zero: an origin inside the closed slab leaves the interval unbounded on that axis; an outside origin gives an empty interval. Preserve negative parameters and ordinary/inside/reverse rays; handle zero-thickness boxes and stationary rays.

Independent acceptance coverage · External geometry checks cover zero directions, faces/edges/corners, degenerate boxes, stationary rays and ordinary interval semantics. No existing first-party unit suite was available.

Strict total · Standard: 4/4 · Fast: 4/4

I · Tetrahedron scaling

fogleman/sdf · Python · Historical upstream reference cee1dace

Problem · The signed-distance-field function tetrahedron(r) ignored its size parameter.

Requirements and scope · Make positive r control size. Preserve the r=1 field; scaling size and coordinates together must scale distance. Keep the origin inside, boundaries at zero, batch output shape and translation composition; do not expand meshing or rendering.

Independent acceptance coverage · External numerical checks cover scale relationships, interior/boundary points, batch shape and existing composition. No existing first-party unit suite was available.

Strict total · Standard: 4/4 · Fast: 4/4

Requirements and acceptance coverage summarize the experiment materials, not internal Fast instructions. Version links are historical upstream references, not model-delivered patches. Findings concern the prepared task snapshots and listed checks. All three no-tests repositories share one maintainer.

Inspect all 72 run records

Click failures concern supplementary requirement boundaries; slugify failures concern the frozen legacy-test conflict. See the acceptance section for the distinction.

TaskModelModeRepeatTime (s)New tokensStrict total
ADS4.1 FlashStandard1151.51822,106Pass
ADS4.1 FlashFast126.97617,537Pass
AGPT-6.1 SolStandard187.58328,162Pass
AGPT-6.1 SolFast156.44713,378Pass
BDS4.1 FlashStandard1120.18023,905Pass
BDS4.1 FlashFast112.85114,217Pass
BGPT-6.1 SolStandard1118.26419,415Pass
BGPT-6.1 SolFast121.98413,519Pass
CDS4.1 FlashStandard163.84434,484Fail
CDS4.1 FlashFast115.23413,828Fail
CGPT-6.1 SolStandard150.22822,838Fail
CGPT-6.1 SolFast125.95717,554Fail
ADS4.1 FlashStandard2168.82522,031Pass
ADS4.1 FlashFast224.36717,587Pass
AGPT-6.1 SolStandard2149.12428,651Pass
AGPT-6.1 SolFast230.48813,254Pass
BDS4.1 FlashStandard232.27119,765Pass
BDS4.1 FlashFast216.93515,329Pass
BGPT-6.1 SolStandard2177.76731,566Pass
BGPT-6.1 SolFast224.74312,494Pass
CDS4.1 FlashStandard230.07719,465Fail
CDS4.1 FlashFast216.31117,704Fail
CGPT-6.1 SolStandard255.69210,478Fail
CGPT-6.1 SolFast228.19716,267Fail
DDS4.1 FlashStandard125.59814,298Pass
DDS4.1 FlashFast110.5559,721Pass
DGPT-6.1 SolStandard142.42521,710Pass
DGPT-6.1 SolFast124.22519,843Pass
EDS4.1 FlashStandard146.75634,166Fail
EDS4.1 FlashFast118.65016,833Fail
EGPT-6.1 SolStandard152.41937,344Fail
EGPT-6.1 SolFast128.89014,138Fail
FDS4.1 FlashStandard125.35815,272Pass
FDS4.1 FlashFast119.42613,263Pass
FGPT-6.1 SolStandard146.36313,653Pass
FGPT-6.1 SolFast120.54010,349Pass
DDS4.1 FlashStandard225.62913,579Pass
DDS4.1 FlashFast211.29810,137Pass
DGPT-6.1 SolStandard239.81511,908Pass
DGPT-6.1 SolFast223.82019,623Pass
EDS4.1 FlashStandard234.50129,873Fail
EDS4.1 FlashFast215.39830,881Fail
EGPT-6.1 SolStandard272.81234,581Fail
EGPT-6.1 SolFast228.11325,126Fail
FDS4.1 FlashStandard219.92312,593Pass
FDS4.1 FlashFast212.79912,600Pass
FGPT-6.1 SolStandard272.05332,083Pass
FGPT-6.1 SolFast223.86310,820Pass
GDS4.1 FlashStandard131.01212,414Pass
GDS4.1 FlashFast18.3487,585Pass
GGPT-6.1 SolStandard121.66711,140Pass
GGPT-6.1 SolFast118.86410,966Pass
HDS4.1 FlashStandard127.34012,975Pass
HDS4.1 FlashFast113.3059,428Pass
HGPT-6.1 SolStandard174.57526,442Pass
HGPT-6.1 SolFast128.19020,998Pass
IDS4.1 FlashStandard143.15418,187Pass
IDS4.1 FlashFast19.20211,015Pass
IGPT-6.1 SolStandard138.36711,841Pass
IGPT-6.1 SolFast124.51610,561Pass
GDS4.1 FlashStandard221.34010,337Pass
GDS4.1 FlashFast27.9067,943Pass
GGPT-6.1 SolStandard256.84215,482Pass
GGPT-6.1 SolFast218.95912,178Pass
HDS4.1 FlashStandard244.07218,595Pass
HDS4.1 FlashFast29.8378,340Pass
HGPT-6.1 SolStandard261.82910,902Pass
HGPT-6.1 SolFast227.94016,772Pass
IDS4.1 FlashStandard242.77817,516Pass
IDS4.1 FlashFast29.23511,030Pass
IGPT-6.1 SolStandard232.37615,876Pass
IGPT-6.1 SolFast221.15410,883Pass
Contact us for experiment data

Email us to request the experiment data. The package includes time, usage and acceptance for 72 runs, repositories, historical references, requirements and acceptance coverage for nine tasks, plus cohort aggregates. Figures derive from original records. Execution traces, cache breakdowns, internal Fast instructions and private revision identifiers are not included.