glossary//boot-time-injection
boot-time injection
Boot-time injection assembles a fixed memory section into every prompt before the model sees the user's message.
The technique is about timing and delivery, not storage. A memory layer holds the data. Boot-time injection decides to hand the model a slice of it up front instead of exposing a retrieval tool and waiting for a call that may never come. Swap the storage and injection still works the same way. Swap the timing and everything downstream changes.
It is also not context stuffing, though both put material into the window before the model reads it. Injection has a fixed shape and a known cost per turn. Stuffing takes whatever the history holds and grows with it.
Why push instead of pull
Memory is easy, retrieval is hard documents the failure the technique was built to fix. Rheo had retrieval tools, chat_recent and chat_search, plus a memory API, and still answered a real follow-up with "I don't have context for what you shared." The root cause is stated plainly: the model does not notice what is missing. A prompt with no recent history looks almost identical to a brand-new conversation, so the model treats it like one. There is no error to catch, because from the model's side nothing went wrong.
The fix stopped relying on the model to retrieve. Every request now constructs the prompt from four sources before Claude sees the user message, in labelled sections: open M.O.T. tickets, episodic memory, current memory, current session, then the user's message last.
What it costs
The stated overhead is a few hundred milliseconds and roughly 1,000 to 2,000 tokens per turn, depending on session length. That is per turn, every turn, which makes it a standing budget line rather than a one-off setup cost.
One call, the real prerequisite picks up that bill. Injection worked and continuity stopped breaking, but it cost four tool calls at the start of every session, one each for topic threads, entity records, procedural notes and recent memory. The four-call boot ceremony collapsed into a single memory_context call that fires the reads with Promise.all. The technique did not change. The cost of running it did. And that is usually where the second round of work on injection goes.