Nine skills, one React page: what each skill cost in tokens
Published
The same 13 point brief, prompt and model, run nine times with one skill at a time. The cheapest arm had no skill at all, and the smallest skill file still added 136% in tokens.
A skill is sold as context on demand: the agent loads a small file only when the task needs it. That pitch implies a skill makes a run cheaper, or at least no more expensive. We tested it on one frontend task with nine arms.
Every arm got the same brief (13 acceptance points), the same prompt, the same model and an empty directory of its own. The only variable was which skill sat in the agent's skill directory. The baseline arm had none.
The page is a workspace settings screen with four tabs, a validated profile form, two plan cards and three notification toggles. Deleting a workspace means typing its name into a dialog.
1.Tokens per arm
Total tokens include input, output and cache reads, so they measure context volume rather than spend. Input grows with what the agent reads, including the skill and its own output. Output is the code and prose it writes.
| Arm | SKILL.md tok | Input tok | Output tok | Total tok | vs baseline | API calls | Wall | Finished |
|---|---|---|---|---|---|---|---|---|
| baseline | 0 | 36,824 | 32,638 | 1.59 M | +0% | 32 | 317 s | yes |
| impeccable | 2,912 | 82,585 | 24,311 | 0.79 M | -50% | 15 | 1,500 s (cap) | no |
| ponytail | 874 | 87,218 | 41,217 | 1.77 M | +11% | 28 | 338 s | yes |
| composition-patterns | 720 | 258,601 | 58,891 | 3.16 M | +99% | 49 | 687 s | yes |
| web-design-guidelines | 308 | 340,740 | 44,824 | 3.75 M | +136% | 60 | 721 s | yes |
| frontend-design | 2,341 | 218,448 | 68,384 | 4.35 M | +174% | 48 | 964 s | yes |
| json-render-shadcn | 1,617 | 127,985 | 65,978 | 4.74 M | +198% | 59 | 989 s | yes |
| radix-ui | 1,353 | 129,216 | 68,537 | 5.88 M | +270% | 67 | 970 s | yes |
| shadcn | 5,376 | 523,571 | 94,502 | 6.05 M | +281% | 56 | 1,500 s (cap) | no |
Cheapest arm
0.79 M
impeccable: 15 API calls, then killed at the 1,500 s cap
Cheapest finished run
1.59 M
baseline: no skill loaded, 36,824 input and 32,638 output
Most expensive arm
6.05 M
shadcn: 25 dependencies, 1,949 code LOC, 11 of 13 checks
Code cut by ponytail
-46%
409 code LOC against 759 with no skill, same 13 checks
One arm came in under the baseline, and it is a skill. impeccable used 0.79 M tokens because most of its work ran in local scripts instead of model calls. Every other skill added context.
2.What the skill file contains
A skill is not one file. impeccable ships 62 files and 555,720 tokens of material, of which 114,095 tokens are markdown an agent can read. Its SKILL.md, the only part loaded up front, is 2,912 tokens.
| Arm | SKILL.md | All markdown | Every file | Files |
|---|---|---|---|---|
| impeccable | 2,912 | 114,095 | 555,720 | 62 |
| ponytail | 874 | 874 | 874 | 1 |
| composition-patterns | 720 | 12,440 | 12,572 | 14 |
| web-design-guidelines | 308 | 308 | 308 | 1 |
| frontend-design | 2,341 | 2,341 | 4,884 | 2 |
| json-render-shadcn | 1,617 | 1,617 | 1,617 | 1 |
| radix-ui | 1,353 | 6,034 | 9,436 | 6 |
| shadcn | 5,376 | 33,891 | 39,163 | 21 |
Payload size did not predict cost. web-design-guidelines ships 308 tokens, the smallest set here, and still added +136% total tokens. ponytail ships 874 and added +11%.
3.What the code looked like
Tokens are the bill; code is the product. Code LOC counts ts, tsx and js only, because several design skills also emit markdown and token JSON that would otherwise inflate the count.
| Arm | Files | Code LOC | Change in code | Other LOC | Dependencies | Spec checks | Build |
|---|---|---|---|---|---|---|---|
| baseline | 17 | 759 | +0% | 958 | 7 | 13/13 | pass |
| impeccable | 33 | 887 | +17% | 2,117 | 9 | 13/13 | pass |
| ponytail | 10 | 409 | -46% | 458 | 7 | 13/13 | pass |
| composition-patterns | 27 | 1,115 | +47% | 679 | 7 | 13/13 | pass |
| web-design-guidelines | 19 | 745 | -2% | 787 | 7 | 13/13 | pass |
| frontend-design | 17 | 761 | +0% | 768 | 9 | 13/13 | pass |
| json-render-shadcn | 23 | 1,147 | +51% | 267 | 13 | 13/13 | pass |
| radix-ui | 21 | 726 | -4% | 760 | 12 | 13/13 | pass |
| shadcn | 36 | 1,949 | +157% | 328 | 25 | 11/13 | pass |
ponytail is the only arm that halved the code: 409 lines, no extra dependency, 13 of 13 checks. shadcn went the other way with 1,949 lines and 25 dependencies, and only shadcn missed checks.
4.Two arms hit the cap
impeccable and shadcn both ran to the 1,500 s cap and were killed. impeccable had already built and passed all 13 checks. shadcn had built too, but left 2 of the 13 checks failing.
A killed process never writes the usage file, so their token counts came from the profile's state.db. Read them as spend until killed, not as cost to finish; the table marks them with a cap.
- impeccable: 15 API calls in 25 minutes, so the wall clock went into local browser and review scripts
- shadcn: 56 API calls, 25 dependencies, 11 of 13 checks, the most tokens of any arm
Limits of this run
- n=1 per arm. Run to run spread is unmeasured, and one run is a smoke test rather than a rate.
- One model and one provider (deepseek-v4.1-flash via opencode-go). Another model may read the same skills differently.
- Spec checks are string presence in source, not runtime behaviour. Keyboard tabs, focus trap and Escape were never driven in a browser.
- Code LOC is a size proxy. It says nothing about whether the page looks good or feels right.
- Skills were copied from upstream at one commit. A skill updated later could behave differently.
- Use ponytail when diff size is the bill
- 409 code LOC against 759 with no skill, 13 of 13 checks, no extra dependency, 338 s against 317 s.
- -46% code LOC, +11% total tokens
- Same build gate and same 13 checks
- Skip shadcn for a one off settings page
- 6.05 M total tokens, 25 dependencies, 1,949 code LOC, and the only arm that missed 2 of 13 checks.
- +281% total tokens against baseline
- The build passed, so the misses are spec misses
- Watch the clock, not only the counter
- impeccable spent 0.79 M tokens and still needed the full 1,500 s cap for local review work.
- 15 API calls over 25 minutes
- Cheap tokens, expensive wall time
- Verdict
- No skill made this page cheaper than no skill. Skills changed the shape of the code, and that is what to buy them for.
Raw rows: docs/analysis/2026-10-17-nine-skills-one-page.jsonl. Harness and per arm sources live in ~/Documents/work/skill-token-poc. Measured 17 Oct 2026 on one machine, not a benchmark for other models.