Stacking AI coding tools without paying twice
Most token savers and helper plugins work fine on their own. Trouble starts when you install three of them and assume the savings add up. In November 2026 I ran four of them on my own setup. The savings did not add up.
Check what each tool can actually see
Every one of these tools hooks into one slice of Claude Code, and the slices rarely overlap the way you expect.
- rtk rewrites shell output through a Bash hook. Read and Grep never go through Bash, so they bypass it. In my own A/B on 6 November 2026 (10 headless runs per arm, same task bundle, ABBA order), the runs with rtk cost $4.20 against $2.94 without it. Answers were the same. That is +7% to +43% depending on how you treat one outlier run. Ten runs a side is a hint, not proof. The same day it returned wrong output twice:
wc -lgave 0 for a 65-line file, andgrep -vprinted the matching lines instead of the others. - terse compresses JSON coming back from MCP servers. Playwright returns page snapshots as text, so terse changed 0% of them (5 November 2026). A fetch server put one line of text in front of its JSON, and 48 KB of GitHub JSON went through untouched. It cannot see Read, Bash, WebFetch or WebSearch at all.
- headroom is a proxy. Placed behind rtk, the only thing it compressed was rtk's grep output, which rtk had already shrunk once. Its own saving on a coding task came to 3 to 4% of input tokens (two runs per setup, Haiku, 5 November 2026).
If two tools touch the same output, the second one has little left to do. If they touch different outputs, check that the one you care about is in either slice.
Run a control arm, not just "on" and "off"
In one setup, input tokens dropped 43% with headroom in the path. None of that drop came from headroom. Pointing Claude Code at any address other than Anthropic's switched off its tool search, and that alone cut about 16,000 tokens per request. The fourth arm proved it: the same proxy with compression switched off showed the same drop.
So test three things: plain, the full stack, and the stack with its plumbing in place but its feature off. This is the command shape I used for the plain arm:
claude -p "$(cat task.txt)" --model haiku --output-format json --setting-sources "" \
--strict-mcp-config --no-session-persistence
--setting-sources "" keeps your own hooks and rules files out of the run, so the only difference between arms is the tool under test.
Don't trust a tool's own savings counter
After two runs where headroom really saved about 3,600 tokens, its summary said 115,832 tokens saved, 55.65%. Most of that was tool schemas its own stats mark as not realised. With compression off, it still reported 112,920 saved. Read the bill, not the counter.
A tool that replaces built-ins can break the ones you keep
ashlr-plugin swaps Read, Grep and Bash for its own 54 tools and blocks the built-in versions. Its search failed with "ripgrep (rg) is not installed" because rg on my machine was a shell function it could not see. When I loaded its tools without its hooks, Haiku never called them, and the 54 tool definitions still made the session 50% dearer. Over two whole sessions it came out at −22% and +16%, and one of those runs got two of six answers wrong. In that run the model never saw the middle of a long file, because the read had cut it out.
Two tools for the same job: compare, then keep one
A second writing-cleanup skill (humanizer) did the same job as one I already had. The useful move is to run both on the same text and fold any missing patterns into the one you keep, not to load both on every prompt. I haven't run that comparison yet.
The same goes for search. On a "who calls this function" task with seven known callers, grep found 7 of 7. A code-graph tool found 1 of 7 plus 7 false positives, and a second graph tool found 0 (1 August 2026). Putting terse in front of the graph tool made its answer 28% shorter and still wrong.
Tiếng Việt