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.
Normal verification
Cheap verification
No existing unit tests
Inspect results and acceptance
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 repositories and all nine task requirements
Inspect exact completion times
| Cohort | Model | Standard (s) | Fast (s) | Time reduction |
|---|---|---|---|---|
| Normal verification | GPT-6.1 Sol | 106.4 | 31.3 | −70.6% |
| Normal verification | DS4.1 Flash | 94.5 | 18.8 | −80.1% |
| Cheap verification | GPT-6.1 Sol | 54.3 | 24.9 | −54.1% |
| Cheap verification | DS4.1 Flash | 29.6 | 14.7 | −50.4% |
| No existing unit tests | GPT-6.1 Sol | 47.6 | 23.3 | −51.1% |
| No existing unit tests | DS4.1 Flash | 34.9 | 9.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.
Normal verification
Cheap verification
No existing unit tests
Inspect exact new-token counts
| Cohort | Model | Standard new tokens | Fast new tokens | Token reduction |
|---|---|---|---|---|
| Normal verification | GPT-6.1 Sol | 23,518 | 14,411 | −38.7% |
| Normal verification | DS4.1 Flash | 23,626 | 16,034 | −32.1% |
| Cheap verification | GPT-6.1 Sol | 25,213 | 16,650 | −34.0% |
| Cheap verification | DS4.1 Flash | 19,964 | 15,573 | −22.0% |
| No existing unit tests | GPT-6.1 Sol | 15,281 | 13,726 | −10.2% |
| No existing unit tests | DS4.1 Flash | 15,004 | 9,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.
| Cohort | Strict total (Standard / Fast) | Behavior and supplementary diagnosis |
|---|---|---|
| Normal verification | 8/12 · 8/12 | All eight Click deliveries missed supplementary empty-prefix requirements. Both modes failing does not establish unchanged quality. |
| Cheap verification | 8/12 · 8/12 | Behavior 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 tests | 12/12 · 12/12 | External 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
| Repository | Language | Task |
|---|---|---|
| zjc-cloud/sunny-code | TypeScript | A, B |
| pallets/click | Python | C |
| mahmoud/boltons | Python | D, F |
| un33k/python-slugify | Python | E |
| fogleman/primitive | Go | G |
| fogleman/ln | Go | H |
| fogleman/sdf | Python | I |
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.
| Task | Model | Mode | Repeat | Time (s) | New tokens | Strict total |
|---|---|---|---|---|---|---|
| A | DS4.1 Flash | Standard | 1 | 151.518 | 22,106 | Pass |
| A | DS4.1 Flash | Fast | 1 | 26.976 | 17,537 | Pass |
| A | GPT-6.1 Sol | Standard | 1 | 87.583 | 28,162 | Pass |
| A | GPT-6.1 Sol | Fast | 1 | 56.447 | 13,378 | Pass |
| B | DS4.1 Flash | Standard | 1 | 120.180 | 23,905 | Pass |
| B | DS4.1 Flash | Fast | 1 | 12.851 | 14,217 | Pass |
| B | GPT-6.1 Sol | Standard | 1 | 118.264 | 19,415 | Pass |
| B | GPT-6.1 Sol | Fast | 1 | 21.984 | 13,519 | Pass |
| C | DS4.1 Flash | Standard | 1 | 63.844 | 34,484 | Fail |
| C | DS4.1 Flash | Fast | 1 | 15.234 | 13,828 | Fail |
| C | GPT-6.1 Sol | Standard | 1 | 50.228 | 22,838 | Fail |
| C | GPT-6.1 Sol | Fast | 1 | 25.957 | 17,554 | Fail |
| A | DS4.1 Flash | Standard | 2 | 168.825 | 22,031 | Pass |
| A | DS4.1 Flash | Fast | 2 | 24.367 | 17,587 | Pass |
| A | GPT-6.1 Sol | Standard | 2 | 149.124 | 28,651 | Pass |
| A | GPT-6.1 Sol | Fast | 2 | 30.488 | 13,254 | Pass |
| B | DS4.1 Flash | Standard | 2 | 32.271 | 19,765 | Pass |
| B | DS4.1 Flash | Fast | 2 | 16.935 | 15,329 | Pass |
| B | GPT-6.1 Sol | Standard | 2 | 177.767 | 31,566 | Pass |
| B | GPT-6.1 Sol | Fast | 2 | 24.743 | 12,494 | Pass |
| C | DS4.1 Flash | Standard | 2 | 30.077 | 19,465 | Fail |
| C | DS4.1 Flash | Fast | 2 | 16.311 | 17,704 | Fail |
| C | GPT-6.1 Sol | Standard | 2 | 55.692 | 10,478 | Fail |
| C | GPT-6.1 Sol | Fast | 2 | 28.197 | 16,267 | Fail |
| D | DS4.1 Flash | Standard | 1 | 25.598 | 14,298 | Pass |
| D | DS4.1 Flash | Fast | 1 | 10.555 | 9,721 | Pass |
| D | GPT-6.1 Sol | Standard | 1 | 42.425 | 21,710 | Pass |
| D | GPT-6.1 Sol | Fast | 1 | 24.225 | 19,843 | Pass |
| E | DS4.1 Flash | Standard | 1 | 46.756 | 34,166 | Fail |
| E | DS4.1 Flash | Fast | 1 | 18.650 | 16,833 | Fail |
| E | GPT-6.1 Sol | Standard | 1 | 52.419 | 37,344 | Fail |
| E | GPT-6.1 Sol | Fast | 1 | 28.890 | 14,138 | Fail |
| F | DS4.1 Flash | Standard | 1 | 25.358 | 15,272 | Pass |
| F | DS4.1 Flash | Fast | 1 | 19.426 | 13,263 | Pass |
| F | GPT-6.1 Sol | Standard | 1 | 46.363 | 13,653 | Pass |
| F | GPT-6.1 Sol | Fast | 1 | 20.540 | 10,349 | Pass |
| D | DS4.1 Flash | Standard | 2 | 25.629 | 13,579 | Pass |
| D | DS4.1 Flash | Fast | 2 | 11.298 | 10,137 | Pass |
| D | GPT-6.1 Sol | Standard | 2 | 39.815 | 11,908 | Pass |
| D | GPT-6.1 Sol | Fast | 2 | 23.820 | 19,623 | Pass |
| E | DS4.1 Flash | Standard | 2 | 34.501 | 29,873 | Fail |
| E | DS4.1 Flash | Fast | 2 | 15.398 | 30,881 | Fail |
| E | GPT-6.1 Sol | Standard | 2 | 72.812 | 34,581 | Fail |
| E | GPT-6.1 Sol | Fast | 2 | 28.113 | 25,126 | Fail |
| F | DS4.1 Flash | Standard | 2 | 19.923 | 12,593 | Pass |
| F | DS4.1 Flash | Fast | 2 | 12.799 | 12,600 | Pass |
| F | GPT-6.1 Sol | Standard | 2 | 72.053 | 32,083 | Pass |
| F | GPT-6.1 Sol | Fast | 2 | 23.863 | 10,820 | Pass |
| G | DS4.1 Flash | Standard | 1 | 31.012 | 12,414 | Pass |
| G | DS4.1 Flash | Fast | 1 | 8.348 | 7,585 | Pass |
| G | GPT-6.1 Sol | Standard | 1 | 21.667 | 11,140 | Pass |
| G | GPT-6.1 Sol | Fast | 1 | 18.864 | 10,966 | Pass |
| H | DS4.1 Flash | Standard | 1 | 27.340 | 12,975 | Pass |
| H | DS4.1 Flash | Fast | 1 | 13.305 | 9,428 | Pass |
| H | GPT-6.1 Sol | Standard | 1 | 74.575 | 26,442 | Pass |
| H | GPT-6.1 Sol | Fast | 1 | 28.190 | 20,998 | Pass |
| I | DS4.1 Flash | Standard | 1 | 43.154 | 18,187 | Pass |
| I | DS4.1 Flash | Fast | 1 | 9.202 | 11,015 | Pass |
| I | GPT-6.1 Sol | Standard | 1 | 38.367 | 11,841 | Pass |
| I | GPT-6.1 Sol | Fast | 1 | 24.516 | 10,561 | Pass |
| G | DS4.1 Flash | Standard | 2 | 21.340 | 10,337 | Pass |
| G | DS4.1 Flash | Fast | 2 | 7.906 | 7,943 | Pass |
| G | GPT-6.1 Sol | Standard | 2 | 56.842 | 15,482 | Pass |
| G | GPT-6.1 Sol | Fast | 2 | 18.959 | 12,178 | Pass |
| H | DS4.1 Flash | Standard | 2 | 44.072 | 18,595 | Pass |
| H | DS4.1 Flash | Fast | 2 | 9.837 | 8,340 | Pass |
| H | GPT-6.1 Sol | Standard | 2 | 61.829 | 10,902 | Pass |
| H | GPT-6.1 Sol | Fast | 2 | 27.940 | 16,772 | Pass |
| I | DS4.1 Flash | Standard | 2 | 42.778 | 17,516 | Pass |
| I | DS4.1 Flash | Fast | 2 | 9.235 | 11,030 | Pass |
| I | GPT-6.1 Sol | Standard | 2 | 32.376 | 15,876 | Pass |
| I | GPT-6.1 Sol | Fast | 2 | 21.154 | 10,883 | Pass |
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.
Use your own repository to decide which checks a task needs and where delivery should end.