Chancela
Live on Monad Testnet - ERC-8004 native

Give AI agents an identity.
And a limit.

ERC-8004 tells you who an agent is. Chancela decides what it is allowed to do, and proves why on-chain. Identity, permissions, policies and verifiable accountability for autonomous agents.

Watch the 2-minute demoSign inNo login, no wallet — two minutes, against the real system.
3
Agents registered
114
Decisions recorded
68
Actions refused
100
Anchored on-chain
prompt injection, attempted
The model read the injection. The policy engine never did.
01
AI Agent
proposes
02
Intent
structured + validated
03
Policy
deterministic
04
Allow / Deny
with a reason
05
Monad proof
immutable
The LLM interprets. The policy engine authorizes. Monad remembers.

The model never decides

An LLM proposes an action. A deterministic policy engine authorizes it. Swap the model and the decision is unchanged.

Deny by default

An action not explicitly granted is refused. Unknown actions are refused. A crash is refused. There is no permissive fallback.

Denials are proof too

Every decision is anchored on Monad, including the blocked ones. A registry that only proves the allows proves nothing.

A human decides, and the chain checks

Some actions need their owner. They approve with a passkey over the exact decision, and Monad verifies that signature itself, with its native P-256 precompile.

Verify, do not trust

The SDK and the MCP server check every permission against the attestor the owner registered on-chain. This service can refuse to answer. It cannot forge a yes.

One passkey, many keys

An owner holds one passkey. It derives a separate key for every agent — no seed phrase, nothing stored — and each key is registered on-chain.

Put it in front of your agent

No account and no API key. Pick the one that matches how your agent is built.

Any language — one HTTP call
curl -X POST \
  https://chancela.xyz/api/agents/TA-001/authorize \
  -H 'content-type: application/json' \
  -d '{"action":"CREATE_CUSTOMER",
       "parameters":{"name":"Maria"}}'
TypeScript — runs your code only if it verifies
npm install chancela-sdk viem

await chancela.guard(agentId, action,
  params, () => wallet.send(...))
Claude, Cursor, any MCP client — no code
{ "mcpServers": { "chancela": {
    "command": "npx",
    "args": ["-y", "chancela-mcp"] } } }

See it refuse something

Ask the agent to move money. Watch the policy engine say no, on-chain.

Run the demo