How to read these results

These benchmarks show what we measured, not what you should expect. Token usage varies significantly based on model behavior, codebase structure, prompt phrasing, and run-to-run variance. We show Claude Code (Sonnet 4.5) as the baseline for comparison.

Each benchmark shows raw token counts and the delta versus Claude Code. Negative percentages mean fewer tokens used. We report single runs here; for variance data on repeated runs, see individual task notes.

Methodology

How we ran these benchmarks:

Token counts include everything, when an agent spawns subagents or delegates work, those tokens are summed into the total. We're working on publishing the benchmark harness so you can try testing them yourself. For now, treat these as indicative, not definitive.

Results by task type

We run many more scenarios internally, but these are an excerpt showing typical real-world use cases where we've seen consistent strengths in our approach.

Exploration tasks

Navigating unfamiliar codebases to answer questions about structure or behavior.

Repository
"When a user types a character in normal mode, which functions are responsible for reading the input?"
Objective: Identify state_enter() → safe_vgetc() → vpeekc()
Agent Tokens vs Baseline
Claude Code (Sonnet 4.5) — baseline 45k —
OpenCode (Sonnet 4.5) 70k +56%
Chippery /balanced 31k −31%
Chippery /balanced-pro 27k −40%
Chippery /frugal 21k −53%
Model: Sonnet 4.5 Average of 15 runs All runs succeeded

Debugging tasks

Finding and fixing bugs in existing code.

Repository
"Investigate a subtle memory/performance regression in this React app. After switching between Reports and other views, and tweaking team focus or filters, memory usage and background work gradually increases. Please find the root cause, fix it without changing the UI behavior, and run the tests to confirm the leak is gone."
Objective: Find memory leak, pass tests successfully
Agent Tokens vs Baseline
Claude Code (Sonnet 4.5) — baseline 35k —
OpenCode (Sonnet 4.5) 28k −20%
Chippery /balanced 21k −40%
Chippery /balanced-pro 19k −46%
Chippery /frugal 17k −51%
Model: Sonnet 4.5 Average of 15 runs All runs succeeded

Refactoring tasks

Restructuring code, fixing issues, and cleaning up without changing behavior.

Repository
"The test suite is failing and we need to get it passing. Run the tests to see what's broken. There's a memory leak happening with our metrics handlers - when we register and unregister endpoints, the handler count keeps growing instead of staying stable, I think. Does the unregister actually do anything? The rate limiter is also letting through one more request than it should. If we set a limit of 5, it allows 6 requests before blocking. While you're in there, clean up the codebase - I've noticed we have a lot of duplicate utility functions scattered across packs and some functions that aren't used anywhere."
Objective: Find memory leak, resolve unregister issue, remove duplicate code, build Go successfully
Agent Tokens vs Baseline
Claude Code (Sonnet 4.5) — baseline 64k —
OpenCode (Sonnet 4.5) 42k −34%
Chippery /balanced 36k −44%
Chippery /balanced-pro 34k −47%
Chippery /frugal 31k −52%
Model: Sonnet 4.5 Average of 15 runs All runs succeeded

Multi-turn conversations

Real-world sessions that shift focus, starting in one area, moving elsewhere, then returning. These test how well the agent maintains context and navigates changing requirements.

Repository
Turn 1: "Can you checkout the project?"
Turn 2: "We need a way to send us emails directly if there's an order made. Please implement that."
Turn 3: "How can I test this?"
Turn 4: "Actually, I think the email approach wasn't so smart, can you remove that code? Let's instead simply write a Slack message to our Slack channel."
Objective: Understand codebase, create functioning email sending, explain clear test logic, remove email sending properly without trace, add Slack integration
Agent Tokens vs Baseline
Claude Code (Sonnet 4.5) — baseline 98k —
OpenCode (Sonnet 4.5) 95k −3%
Chippery /balanced 42k −57%
Chippery /balanced-pro 36k −63%
Chippery /frugal 32k −67%
Model: Sonnet 4.5 Average of 15 runs All runs succeeded

Where optimization didn't help

Not every benchmark favors our approach. Here's one where Chippery performed worse than baseline.

Repository
"Create a simple authentication library for the Lucky framework. It should have user login, registration, forgotten password and have strong security built in."
Objective: Implement auth library with login, registration, password reset, and security best practices
Agent Tokens vs Baseline
Claude Code (Sonnet 4.5) — baseline 110k —
OpenCode (Sonnet 4.5) 137k +25%
Chippery /balanced 142k +29%
Chippery /balanced-pro 130k +18%
Chippery /frugal 132k +20%
Model: Sonnet 4.5 Average of 15 runs All runs succeeded

Why this happened: Chippery's optimization relies on understanding codebase structure and navigating efficiently. Lucky is written in Crystal which uses patterns that our indexer couldn't rank effectively. When Chippery can't build a reliable mental model of the code, its navigation heuristics work against it, causing more exploration rather than less. This is the kind of project where /all-in mode (no optimization) is a good fallback.

Where Chippery does well

We've seen consistent improvements in these scenarios:

Where Chippery struggles

We've observed minimal or no improvement, or occasional regressions, in these scenarios:

Languages tested

Our benchmarks have used these languages. Chippery likely works on others; we just haven't measured them yet.

JavaScript TypeScript Python Go Rust PHP Swift Java C C++ Ruby Kotlin

Reproduce these benchmarks

We're working on publishing our benchmark harness. When ready, you'll be able to run these same tasks on your own machine and compare results. Watch the GitHub repo for updates.

In the meantime, if you run your own comparisons and want to share results, we'd be interested: [email protected]