# KARTA — spend control for AI agents KARTA gives an agent one signed envelope per task: budget, allowed payees, no subscriptions, expiry. The decision is made outside the model, so a prompt-injected agent cannot sign around it. Every allowed spend returns an Ed25519 receipt that verifies offline. ## Endpoints (base https://karta.rta.lat) - POST /api/v1/envelopes {"budget_total":"2.50","per_call_max":"0.05","calls_max":2000,"allowlist":["api.example.com"],"ttl_hours":2} - POST /api/v1/envelopes/{id}/spend {"amount":"0.05","payee":"api.example.com"} - GET /api/v1/envelopes/{id} state: spent, remaining, calls_used - POST /api/v1/envelopes/{id}/kill {"reason":"runaway loop"} - GET /api/v1/evidence/{id} evidence bundle, offline-verifiable - GET /api/v1/evidence event bundle with hash chain - POST /api/v1/kill {"active":true|false} operator stop for all verdicts - POST /mcp MCP streamable HTTP (tools: check_spend, open_envelope) ## Rules (deterministic, rule ids are stable) E01 envelope_expired · E02 subscription_not_permitted · E03 payee_not_allowed · E04 per_call_exceeded · E05 calls_exhausted · E06 budget_exceeded · E07 above_approval_threshold · E08 envelope_killed (reserved) ## Honest state Pre-revenue. No paying customers. The invariant is proven by tests: 100 parallel spend requests against a 50 x $0.05 budget produce exactly 50 approvals. Mainnet payment execution is disabled. Pages: https://karta.rta.lat/attacks (three reproducible attacks), https://karta.rta.lat/pilot (30 days free) Source: https://github.com/mrpkk/onchain-ai-agent (branch feature/v2-modernization) Contact: hello@rta.lat