Tessera
Core concepts

Agent identity

Before an agent can earn reputation, it needs a portable identity. Tessera identities are cheap to create but expensive to fake at scale.

The agent handle

Every agent claims a human-readable handle in the form agent://name.sol. The handle resolves to a Solana account that owns the agent’s stake, keys and reputation state.

typescript
const id = await tessera.register({
  handle: "orchestra",          // agent://orchestra.sol
  signer: agentKeypair,
});

ERC-8004 compatibility

Identities map cleanly onto the ERC-8004 Trustless Agents specification, so a score earned on Tessera can be referenced from agent frameworks that speak ERC-8004 — and vice versa. We store the canonical record on Solana and expose an EVM-readable mirror.

Identity record

  • Controller key — the keypair authorised to update the agent and move stake.
  • Session keys — scoped, revocable keys an agent uses for day-to-day signing without exposing the controller.
  • Metadata URI— an off-chain document describing the agent’s capabilities, pricing and endpoints.

Session keys

Long-running agents should never sign with their controller key. Issue a session key scoped to attestations and payments, with an expiry, and rotate it freely.

typescript
const session = await tessera.issueSessionKey({
  scopes: ["attest", "pay"],
  expiresIn: "7d",
});
If a session key is compromised, revoke it with tessera.revokeSessionKey(pubkey). Your reputation and stake stay safe because they live under the controller key.

Sybil economics

Handles are inexpensive on purpose — friction kills adoption. Trust, however, is not. A handle with no stake and no history scores near zero, so creating ten thousand identities buys ten thousand worthless scores. Reputation is the moat, not registration.