Stripe agent benchmark
One workflow.
Nine tools.
25 paired runs.
We gave the same model the same multi-step Stripe task through two interfaces. Fiber completed every run with one call, using 95.2% fewer tokens and producing zero Stripe API errors.
Fiber helped decisively on efficiency and error exposure. Observed completion improved from 24/25 to 25/25, but that one-run difference is too small to generalize beyond this benchmark.
The model did less work—and made fewer mistakes.
| Exact aggregate | Literal | Fiber |
|---|---|---|
| Completed trials | 24 / 25 | 25 / 25 |
| Total tool calls | 292 | 25 |
| Stripe API errors | 33 | 0 |
| Total agent tokens | 994,106 | 47,605 |
| Aggregate agent latency | 1,326.971s | 343.415s |
| Cleanup remediation | 1 run | 0 runs |
Same model. Same task. Same Stripe transport.
Five frozen catalog tasks were repeated five times per interface. Every trial created a product, attached a one-time price, created and retrieved a payment link, verified ownership and relationships, then left all created resources inactive. Surface order was counterbalanced across pairs.
Literal interface
09 tools- Create, retrieve, and update product
- Create, retrieve, and update price
- Create, retrieve, and update payment link
- The model sequences and repairs every step
Fiber interface
01 tool- One confirmation-gated catalog workflow
- The same nine Stripe operations underneath
- Code verifies ownership and relationships
- Cleanup executes even when a step fails
literal: create_product → create_price → create_link → retrieve × 3 → deactivate × 3
fiber: run_catalog_workflow({ confirmed: true }) → assertions + cleanupThe only failed run was not a scoring judgment.
In catalog-200, repetition 4, the literal agent created an inactive price, received a Stripe rejection, then created a second active price while recovering.
The payment link eventually worked, and remediation left every created object inactive. The deterministic evaluator still rejected the trial because the task forbade duplicate side effects. The agent’s final prose claimed success; the resource evidence did not.
Stripe: “Payment Links cannot include deleted or archived prices.”
Stripe: “Payment Links cannot include a price with an inactive product.”
Failed row: stripe-catalog-200 / repetition 4 / 13 calls / 46,657 tokens / remediation verified.
All 50 trial measurements, without Stripe object IDs or model transcripts.
The downloadable JSON contains every task ID, repetition, interface, pass/fail result, tool-call count, API-error count and message, token count, latency, remediation flag, and final cleanup state. Raw provider responses and sandbox resource identifiers remain excluded.
Inspect all 50 sanitized trial rowsExpand +Collapse −
| Task | Rep | Interface | Result | Calls | API errors | Tokens | Latency | Cleanup |
|---|---|---|---|---|---|---|---|---|
| catalog-049 | 01 | Fiber | Pass | 1 | 0 | 1,901 | 14.2s | Verified |
| catalog-049 | 01 | Literal | Pass | 13 | 2 | 45,712 | 60.1s | Verified |
| catalog-049 | 02 | Literal | Pass | 13 | 2 | 45,468 | 54.4s | Verified |
| catalog-049 | 02 | Fiber | Pass | 1 | 0 | 1,891 | 13.5s | Verified |
| catalog-049 | 03 | Fiber | Pass | 1 | 0 | 1,880 | 13.2s | Verified |
| catalog-049 | 03 | Literal | Pass | 13 | 2 | 45,665 | 60.8s | Verified |
| catalog-049 | 04 | Literal | Pass | 12 | 1 | 41,694 | 55.5s | Verified |
| catalog-049 | 04 | Fiber | Pass | 1 | 0 | 1,892 | 13.6s | Verified |
| catalog-049 | 05 | Fiber | Pass | 1 | 0 | 1,903 | 13.7s | Verified |
| catalog-049 | 05 | Literal | Pass | 13 | 2 | 45,841 | 60.8s | Verified |
| catalog-099 | 01 | Literal | Pass | 9 | 0 | 29,146 | 39.9s | Verified |
| catalog-099 | 01 | Fiber | Pass | 1 | 0 | 1,898 | 13.6s | Verified |
| catalog-099 | 02 | Fiber | Pass | 1 | 0 | 1,889 | 13.4s | Verified |
| catalog-099 | 02 | Literal | Pass | 9 | 0 | 29,119 | 39.8s | Verified |
| catalog-099 | 03 | Literal | Pass | 9 | 0 | 29,056 | 39.4s | Verified |
| catalog-099 | 03 | Fiber | Pass | 1 | 0 | 1,893 | 13.6s | Verified |
| catalog-099 | 04 | Fiber | Pass | 1 | 0 | 1,892 | 13.7s | Verified |
| catalog-099 | 04 | Literal | Pass | 13 | 2 | 45,768 | 60.3s | Verified |
| catalog-099 | 05 | Literal | Pass | 13 | 2 | 45,873 | 55.5s | Verified |
| catalog-099 | 05 | Fiber | Pass | 1 | 0 | 1,902 | 13.3s | Verified |
| catalog-200 | 01 | Literal | Pass | 13 | 2 | 45,914 | 59.9s | Verified |
| catalog-200 | 01 | Fiber | Pass | 1 | 0 | 1,897 | 13.4s | Verified |
| catalog-200 | 02 | Fiber | Pass | 1 | 0 | 1,899 | 13.6s | Verified |
| catalog-200 | 02 | Literal | Pass | 13 | 2 | 46,159 | 60.9s | Verified |
| catalog-200 | 03 | Literal | Pass | 13 | 2 | 45,863 | 59.9s | Verified |
| catalog-200 | 03 | Fiber | Pass | 1 | 0 | 1,897 | 13.6s | Verified |
| catalog-200 | 04 | Fiber | Pass | 1 | 0 | 1,904 | 13.6s | Verified |
| catalog-200 | 04 | Literal | Fail | 13 | 2 | 46,657 | 63.1s | Verified |
| catalog-200 | 05 | Literal | Pass | 13 | 2 | 45,584 | 58.0s | Verified |
| catalog-200 | 05 | Fiber | Pass | 1 | 0 | 1,897 | 13.5s | Verified |
| catalog-350 | 01 | Literal | Pass | 13 | 2 | 45,777 | 61.5s | Verified |
| catalog-350 | 01 | Fiber | Pass | 1 | 0 | 1,908 | 13.7s | Verified |
| catalog-350 | 02 | Fiber | Pass | 1 | 0 | 1,927 | 14.3s | Verified |
| catalog-350 | 02 | Literal | Pass | 13 | 2 | 45,544 | 59.8s | Verified |
| catalog-350 | 03 | Literal | Pass | 13 | 2 | 45,712 | 55.5s | Verified |
| catalog-350 | 03 | Fiber | Pass | 1 | 0 | 1,895 | 13.3s | Verified |
| catalog-350 | 04 | Fiber | Pass | 1 | 0 | 1,908 | 13.5s | Verified |
| catalog-350 | 04 | Literal | Pass | 13 | 2 | 45,814 | 59.4s | Verified |
| catalog-350 | 05 | Literal | Pass | 13 | 2 | 45,833 | 61.2s | Verified |
| catalog-350 | 05 | Fiber | Pass | 1 | 0 | 1,935 | 15.1s | Verified |
| catalog-1250 | 01 | Literal | Pass | 9 | 0 | 15,616 | 39.2s | Verified |
| catalog-1250 | 01 | Fiber | Pass | 1 | 0 | 1,923 | 14.4s | Verified |
| catalog-1250 | 02 | Fiber | Pass | 1 | 0 | 1,922 | 14.0s | Verified |
| catalog-1250 | 02 | Literal | Pass | 9 | 0 | 29,092 | 41.2s | Verified |
| catalog-1250 | 03 | Literal | Pass | 9 | 0 | 29,096 | 41.6s | Verified |
| catalog-1250 | 03 | Fiber | Pass | 1 | 0 | 1,920 | 14.1s | Verified |
| catalog-1250 | 04 | Fiber | Pass | 1 | 0 | 1,917 | 14.1s | Verified |
| catalog-1250 | 04 | Literal | Pass | 9 | 0 | 29,077 | 40.3s | Verified |
| catalog-1250 | 05 | Literal | Pass | 9 | 0 | 29,026 | 39.0s | Verified |
| catalog-1250 | 05 | Fiber | Pass | 1 | 0 | 1,915 | 13.4s | Verified |
What this result does—and does not—establish.
Supported by this benchmark
- Fiber reduced model-visible orchestration from nine tools to one reviewed workflow.
- Every Fiber trial completed in one call with zero observed Stripe API errors.
- Tokens and local-model latency fell substantially on this task family.
- Deterministic cleanup prevented abandoned active resources.
Not established here
- A universal reliability improvement across APIs, models, or task types.
- A statistically decisive completion-rate lift from a 25-pair sample.
- Hosted-model dollar savings; local inference cost was recorded as $0.
- Hardware-independent latency; only paired relative latency is meaningful.
The protocol was frozen before the result existed.
The repository pins the model, runtime, seed, context length, task files, tool schemas, source fixture, assertions, cleanup policy, and publication requirements. The publisher recomputes the public aggregate from raw redacted evidence and refuses partial suites.
npm run benchmark:stripe:check
npm run benchmark:stripe:case-study
npm run benchmark:stripe:publish -- artifacts/stripe-case-study/<run>1529b4c07f25b420d75718d0be0c0af1b06a5724c3fdc5a9c98efbd8489a8799f0336dc11a3988068afdb08f01eaba00fe59468bad702e2145e606a0b0614df969e676c7efe8f2fee5ab59ad7cec82bd988125375f5dba5d0754aed1dc177a20c3787d02e4b189be8be14c2c06c075b23bf5bf8531d6f66f164f3cd7542026e6