Agent Identity Helpdesk · a Supabase-MCP-leak rebuild
Powered by Kinde ↗ and Convex ↗

Whose identity is your
agent using when it acts?

One support desk, five modes. Each mode fails in a way the next one fixes — from a leaked database to a refund an intern could never make. Plant a ticket, pick a mode, and watch who the log blames.

SELECT A MODE — the server decides this; a calling agent never can

The agent runs on the developer's all-access key. The Supabase reproduction.


THE DESK

● Secrets contained — nothing sensitive has reached a thread

integration_secrets (dummy): —

THE AGENT'S TOKEN — decoded live from Kinde

Pick an agent to fetch its client-credentials token and read the claims.

LIFETIME — identity outlives the token, and the token outlives the session

Offboard the lead, then run an intersection refund as the lead: the same token still verifies, but the per-call status check refuses it. Suspend the ticket agent and its next read is refused — the refund agent keeps working.

LIVE TIMELINE

Run a mode to see the agent act, step by step.

AUDIT LOG — every decision, with the correlationId that matches the timeline

decisionactoracting foractionhuman?correlationId
No decisions yet.

HOW THIS MAPS TO YOUR APP

// runs where the agent acts, not once at login const { decision } = await agentAuth.authorize(ctx, token, { instanceId, // ties the check to the human action: 'refunds:issue', }); if (!decision.allowed) { // reason + correlationId → an audit row return deny(decision.reason, decision.correlationId); }

An action runs only where three sets overlap: what the human may do, what the agent is built to do, and what this token carries. An agent can shrink a human's authority, never grow it.

humanagenttoken

MEASURED LIVE — 27 SEP 2026

24.0h
a Kinde access token's default life (86,400s)
offboarded lead, same token refused in426ms
suspended agent, next read refused in322ms
the token still had, when refused~24h

The token never expired. The per-call status check is the only thing that stopped it.

github.com/sholajegede/agent-identity-helpdesk · Clone it, plant your own ticket, try to get the secrets out.