Security
What an agent actually holds, where your systems' credentials live, and how to check a Tier Two signature without calling us.
What an agent holds
- An OAuth token for Tier Two, issued to one member of your workspace and one client. Not a credential for any of your systems.
- Nothing else. There is no key to paste, so there is no key to leak in a screen share, a config file, or a chat log.
- Revoking the agent stops the token; the change reaches the endpoint within a minute.
Where your systems' credentials live
In an encrypted vault on the server, AEAD-encrypted at rest, with one write path and one decrypt path. A shared workspace key is decrypted only for the call that needs it and used in process to forward it. It never reaches a device. Per-person tokens are brokered and revocable.
The decision path
- A tool with no mode is not offered and not allowed. Unknown means no.
- A tool set to Block is hidden from the agent's tool list; calling it anyway is a refusal with a ledger row.
- An Ask is held server-side until a person decides. Nothing is forwarded on a timeout.
- A refusal names its reason, and both the attempt and the reason are in the ledger.
Verify a Tier Two authorization offline
Where Tier Two issues a signed authorization for a downstream system to check itself, it is an Ed25519-signed JWT (EdDSA) with iss=https://trytiertwo.com. Verify it against the published key set with any JOSE library: no API key, no callback to us, and no network call on your hot path once the keys are cached.
import { createRemoteJWKSet, jwtVerify } from "jose";
const jwks = createRemoteJWKSet(
new URL("https://trytiertwo.com/.well-known/jwks.json"),
);
// Fails closed: expired token, unknown key, wrong issuer all throw.
const { payload } = await jwtVerify(token, jwks, {
issuer: "https://trytiertwo.com",
});Standard JOSE. Rotation is handled by the key set.
The keys are public: /.well-known/jwks.json.
What we have not built
Listed, and kept current, on the security page. Found a problem? jordan@trytiertwo.com.