Each model call carries the whole Claude Code system prompt, including every skill description you have installed. That, not the length of your request, is the price of a check. On a subscription it comes out of your usage limits; with an API key it is billed per token. A few dozen normal runs can take a noticeable share of a five-hour limit.
All with sonnet.
| What | Cost |
|---|---|
lint, check, list, init |
free |
| one batch call, demo suite (6 skills, 12 cases) | $0.05–0.10 |
| one batch call, about 80 skills installed | $0.14 |
| one normal run, demo suite | about $0.05 per case |
A normal run stops Claude Code as soon as it loads a skill or starts answering, so you pay for the routing decision and not for the work.
- Go up the levels.
linton every change,run --batchwhen lint is clean, a normalrunonly for what the batch flagged. The batch report ends with the--onlyline to confirm its failures. - Run only what you touched.
--skill a,bkeeps the cases that mention those skills. - Set a budget.
--budget 2stops starting new runs once the spend estimate reaches $2. A run can end without reporting its cost, for example when it hangs and is killed; skillcheck then prices it from the tokens it used, at the rate of the runs that reported one (or at list price before any has). The report's cost line then starts with~, and--jsonkeeps the exact part incostUsdand the estimate inestimatedCostUsd. - Keep
repeat: 1while iterating.--repeat 3makes a result stable and triples the price. Use it in CI or when a case looks flaky. - Fewer installed skills make every call cheaper. In CI, point
--config-dirat a directory with only the skills under test (see ci.md).
run --batch puts up to 25 requests into one prompt and asks the model for a
structured answer: which skill would it load for each. The model sees its real
skill list, but it states a choice instead of making one, and the two can
differ. On the demo they matched every time, but treat a batch failure as a
lead and a batch pass as a good sign, not a proof.