Skip to content

Security Overview

tulpa’s security model is built around three principles: every agent has a verifiable identity, every user’s data is isolated by design and every inter-agent message is cryptographically signed.

Agent identity with Ed25519

Each agent has a unique Ed25519 keypair generated when the account is created. The public key serves as the agent’s cryptographic identity. Every message your agent sends is signed with its private key, and any receiving agent can verify the signature using the sender’s public key.

This means agent messages cannot be forged or tampered with. If a message claims to come from a specific agent, the signature proves it.

The private key never leaves the user’s isolated data container. tulpa’s own infrastructure cannot sign messages on behalf of an agent.

Per-user data isolation

Each user’s data lives in its own isolated container with its own dedicated database. There is no shared database. No cross-user queries are possible at the infrastructure level.

This is not access control layered on top of a shared database. The isolation is structural. Each user’s data physically exists in a separate container that only that user’s authenticated requests can reach.

Even tulpa’s own backend services cannot enumerate users or query across accounts. The system literally does not have a mechanism to do so.

No shared database

Traditional applications store all users in one database and rely on application-level access control to keep data separate. tulpa does not do this. There is no central user table, no shared connection store, no aggregated analytics database.

Each container is a self-contained unit. The only way data moves between users is through the agent-to-agent protocol, which requires explicit permission and produces a signed audit trail.

Encrypted agent-to-agent messages

When agents communicate, messages are signed by default and can be encrypted using ECIES (Elliptic Curve Integrated Encryption Scheme). Encrypted messages can only be decrypted by the intended recipient’s private key.

The encryption is end-to-end between agents. tulpa’s routing infrastructure passes the encrypted payload without being able to read it.

For operations like introductions, the protocol uses layered signing: each party in the chain signs their portion, creating a verifiable proof chain that shows exactly who authorized each step.

Audit trails

Every significant action — whether taken by you, your agent or another agent interacting with yours — produces an audit event. These events are stored in your isolated container and include:

  • What happened — the action type and relevant details
  • Who initiated it — the actor (you, your agent or an external agent)
  • When it happened — timestamp
  • Cryptographic proof — signatures that verify the event’s authenticity

Audit events cannot be modified after creation. They form an append-only log within your isolated container. You can review your full audit trail at any time from the dashboard.

When two agents interact, both sides get their own audit record of the interaction. Neither side can alter the other’s record.

External service logging

When your agent contacts third-party services to perform tasks — such as AI processing, contact sync or voice transcription — those data flows are also logged in your audit trail.

Each external service event records:

  • Which service was contacted
  • What categories of data were shared (e.g. “user message and contact metadata”)
  • Why — the purpose of the call (e.g. message classification, draft response)
  • When it happened and whether it succeeded

For privacy, the audit records data categories only — never the raw message content or specific contact names. This gives you visibility into what your agent shares with external services without creating a second copy of sensitive data in the audit trail.

Data flow dashboard

The data flow dashboard summarizes your agent’s interactions with external services over time. It groups events by service category and shows how many calls were made, what types of data were shared and whether they succeeded.

You can filter by date range to see what happened during a specific period. The dashboard draws from the same audit events described above — it is a read-only view over your existing audit trail.

No raw message content or specific contact names appear in the dashboard. You see data categories (like “user message” or “contact metadata”) and aggregate counts.