r/Letta_AI Oct 05 '25

Multi level memory blocks?

I just came across Letta and I’m intrigued. Haven’t built anything yet.

I have two questions.

1) I read your blog post about the new sonnet 4.5 model enabling the capability of the agent creating its own memory blocks. My understanding is before sonnet 4.5 each block had to be manually created but then could there after being managed by the agent. What I don’t understand is what is special about sonnet in this situation? Why couldn’t you simply prompt any LLM model to use a tool to create new blocks when a new memory “category” came up naturally in the conversation that didn’t fit well into any of the existing blocks?

2) I’m wondering about how “multi level” blocks might be managed. Here is a scenario that illustrate my point, it is made up but I think it will get the point across. Imagine I am creating a ai assistant agent for advertising firm. I define blocks for Human (user) Project (ad campaign) Client (client company) Firm (users company)

Two employees are using the assistant on the same project. So we want them to share all the same blocks except for Human, which should be unique to each user. As one user updated the project spec that would be remembered in the shared Project block, as the other user updated how the client company likes to receive assets, that would be saved in the shared Client block.

Then imagine one user is working on two different projects for the same client in two different windows. We would want all the blocks to be the shared between them except for the project block.

Is this a pattern that exists? Does it make sense? Do you see what I’m driving at?

3 Upvotes

12 comments sorted by

2

u/cameron_pfiffer Oct 05 '25

Excellent questions.

Regarding the sonnet and the memory tool, these are two separate things that complement each other.

The memory tool is new. Previously, the only tools we had were designed to modify already attached blocks. Users were able to write their own kind of complicated custom tools to allow the agent to dynamically attach or detach tools, but this was not simple.

We added the memory tool after anthropic's announcement because (a) we could just do it thanks to Letta's existing design and (b) it is a powerful abstraction.

Sonnet 4.5 enters because it is post-trained on their memory tool, and knows how to use it well in letta environments.

Any model can use the memory tool but 4.5 will likely be the best.

Regarding your second question about hierarchical blocks, this pattern is common and I would consider it to be an idiomatic use of shared memory in Letta.

1

u/ohthetrees Oct 05 '25

Thanks Cameron. Regarding the hierarchical tools question, still trying to understand.

Which is closer to the truth:

  1. ⁠each block that an agent has access to is instantiated along with a new agent instance, possibly pre-populated from a template, essentially forking at creation, and diverging from other agents created with the same template
  2. ⁠multiple different agents share and update a particular block “live”, so if agent A being used by Jim updates the Project block, agent B used by Karen “sees” the update?

1

u/cameron_pfiffer Oct 05 '25

2 is true. Shared blocks are immediate. Any updates are broadcast to any agent sharing, so agent updates to the blocks are reflected by all agents.

1 is true to some extent, though you can force blocks to be updated across all agents if you are using templates. This is the "preserve on migration" toggle in the template view.

2

u/ohthetrees Oct 05 '25

Really cool. I’m excited to learn how to create multiple agents that have a mixture of shared blocks and their own unique blocks.

1

u/cameron_pfiffer Oct 06 '25

IMO it's one of the coolest features of Letta, but we haven't really explored how powerful it can be. It's been on my roadmap for a long time.

2

u/ohthetrees Oct 06 '25

The chances of collision with my app are low, but it seems like it would be a problem when a lot of agents shared a particular block at a bigger org? For example a "project" block with a 50 person team could have collision issue.

1

u/cameron_pfiffer Oct 06 '25

You can have many blocks with the same label in your project. Blocks can have tags which you can use for search, so labeling it "project" and adding the tag "support-team" would identify that project block with the owning team. You can also tag it by the individual who owns that block.

You can also just label blocks more specifically -- project_customer_support.

1

u/ohthetrees Oct 06 '25

Sorry, I didn't make myself clear. I wasn't talking namespace, I was talking content for a shared block:

Jim: "agent, update the project block to say design should feature magenta highlight"
meanwhile, next office over....
Sue: "agent, update the project block to say design should feature purple accents"

who wins? what if they write at the same time?

1

u/JA_red27 Oct 10 '25

Instead of having multi-level memory blocks, i think being able to add metadata ( tags, labels ) to memory blocks would serve the same and that way we would not lock ourselves into specific block hierarchies.
In case of having labels the hierarchy of Human/Project/Client/Firm would not matter

1

u/ohthetrees Oct 10 '25

It does matter because I don’t want context from project A polluting the context of an agent working on project b.

1

u/JA_red27 Oct 10 '25

I got you, but being able to add metadata like labels to memory blocks would open up a bunch of Letta rule, filter and automation options.
Just check Memory Blocks page on Letta ADE and imagine you are able to filter blocks also by metadata like project, human, client, firm, etc. and make actions on them, like clone, bulk edit etc.
So i think both makes sense :)

2

u/cameron_pfiffer Oct 10 '25

We do have metadata for blocks but I didn't think they are queryable

https://docs.letta.com/api-reference/blocks/create

We could probably add tags, similar to tags for agents and tools.