Disposable identities for AI agents — email, phone, and virtual cards.
tn8r gives your AI agents their own email addresses, phone numbers, and virtual payment cards so they can operate in the real world without using your personal identity. When the agent's work is done, kill everything with one command.
Agent: "I need to sign up for a service"
You: tn8r create
→ Email: alex-k8f2xq@mock.terminator.test
→ Phone: +14155551234
→ Card: ****4242
→ Identity: 01JMXYZ...
Agent uses these to sign up, receive verification codes, make purchases.
You: tn8r kill 01JMXYZ...
→ Email revoked, phone released, card deactivated. Done.
curl -fsSL https://raw.githubusercontent.com/tn8r/tn8r/main/install.sh | bashOr with Homebrew:
brew install tn8r/tn8r/tn8rOr with your package manager:
npm install -g tn8r # npm
pnpm add -g tn8r # pnpm
yarn global add tn8r # yarn
bun install -g tn8r # bunAs a project dependency:
npm install tn8r # or @tn8r/core for just the libraryAdd to Claude Code:
claude mcp add tn8r -- npx @tn8r/mcp-server| Package | Description |
|---|---|
tn8r |
Umbrella — CLI + library in one install |
@tn8r/core |
Core library with provider adapters |
@tn8r/cli |
Standalone CLI |
@tn8r/mcp-server |
MCP server for AI agents |
# Create an identity with email + phone + card
tn8r create
# Create with only email
tn8r create --no-phone --no-card
# List all identities
tn8r list
# Read messages (email + SMS)
tn8r messages <identity-id>
# Kill an identity (revoke everything)
tn8r kill <identity-id>
# Emergency: kill ALL identities
tn8r kill --all
# View activity log
tn8r log
# Check provider status
tn8r statusThe MCP server exposes 10 tools that agents can use directly:
| Tool | Description |
|---|---|
create_identity |
Create a disposable identity with email, phone, and/or card |
get_identity |
Get details of a specific identity |
list_identities |
List all identities by status |
read_messages |
Read emails and SMS for an identity |
extract_code |
Parse verification codes from messages |
get_card_details |
Get card PAN/CVV/expiry (never stored locally) |
kill_identity |
Revoke all resources for one identity |
kill_all |
Emergency kill switch for all identities |
get_activity_log |
Query the audit trail |
check_status |
Provider health check |
import { Terminator } from "tn8r";
// or: import { Terminator } from "@tn8r/core";
const t = new Terminator();
// Create an identity
const identity = await t.createIdentity({
resources: ["email", "phone", "card"],
ttlMinutes: 60,
spendLimitCents: 5000,
});
console.log(identity.email); // agent-k8f2xq@your-domain.com
console.log(identity.phone); // +14155551234
// Read messages
const { emails, sms } = await t.readMessages(identity.id);
// Extract verification code
const code = await t.extractCode(identity.id);
// Get card details (fetched live, never stored)
const card = await t.getCardDetails(identity.id);
// Kill it
await t.killIdentity(identity.id);tn8r uses your own provider accounts. Copy .env.example to .env and add your keys:
# Email (Cloudflare Email Workers)
TERMINATOR_CF_API_TOKEN=
TERMINATOR_CF_ACCOUNT_ID=
TERMINATOR_EMAIL_DOMAIN=
# Phone (Twilio)
TERMINATOR_TWILIO_ACCOUNT_SID=
TERMINATOR_TWILIO_AUTH_TOKEN=
# Cards (Lithic)
TERMINATOR_LITHIC_API_KEY=
TERMINATOR_LITHIC_ENVIRONMENT=sandboxNo keys configured? tn8r runs with mock providers by default — perfect for development and testing.
Local (your machine) Cloud (your accounts)
───────────────────── ─────────────────────
MCP Server / CLI Cloudflare Email Workers
│ Twilio
tn8r Core Lithic
│
Provider Adapters ──────────────── BYOK APIs
│
SQLite (activity log)
- Provider adapter pattern — swap providers without changing your code
- Activity log — every action recorded locally in SQLite
- Kill switch — revoke all resources across all providers in one call
- Policy engine — spend limits, TTL, max identities
pnpm install
pnpm build
pnpm testMIT