What a run costs: measured spend, the nightly floor, and the levers¶
A dated snapshot, as of 2026-10-18. Particles spends money in one place: calls to a hosted language model. Embedding and retrieval run on your machine and make no API call. This page gives what each kind of run has cost when it was measured, what a night of scheduled maintenance costs when nothing new has arrived, and what each setting that changes the bill saves.
Every dollar figure here comes from the token counts the provider returned on the calls a run actually made, priced at list price. A figure that is an estimate says so beside it, and § Not yet measured lists what has no measurement and what run would supply it.
Model rows on this page are evidence about cost, not a ranking of vendors
Where this page compares models, it reports what each one cost and returned on this project's extraction prompt and judge, which were both developed against Claude Sonnet. Every other model is measured on ground tuned for a competitor, by an amount nobody has quantified. A cheaper row is a statement about what a configuration change would cost here, never a statement that one model or provider is better than another.
The short answer¶
| Run | What it cost | Model | Measured |
|---|---|---|---|
| First audit of an agent's memory files: 96 files, 212,792 characters | US$7.97 in 96 minutes, about 8 cents a file and 3.7 cents per 1,000 characters | claude-sonnet-5 |
2026-09-25 |
| First audit of the same directory today: 114 files, 253,858 characters, default configuration | US$6.11 in about 50 minutes, about 5 cents a file and 2.4 cents per 1,000 characters | claude-sonnet-5-5 |
2026-10-18 |
| Nightly maintenance on a living store of 48,000 to 56,000 beliefs | US$2.56 to US$3.81 a night, five nights | claude-sonnet-5-5, probes on claude-haiku-5-5 |
2026-10-12 to 10-16 |
| The same nights before the model change | US$6.32 to US$9.05 a night | claude-sonnet-5, probes on claude-haiku-4-5 |
2026-10-03 to 10-10 |
| A night on which nothing new arrived | US$0.00: no model calls, on a 57,060-belief store, and on each of ten earlier such runs | any | 2026-10-18 on 1.192.24; 2026-08-27 to 09-25 |
| A query: retrieval | Nothing; it runs locally | none | by construction |
| A query: the written answer | US$0.006 to US$0.019, median about US$0.012; one question the relevance floor refused cost nothing | claude-sonnet-5-5 |
2026-10-18, ten queries |
| The trip-versus-move benchmark, five runs | US$0.21 and US$0.22 | claude-sonnet-5-5 and claude-sonnet-4-6 |
2026-10-14 |
The pattern behind the table: extraction is the bill. Reading a source into claims is where nearly all of the money goes, and it is paid once per version of a source. Maintenance is paid on what changed since the last run, so a store that receives nothing costs nothing to maintain, and a store that grows does not get more expensive to keep for that reason alone.
Prices used¶
List prices in US$ per million tokens, read from Anthropic's pricing page on
2026-10-18. These are also the figures the CLI ships with
(llm.price_per_mtok); an operator entry for the same model replaces them.
| Model | Input | Output | Cache read | Used here for |
|---|---|---|---|---|
claude-sonnet-5-5 |
2.00 | 10.00 | 0.10 (0.05×) | Extraction, second readings, the use judge, query answers, and every call of the 2026-10-18 audit; the default since 1.189.0 |
claude-sonnet-5 |
2.00 | 10.00 | 0.20 (0.10×) | The first audit and the nights before 2026-10-12 |
claude-sonnet-4-6 |
3.00 | 15.00 | 0.30 (0.10×) | The default before 1.189.0 |
claude-haiku-5-5 |
0.10 | 0.50 | 0.01 (0.10×) | Contradiction probes from 2026-10-09; prompts up to 100,000 tokens |
claude-haiku-4-5 |
1.00 | 5.00 | 0.10 (0.10×) | Contradiction probes before 2026-10-09 |
The Message Batches API takes 50 % off input and output, and a five-minute
cache write costs 1.25× input. The nightly figures below were priced by
releases that charged every cache read at 0.10× input; claude-sonnet-5-5 bills
its cache reads at 0.05×, so those figures are high by one or two cents a
night. The claude-sonnet-5 price of
US$2/US$10 is the standard price: the increase to US$3/US$15 once scheduled
for 2026-09-01 did not happen.
The first audit¶
particles audit reads an agent's memory directory into claims and reports the
contradictions, near-duplicates and stale entries it finds. On 2026-09-25 it
ran over 96 Claude Code memory files into a fresh store:
| Source | 96 files, 212,792 characters (about 53,000 tokens of source) |
| Extraction | 104 calls on claude-sonnet-5 (8 of them retries), extraction.max_tokens 16,384 with a retry at 20,000, the budgets of that release |
| Contradiction checks | 374 calls on claude-haiku-4-5 |
| Result | 1,916 beliefs; 92 files extracted in full, 4 in part, none lost |
| Time | 96 minutes, calls one at a time |
| Billed | US$7.97, the same to the cent as the change in the account's prepaid balance (US$20.82 to US$12.85) and as the audit's own usage line |
That is US$0.083 a file, US$0.037 per 1,000 characters, and US$0.004 a belief. Today's defaults raise the output budgets to 32,000 and 64,000. A budget is a cap, not a charge, so the larger budgets raise the ceiling of an estimate and not the bill.
A budget set too small costs more, not less. An earlier run over the same 96 files at an 8,192-token budget cost about US$10 by the account balance and left 17 files empty or cut short, because a reply that hits its budget is billed in full and its later claims are lost.
Per file is the wrong unit for long documents¶
The cost of extraction follows how much a document asserts, which tracks its
length, not its file count. A memory note is short. A design document is not:
on 2026-10-04 the audit ran over fourteen of this project's own design records,
which came out at about 7 claims per 1,000 characters and about 400 output
tokens per claim. Six of them, 13,000 to 22,000 characters each, took 13
extraction calls and wrote 317,000 output tokens and 776 claims, about US$3.31
of extraction on claude-sonnet-5, and the fourteen together cost about
US$8 to US$9. One 20,000-character record costs about what ten memory notes do.
The audit's estimate used to assume a flat 7,000 output tokens per call, which
fits short notes and priced these records about three times low. Since 1.174.2
it prices each call by the characters it reads (about two output tokens per
character plus 1,600 per call on claude-sonnet-5, scaled per model) and
leaves out files already extracted. Both measured runs above fall inside the
range it now prints.
On today's default model¶
claude-sonnet-5-5 became the compiled default in 1.189.0. On 2026-10-18 the
audit ran over the same memory directory as it stands today, into a fresh
store, with no configuration at all, so every model call went to the default:
| Source | 114 files, 253,858 characters |
| Extraction | 114 calls on claude-sonnet-5-5, no retries; 433,000 output tokens |
| Other calls | 228 contradiction checks, 137 subject-resolution calls, 3 second readings, all on claude-sonnet-5-5 |
| Result | 1,512 beliefs; all 114 files extracted in full |
| Time | about 50 minutes |
| Cost | US$6.11 at list price, US$5.06 of it extraction, by the audit's own usage line |
That is US$0.054 a file, US$0.024 per 1,000 characters, and US$0.004 a belief. The estimate printed before it said US$3.46–6.89 expected, with a US$45 ceiling, and the bill landed near the top of that range.
The two audits are not the same experiment, so the comparison is per
character, not per run. The directory has changed since September (114 files
and 254,000 characters against 96 and 213,000), and the September run sent its
contradiction checks to claude-haiku-4-5 under the store owner's
configuration, where this one sends everything to the default model. Per 1,000
characters the bill fell from 3.7 cents to 2.4. claude-sonnet-5-5 wrote about
286 output tokens per belief here; on the extraction benchmark it wrote about
half the output of claude-sonnet-5 for the same work (59,760 against 111,950
tokens over the same 18 calls).
The nightly cycle on a living store¶
particles memory consolidate runs the store's maintenance once a night:
extract what is queued, reconcile updates, re-read flagged contradictions,
mine which beliefs sessions used, and once a week a census of the whole store.
Every pass that calls a model works on what changed since the previous run,
under a per-pass call cap, and the extraction and use-judge passes ride the
Message Batches API at half price.
These are the project's own store, the maintainer's daily Claude Code memory,
read from each night's run log ("LLM usage … ≈ $X at list price") and checked
against the models each night's run record names. Every night ran 1.168.8 or
later (its run record carries the budget block that release added); the five
nights on claude-sonnet-5-5 ran 1.182.2 through 1.191.4.
| Night | Extraction model | Extraction calls | Extraction output tokens | Probe model | Active beliefs | Night's cost |
|---|---|---|---|---|---|---|
| 2026-10-03 | claude-sonnet-5 |
66 | 954k | claude-haiku-4-5 |
39,571 | US$7.28 |
| 2026-10-04 | claude-sonnet-5 |
76 | 1.3M | claude-haiku-4-5 |
41,426 | US$7.33 |
| 2026-10-06 | claude-sonnet-5 |
53 | 1.3M | claude-haiku-4-5 |
43,656 | US$9.05 |
| 2026-10-08 | claude-sonnet-5 |
58 | 1.2M | claude-haiku-4-5 |
45,697 | US$7.96 |
| 2026-10-10 | claude-sonnet-5 |
53 | 862k | claude-haiku-5-5 |
47,809 | US$6.32 |
| 2026-10-12 | claude-sonnet-5-5 |
49 | 235k | claude-haiku-5-5 |
48,213 | US$2.65 |
| 2026-10-13 | claude-sonnet-5-5 |
57 | 293k | claude-haiku-5-5 |
48,909 | US$3.19 |
| 2026-10-14 | claude-sonnet-5-5 |
65 | 418k | claude-haiku-5-5 |
49,233 | US$3.81 |
| 2026-10-15 | claude-sonnet-5-5 |
52 | 340k | claude-haiku-5-5 |
55,578 | US$2.95 |
| 2026-10-16 | claude-sonnet-5-5 |
48 | 236k | claude-haiku-5-5 |
55,831 | US$2.56 |
The census ran on 10-08 and 10-15. The run of 2026-10-09 is left out because
its release had no price for claude-haiku-5-5 and printed tokens only.
What moved the cost was the model, not the work. Every night in the table
extracted the same thing: 20 queued session transcripts (the per-night cap)
plus the three to five local files that had changed, about 50 to 65 extraction
calls. On 2026-10-12 the store's configuration moved extraction and the second
readings from claude-sonnet-5 to claude-sonnet-5-5, and extraction output
fell from 0.86M–1.3M tokens a night to 0.24M–0.42M. Priced from those counts,
extraction went from US$4.80–7.21 a night to US$1.50–2.54, or from 8 to 13
cents per extraction call to 3 to 4 cents. Moving the contradiction probes to
claude-haiku-5-5 on 2026-10-09 took that pass from up to about US$1.05 a
night to about US$0.10.
The other cost work of those weeks is on both sides of the line: the remembered verdicts that stop the cycle re-asking a pair it has already cleared, the weekly census, and extraction of only the appended tail of a transcript were all in the releases every night in the table ran. Faster retrieval over a large store shipped on 2026-10-17, after the last night here, and changes query time, not model calls.
The cheaper model is not free on every axis. On the extraction benchmark
claude-sonnet-5-5 recovered fewer of the required claims than
claude-sonnet-5 (recall 0.707 against 0.827; see the
2026-10 provider survey). The default moved to it
after separate measurements of the update and contradiction checks.
Store size does not drive the nightly cost. Over these two weeks the store grew from about 40,000 to 56,000 active beliefs and the cost fell. What a night costs follows what arrived since the previous one. This store has carried a queue of 300 to 430 session transcripts waiting for extraction since July, drained 20 a night, so every night in the table is a working night.
For a larger sample of small stores: across the 150 freshly built stores of the LongMemEval run, one maintenance cycle made 36,627 model calls for about US$10, about seven cents per store per cycle, four fifths of it the census (Benchmarks).
The scheduled-maintenance floor: a quiet night¶
The floor is what a night costs when nothing new has arrived. It measured zero: US$0.00, no model calls.
The measurement, on 2026-10-18 with release 1.192.24: a copy of the store above (57,060 active beliefs), with its own configuration and with the queue of waiting transcripts switched off, so that the only new material was what had changed since its last run two days earlier. The cycle ran twice, back to back.
| First run | Second run (the quiet night) | |
|---|---|---|
| What it found | 3,146 beliefs changed since the previous run, 42 sessions to mine | 3 beliefs, the ones the first run itself wrote |
| Model calls | 323 | 0 |
| Cost | US$1.17 (the use judge US$0.95 of it) | US$0.00 |
| Wall time | 27 minutes | 25 seconds |
The second run did every pass and found nothing to ask a model: each pass that can call one reads only what changed since the previous run, the census reads what changed since the previous census (and was not due), and the use judge mines only sessions that happened since. The first run is what two days of use cost to maintain when no new source arrives.
The store's own records agree. On ten scheduled runs between 2026-08-27 and 2026-09-25 in which no new belief entered it, every pass ran and none called a model, on releases from before the cycle priced its own usage and before several of today's passes existed.
A query¶
Retrieval embeds the question with a local model (all-MiniLM-L6-v2) and
scores it against the store's claims on your machine: no API call, at any
store size. The deterministic query modes (--group-by and the other
aggregates) make no model call at all.
A written answer is one call to the answering model (llm.query_response),
which reads the retrieved claims and the question. Ten questions were run on
2026-10-18 against a copy of the 57,060-belief store above, at the default of
40 claims, on claude-sonnet-5-5, with each call metered. They were the four
questions the store's history shows were actually put to it, then six of its
owner's own questions taken in a fixed order:
| Measured | |
|---|---|
| Model calls | 9 (one question fell below the relevance floor and was answered with no model call) |
| Input per call | 2,427 to 3,410 tokens |
| Output per call | 104 to 1,350 tokens |
| Cost per answered query | US$0.006 to US$0.019, median about US$0.012 |
| Ten queries | US$0.10 |
Output decides the spread: a one-line answer cost under a cent, and a long one two cents. At 10 claims the retrieved context measured 542 tokens on LongMemEval, against 2,149 at 40, and answered as well (Benchmarks). Latency is measured separately: query latency.
For bulk ingestion, the LongMemEval stores give a rate: building them cost
about US$2.70 per question on claude-sonnet-5 through the batch API, for
a chat history of about 167,000 tokens each, or about US$16 per million tokens
of conversation read into claims.
The levers, and what each one saves¶
| Lever | Setting | What it saved, where measured |
|---|---|---|
| Model per purpose | llm.extraction, llm.semantic_lint, llm.verification, llm.query_response, and the others; each falls back to llm.default |
The nightly cost above: US$6.32–9.05 to US$2.56–3.81 a night. Contradiction probes on claude-haiku-5-5: up to about US$1.05 to about US$0.10 a night |
| The batch API | llm.batch |
Half price on extraction and the use judge. Already applied in every nightly figure above |
| Per-pass caps | consolidation.max_pending_entries, consolidation.max_update_probes, utility.mining.max_behavioural_calls, audit.max_contradiction_probes |
Bound every pass, so a night costs at most its caps. A capped pass says what it left for the next run |
| The census cadence | consolidation.census.interval_hours (default 168, weekly) |
The census is the largest maintenance pass on a fresh store (four fifths of the LongMemEval cycle). Weekly instead of nightly pays it once in seven nights |
| A dollar budget per run | consolidation.budget_usd; --max-usd on the benchmark verbs |
A pass whose estimate would cross the budget is skipped and named in the report; a batch chunk that would cross it is not sent |
| Estimate before spending | particles audit --estimate, particles memory consolidate --dry-run, --estimate on the benchmark verbs |
Free: no deposit, no write, no model call. See the note below on how close they come |
| No model at all | particles memory consolidate --structural-only |
Zero model calls. Runs the structural passes and says which were skipped |
| A large enough output budget | extraction.max_tokens |
A budget too small cost more and lost claims (about US$10 against US$7.97 for the same 96 files) |
| Retrieval depth | --top-k |
10 claims answered as well as 40 on LongMemEval on a quarter of the context, 542 against 2,149 tokens |
| A local model | provider: local per purpose (an Ollama endpoint) |
No API spend for the purposes routed there. See below for what has and has not been shown |
How close the estimates come. The audit's estimate is fitted to the two
measured audits above and contains both. The consolidation dry run plans pass 1
the way the extractor will read each snapshot: a transcript's new tail rather
than the whole of it, no call for a chunk whose claims the store already holds,
and nothing past the per-source call cap. It applies the batch discount where
the run would batch (extraction and the use judge), prices the extraction
prompt's cached prefix at the model's cache-read rate, and expects a transcript
to write about 0.4 times the output per character of a memory note or a design
record, since it states fewer claims. On the store above, on 2026-10-18, it
projected about US$4.88 for a night that would extract 20 queued transcripts,
US$3.06 of it extraction on 71 calls, against US$2.56–3.81 measured on the five
comparable nights before (extraction US$1.49–2.54). Before those changes the
same night read about US$17. Replayed over the snapshots each of those five
nights extracted, the extraction estimate came out 1.4 to 2.3 times what was
billed. Read the dry run as an upper bound within about a factor of two, and the
run's own usage line as the cost. consolidation.budget_usd decides with the
same estimate.
Cheaper extraction models. The two provider surveys measured what other
extraction models cost and returned on the same benchmark. In the
2026-09 survey, the cheapest model with full
recall matched claude-sonnet-5 on recall (0.800 each) at about a thirteenth
of the cost per run, and was worse on precision (0.719 against 0.797) and on
calibration (expected calibration error 0.160 against 0.096). The
2026-10 survey re-measured every row on a larger
suite and fitted a calibration to each, and the fit did not close that gap. A
stored confidence is never rewritten after a claim is created, so calibration
is the axis that kept extraction on Sonnet by default, and no cheaper
extraction preset ships. Routing extraction elsewhere is a configuration
change for an operator whose bar is different. Read both surveys with the
warning at the top of this page: the prompt and judge are tuned on Sonnet.
Local models. On LongMemEval, qwen3:14b running locally ranked six
read-side variants the way claude-sonnet-5 did (Kendall's tau-b 0.828 against
a bar of 0.6), while scoring 0.15 to 0.19 lower in absolute accuracy
(rank agreement). An exploratory sweep of
read-side settings can therefore run locally at no API cost, with the hosted
model needed only to confirm the few settings worth reporting. That result is
about ranking read-side variants on one benchmark. It says nothing about
extraction quality on a local model, which has not been measured to a standard
that would ship as a default.
Not yet measured¶
| What | The run that measures it | Its cost, by the CLI's own estimate |
|---|---|---|
Dense documents on claude-sonnet-5-5 |
The fourteen design records above, re-run on the new default | Not yet estimated |
Reproducing¶
# Free: print what an audit of a memory directory would cost, deposit nothing
particles audit ~/.claude/projects/<project>/memory --estimate
# Free: price tonight's maintenance pass by pass, write nothing, call nothing
particles memory consolidate --dry-run
# Cap a run in dollars (config.yaml)
# consolidation:
# budget_usd: 3.00
# Every metered run ends with its measured cost, for example
# LLM usage: 48 extraction calls (claude-sonnet-5-5), ... ≈ $2.56 at list price.
# The trip-versus-move benchmark: estimate, then a run capped per store
particles benchmark trip-vs-move --model claude-sonnet-5-5 --estimate
particles benchmark trip-vs-move --model claude-sonnet-5-5 --max-usd 0.50
The run of record for each nightly figure is the store's CONSOLIDATION_RUN
event, which carries the same token counts; particles events list reads it
back.