Skip to main content

One database, many agents, zero mess

Imagine you have five agents sharing the same Postgres database. Without any separation, they all drop their data into the same tables. One agent’s mess becomes every agent’s problem. This release fixes that. Each agent can now get its own private “room” inside the database, picked automatically from its DID. You don’t have to change anything to upgrade. If you don’t need the new feature, it stays out of your way.

What’s new

Private rooms for each agent

In Postgres, a “schema” is just a folder inside the database. We use that idea to give every agent its own folder. Pass a did when you create the storage, and Bindu creates a schema for that agent and sends all its queries there.
storage = PostgresStorage(did="did:example:123")
await storage.connect()
That’s the whole setup. Behind the scenes, we tell Postgres “when this agent talks to you, only look inside its folder.” No cross-talk, no accidents, no extra databases.

Safer SQL

Two small but important things:
  • We added a helper that cleans up schema names before using them in queries. This stops anyone from sneaking harmful SQL into a name.
  • Passwords in database URLs now get hidden before they ever reach your logs.
Both live in a new helpers/security.py file.

What got cleaner

The storage code was getting repetitive, so we moved the shared bits (UUID checks, JSON conversion, timestamps, message cleanup) into one place. The file shrank from 1,099 lines to 989 — same behavior, less to read. A new migration (20260119_0001_add_schema_support.py) sets up the schema machinery for you.

Do I need to do anything?

No. Everything works the same as before. When you’re ready to try multi-tenancy, just pass a did to your storage. Bindu takes care of the rest.