v0.3-intent · site-side

Build your site's intent policy.

Click to decide what each canonical intent means at your site. We generate a v0.3-conformant JSON document; you drop it at https://<your-site>/.well-known/agentpki-intent-policy.json. From that moment, any v0.3 verifier (including ours) checks every agent passport against your policy.

Need the spec? See /spec/v0.3-intent §4. Want to learn how the verifier consumes this? See §5.

How the protocol fires, step by step

Bot mints a passport with an intent claim → request reaches your site → verifier matches intent against your policy → decision + audit-log entry. Click Play.

🛒
Scenario: Claude (Anthropic-issued bot) is helping someone buy concert tickets on marketplace.example. The marketplace also gets thousands of scalper bots trying the same thing. AgentPKI Intent is how the honest shopping bot gets through and the scalpers don't.
🤖 Claude (the bot) Anthropic-issued passport declared intent: purchase 🛒 marketplace.example policy: accept "purchase" policy: deny "scrape-bulk" 🔐 verify.agentpki.dev fetch policy + match ~50ms p50, global edge 📄 /.well-known/intent-policy accept / deny / throttle rules 📒 /intent-log (public) hash-chained ledger passport + intent verify_check(site) fetch policy append entry verdict: allow 200 OK · ticket reserved
Step 0 of 7
Ready to start.
Click Play to watch the trust flow run end to end, or Step to advance manually.

Why this matters

Today — heuristic bot defense only

  • Bot defender sees an unknown automated client; blocks it as "probably a scalper"
  • Real fan's shopping assistant gets blocked too; they refresh and lose to scalpers
  • Scalpers with rotating IPs eventually break through anyway
  • No way to prove who acted maliciously after the fact

With AgentPKI Intent

  • Honest bots present a passport with declared intent purchase
  • Verifier checks the site's policy in 50ms — accept or deny
  • Scalper bots declaring scrape-bulk or refusing to identify get denied cryptographically
  • Public audit log records every declaration for forensic review

Site basics

Intent decisions

Cycle through  untouched  → allow  → throttle  → deny  → untouched  by clicking.

Add a custom extension intent (x-*) →

Test it live

Try an agent declaring this intent. We apply the §4.5 match rules locally.

? Type an intent above to see how your policy treats it.

Generated agentpki-intent-policy.json

(start clicking intents on the left)

Host this at https://<your-site>/.well-known/agentpki-intent-policy.json with Content-Type: application/json. Cache-Control recommended: public, max-age=300, stale-while-revalidate=3600.

How to host this

Cloudflare Pages

Drop the file in public/.well-known/agentpki-intent-policy.json and add an entry to _headers:

/.well-known/agentpki-intent-policy.json
  Content-Type: application/json

Nginx

location = /.well-known/agentpki-intent-policy.json {
  alias /etc/site/intent-policy.json;
  add_header Content-Type application/json;
}

Anywhere static

Vercel, Netlify, S3 + CloudFront, GitHub Pages, plain Nginx — anything that serves a static JSON file at a well-known URL works. Just verify Content-Type.

Verify it landed correctly

After publishing, test the live verifier picks it up:

# Mint a token declaring purchase intent, verify against your site
TOKEN=$(curl -s 'https://demo.agentpki.dev/mint?intent=purchase' | jq -r .token)
curl -s -X POST 'https://verify.agentpki.dev/v1/verify' \
  -H 'content-type: application/json' \
  -d "{\"token\":\"$TOKEN\",\"intent_check\":{\"site\":\"<your-site>\"}}" | jq .intent_match