A system prompt does two jobs at once: it steers the model, and it anchors a cacheable prefix. The steering job is well covered. Prompts set an agent's role, scope, tone and constraints before any user turn arrives, and well-built ones keep multi-step agent behavior consistent Maxim's overview of system prompts. Yale's guidance for its custom agents makes the same point from the operator side: a system prompt defines behavior, scope, tone and responsibilities across a conversation Yale's system prompt guidance.
The anchoring job is where dynamic data gets teams into trouble. When an LLM processes a prompt, it computes key-value tensors for each token, and prompt caching reuses those tensors whenever a later request begins with exactly the same prefix OpenAI's prompt caching guide. Manus, in its write-up of agent context design, puts the consequence bluntly: because generation is autoregressive, a single-token difference invalidates the cache from that token onward Manus on context engineering.
That gives you the decision rule for the whole article. The bytes at the top of your prompt should change as rarely as possible, and everything a user, a retrieval system or a session clock produces belongs at the bottom. The mental shift is from "write a good prompt" to "curate the context that reaches the model on each call" Anthropic on context engineering. Practically, that is a layout problem before it is a wording problem.
Two failure modes follow from getting the layout wrong. Include a second-precision timestamp at the top and every request looks new to the cache. Put the user's name and account tier above your rules, and every user receives a cold prefix even though 90 percent of the text is identical across the entire customer base. Neither mistake shows up in a demo. Both show up on the bill.



