Your AI coding memory should not share a budget with your coding
claude-mem paused for a provider quota cooldown this afternoon. Not a bug, a design choice: when memory is an inference call, memory stops when inference does. Here is the alternative.
If Claude Code just told you that claude-mem is paused for a quota cooldown, nothing is broken. It means your memory plugin summarises your work with Claude, and your Claude allowance for this five-hour window is spent. Memory stops until the window resets. Your coding continues, unrecorded.
I hit this at 13:26 today while shipping billing fixes for Keptrace. The message is well written and the behaviour is correct: backing off is the right call when a provider says no. But it exposes a design choice worth naming. When memory is an inference call, memory shares a budget with the work it is supposed to remember.
Heads up: claude-mem is paused while a provider quota cooldown is active.
The memory observer is waiting out a quota cooldown on claude (five_hour)
until 2026-09-15T12:05:20.660Z (26 minutes from now).
Latest signal: Provider reported the inference allowance exhausted
This is not a failure. Incoming observations stay queued and will be
written when the cooldown clears.
Restarting will NOT help here.What a provider quota cooldown is
Claude subscriptions meter usage in rolling five-hour windows. When the allowance for that window is exhausted, every request from that login is refused until the window rolls over. Claude Code shows this as the familiar usage limit notice. Any tool that reuses the same login inherits the same limit, and a memory observer that calls Claude after every tool use is one of those tools.
Why the memory pauses with it
claude-mem works as an observer. Hooks watch each tool call, then a worker asks Claude to turn what happened into an observation: a summary with a type, a title and concept tags. That is a real inference call per observation. It is what makes the timeline readable, and it is also why the plugin has nothing to write once the allowance is gone. Observations queue in memory until the cooldown clears, then get summarised in a burst.
Two consequences follow. The first is the pause itself: the hours where you are most active, and most likely to exhaust your allowance, are the hours your memory is most likely to stop. The second is quieter: every observation spends a slice of the same allowance you wanted for the actual coding.
Store first, summarise later
Keptrace makes the opposite choice. The record is written before any model looks at it. The Claude Code hooks post each turn to the API as plain text with the session, repo and refs it touched. That is a write, not an inference. It costs nothing from your allowance and does not stop when your allowance does.
Search works the same way. Embeddings are computed on your machine with a small local model, and the server combines vector, text and ref matching in Postgres. No model is called at query time.
There is one place Keptrace does call a model: the rollup. One small Haiku call when a session ends, and one per repo per week, to write a digest. That call goes through your Claude Code login by default, so it shares your allowance too. The difference is scale and blast radius: one call per session instead of one per tool use, and when it fails the record is untouched. Turn it off with KEPTRACE_ROLLUP=false, or route it through an API key with KEPTRACE_ROLLUP_TRANSPORT=api so it never touches your subscription.
What spends your allowance
| Step | claude-mem | Keptrace |
|---|---|---|
| Capture what happened | Inference per observation, via your Claude login | Plain write to the API, no model |
| Make it searchable | Depends on the summarised observation existing | Local embedding on your machine, no model call |
| Search | Local database query | Postgres vector, text and ref search, no model |
| Summarise | Same call as capture | One Haiku call per session and per repo-week, optional |
| Allowance exhausted | Memory pauses, observations queue | Record and search continue, digest waits |
Based on the pause notice claude-mem prints and its documented observer design, and on the Keptrace source as of September 2026. If either changes, this table should too.
What to do if you are paused right now
- Leave the worker alone. The notice is right: restarting clears the backoff and makes the provider refuse harder.
- Keep working. Queued observations are summarised when the window rolls over, if the worker is still up.
- If losing the gap matters, run something that records without inference beside it. Keptrace installs in two commands and keeps writing while the allowance is empty.
npx keptrace login
npx keptrace hooks install claude-codeBoth tools can run at the same time. They hook different events and keep separate data. See the docs for what each hook does.
Questions people ask
- What does 'claude-mem is paused while a provider quota cooldown is active' mean?
- Your Claude subscription's five-hour usage allowance is exhausted, and claude-mem needs Claude to summarise each observation. It stops writing memory until the window resets. Queued observations are processed afterwards if the worker stays running.
- Should I restart the claude-mem worker?
- No. The pause is a deliberate backoff. Restarting clears it and makes the worker retry against a provider that is still refusing requests.
- Does Keptrace use my Claude quota?
- Capture, embedding and search do not. The optional rollup makes one small Haiku call per ended session and per repo-week through your Claude Code login. You can disable it or point it at an API key.
- Can I run claude-mem and Keptrace together?
- Yes. They hook different Claude Code events and keep separate data. Keptrace keeps recording during a claude-mem cooldown.