Skip to content

Encryption

Rooms are end-to-end encrypted by default, through the Matrix Rust SDK and vodozemac. A plaintext-only Matrix client was never on the table.

There is one exception, and it is deliberate.

A room you create with an agent among the invitees is created unencrypted. An agent here is an account whose ID begins @agent_. Some agents read their rooms through AgentPod’s bridge, which can decrypt; others run their own Matrix client with encryption switched off, and a room encrypted around one of those is a room it can never read. The client cannot tell the two apart, and Matrix has no way to turn encryption off once it is on, so it leaves those rooms in the clear rather than risk one that silently locks an agent out.

The rule applies when the room is created. Inviting an agent into a room that is already encrypted does not change the room.

Rooms an agent opens with you — a direct message from an agent, for instance — are created by AgentPod, not by this client, so whether they are encrypted is AgentPod’s decision. The “Encryption enabled” line described below is how you can tell for any room.

An event the client cannot decrypt renders as a placeholder saying so, not as a blank.

The common reason is ordinary: a fresh device has no keys for messages sent before it existed. That is how Matrix works, not a fault. Verifying the device brings history within reach.

A placeholder is also what you see if keys were never shared with your device — so it is a real signal, and worth noticing when it appears on a message you expected to read.

Turning encryption on in a room is one of the three state changes the timeline will interrupt you for — alongside the room being created and the room being replaced. Everything else about room state happens silently.

It is shown because it is a genuine security transition. A change in whether your words are readable by the server is not housekeeping.

Live agent output. While a turn is being written, partial text streams over to-device messages.

Be clear-eyed about the trade: this is the mechanism that makes live output temporary and keeps it out of room history, which is what you want for half-written text. The finished turn lands in the room as a real message and gets the room’s encryption.

If a room’s contents are sensitive enough that in-flight partial text matters, that is worth knowing before you put an agent in it.

Device verification is part of the Matrix flow. It is how a new device earns access to history it was not present for.