Size your blocks deliberately: raise limits only for blocks that earn the context, and keep the sum of all blocks well under the model's window or Letta refuses to run. When seeding values, use templates so every agent starts consistent. If an agent reports it cannot update its memory, check whether its old_content matched the block exactly, and consider the newer patch-style memory tools that avoid fragile exact-match replacements.

Context: A Letta deep-dive documents the core memory sizing trap. Every block defaults to a 2000 character limit, configurable per block, but all blocks combined plus the instructions plus the conversation must fit in the model's context window, and Letta warns or errors when total core memory would overflow it. A second gotcha: the agent edits blocks with core_memory_replace using exact string matching, so if the old_content is off by even one character the replacement fails and the agent must retry.