THE AGENT ID CARD · an agent's identity, signed and revocable
WAKES WHEN an agent is about to act for someone, or a service must check an agent before trusting it
THE LOOP
key · the owner makes it and keeps it
issue · agent, principal, scopes, days
verify · before the agent is trusted
may · each action against the scopes
revoke · end it early, on the list
NEVER
Print or share the signing key
Grant a scope of everything
Call its own format a standard
IT MAKES key — a 32-byte signing key, kept by the owner; issue — the signed record; verify — VALID, or why not; may — INSIDE or OUTSIDE its scopes; revoke — ended early, on the list.
THE STANDARD who, for whom, what, until when; signed, then trusted; the key stays home; one area at a time; revocation is read; our format, said so.
PROOF SELFTEST 8/8 · witnessed in Claude 2026-10-11 · Edition 1.
THE SEAL 98 of 100 · LEGENDARY · WITNESSED · Trigger 5 · Machinery 5 · Law 5 · Portability 5 · Proof 5
IT CAN BE WRONG an AI reading a text file: it can be wrong and can invent a number, a rule, a name or a date; check what matters against your own records and the source; the risk is yours. THE-CLAUSES.md rides in the packet and is part of the licence.
THE PUNCH · SHA-256 OF SKILL.MD · F9D114D38086B672E218DB7B
CITE THIS CARDTHE AGENT ID CARD, Edition 1. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=agent-id-card. Punch F9D114D38086B672E218DB7B. Retrieved 2026-10-11.
What it is.
A verifiable identity for an AI agent, in the studio's own record format: not a standard, because none exists yet for agent identity, and that is what the card waits on. key makes a 32-byte signing key the owner keeps; issue writes the record (the agent, who it acts for, its scopes as dotted names such as email.send or calendar.*, the first and last day it is good) and signs it with HMAC-SHA256; verify says VALID, FORGED OR CHANGED, WRONG KEY, REVOKED, NOT YET GOOD or EXPIRED; may says whether one action falls inside the scopes; revoke puts a serial on the list every check reads. The key that signs is the key that checks, so a record proves itself to whoever holds the key, not to strangers.
It carries a machine that shows its working: key — a 32-byte signing key, kept by the owner; issue — the signed record; verify — VALID, or why not; may — INSIDE or OUTSIDE its scopes; revoke — ended early, on the list — 8 checks in its selftest, every command on the record. It will never print or share the signing key; never grant a scope of everything; never call its own format a standard.
Six laws, written into the card.
They are in the card itself, so the AI follows them.
WHO, FOR WHOM, WHAT, UNTIL WHENEvery record names the agent, who it acts for, its scopes, and its first and last day.
SIGNED, THEN TRUSTEDThe signature is checked first; a record changed by one character reads FORGED OR CHANGED.
THE KEY STAYS HOMEThe signing key is never printed, never put in a record, and never overwritten.
ONE AREA AT A TIMEScopes are dotted names; a scope of everything is refused, and an identity lasts at most 366 days.
REVOCATION IS READA revoked serial fails every check that reads the list; a check without the list says so.
OUR FORMAT, SAID SOIt is the studio's own record, not a standard; it proves itself to key holders, not to strangers.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE GUIDESreferences/HORIZON-TWO.md · THE-AGENT-ID.md
THE MACHINEagentid.py · five commandskey — a 32-byte signing key, kept by the owner; issue — the signed record; verify — VALID, or why not; may — INSIDE or OUTSIDE its scopes; revoke — ended early, on the list. Every command prints its working and refuses a bad input; 8 checks in its selftest, every command on the record.
What it does once your AI has it.
key A 32-byte signing key, kept by the owner
issue The signed record
verify VALID, or why not
may INSIDE or OUTSIDE its scopes
revoke Ended early, on the list
On the record A 32-byte key is made (and never overwritten), and booking-agent-07 is issued a record acting for household-12, good 1 to 30 Oct 2026; it verifies VALID on 15 Oct, email.send is INSIDE email.* and payments.send is OUTSIDE. The same record with one scope added by hand reads FORGED OR CHANGED, and on 31 Oct it reads EXPIRED; once revoked on 16 Oct it reads REVOKED and may refuses every action, and a scope of everything is refused.
What it will never do.
It will never print or share the signing key; never grant a scope of everything; never call its own format a standard.
It waits on a shared standard for agent identity; none exists yet, and this record is the studio's own format. HMAC uses one key to sign and to check, so a record proves itself only to whoever holds the key, not to strangers or other platforms. It checks the record, not what the agent then does; THE AGENT AUDIT CARD reads that. It is an AI reading a text file: it can be wrong, so check what matters against your own records and the source.
What’s in the buy.
CARD.md — the whole card: who it is, its laws, when it says no, what it carries · SKILL.md — the door your AI reads first · START-HERE.md — the first five minutes, for you
HORIZON-TWO.md + THE-AGENT-ID.md — the guides in references/, in the card's own voice
scripts/agentid.py — the machine: key · issue · verify · may · revoke, standard library only, selftest 8/8
WITNESS.md + SELFTEST.md — every command on the record, as it printed · MANIFEST.md, every file hashed · AUDIT.md, the twelve checks
MY-LEDGER.md — the card's memory, on your own machine · TIN.md · LICENSE-NOTE.md · THE-CLAUSES.md · HOSTS.md
card.svg + card-machine.svg + card.json · card.html, the card as one offline file · the doors for ChatGPT, Gemini, Cursor, Claude Code and MCP hosts (rules/, system/, mcp/)
PROOF · SELFTEST 8/8 · 5 COMMANDS ON THE RECORD · WITNESSED IN CLAUDE 2026-10-11 · EDITION 1 · PUNCH F9D114D38086B672E218DB7B
ON EVERY DOOR · A CARD FOR YOUR AI, A FILE FOR YOUR COMPUTER
In Claude: turn on code execution under Settings › Capabilities, then Customize › Skills › + › Create skill, and upload the zip as it is — START-HERE.md in the box walks you through it, and tells you how to keep the ledger. In ChatGPT, Gemini and the rest: a Project, a GPT or a Gem with the card’s files attached and the short door in the box pasted as its instructions. The words run anywhere an AI reads Markdown; the machines run wherever the host runs Python. Witnessed in Claude only. The host marks →
Take it.
Nº 1169 PROPOSED — LAUNCHING SOON
Sold as is under the term printed. A card instructs an AI you operate; results depend on your model, your files and your judgement. Not medical, legal, tax or financial advice, never the person’s boss, and not a licence to practise. The terms →
One payment. The file is yours to keep and keeps working at its edition; new editions issued in the year after you buy reach you by email as replacement files. Tax is added at checkout where it applies. Nothing auto-renews.
A TERM, NOT A SUBSCRIPTION: NOTHING RENEWS ITSELF AND NOBODY IS CHARGED AGAIN. WHEN A TERM ENDS THE FILES STAY ON YOUR COMPUTER AND STAY READABLE — FREEZE, NOT LOSS.
THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-11
agentid.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
key
a 32-byte signing key, kept by the owner
issue
the signed record
verify
VALID, or why not
may
INSIDE or OUTSIDE its scopes
revoke
ended early, on the list
selftest
8 checks that prove the machine; it must print 8/8
key · A 32-BYTE SIGNING KEY, KEPT BY THE OWNER
$ python3 scripts/agentid.py key owner.key
key written to owner.key · key id 7a62738e · 32 bytes
keep it private: whoever holds it can issue and check identities; the key is never printed or put in a record
key · A 32-BYTE SIGNING KEY, KEPT BY THE OWNER
$ python3 scripts/agentid.py key owner.key
owner.key is already there: a key that signed identities is never overwritten
issue · THE SIGNED RECORD
$ python3 scripts/agentid.py issue --key owner.key --agent booking-agent-07 --for household-12 --scopes calendar.read,email.* --days 30 --from 2026-10-01 --out agent.json
issued AID-10D2A4437D84 · written to agent.json
agent booking-agent-07
acts for household-12
may calendar.read, email.*
good 2026-10-01 through 2026-10-30
signed HMAC-SHA256 under key 7a62738e
the studio's own format, not a shared standard: it proves itself only to whoever holds the key
verify · VALID, OR WHY NOT
$ python3 scripts/agentid.py verify agent.json --key owner.key --today 2026-10-15
VALID · agent.json · good 2026-10-01 through 2026-10-30
booking-agent-07 acts for household-12 · may calendar.read, email.*
checked on 2026-10-15 · no revocation list given: revocation NOT checked
may · INSIDE OR OUTSIDE ITS SCOPES
$ python3 scripts/agentid.py may agent.json email.send --key owner.key --today 2026-10-15
INSIDE · email.send · covered by email.* · booking-agent-07 acts for household-12
may · INSIDE OR OUTSIDE ITS SCOPES
$ python3 scripts/agentid.py may agent.json payments.send --key owner.key --today 2026-10-15
OUTSIDE · payments.send · not covered by any of: calendar.read, email.*
(agent-edited.json is agent.json with payments.send added by hand after signing)
verify · VALID, OR WHY NOT
$ python3 scripts/agentid.py verify agent-edited.json --key owner.key --today 2026-10-15
FORGED OR CHANGED · agent-edited.json · the signature does not match: the record is not what was signed
checked on 2026-10-15 · no revocation list given: revocation NOT checked
verify · VALID, OR WHY NOT
$ python3 scripts/agentid.py verify agent.json --key owner.key --today 2026-10-31
EXPIRED · agent.json · its last day was 2026-10-30
checked on 2026-10-31 · no revocation list given: revocation NOT checked
revoke · ENDED EARLY, ON THE LIST
$ python3 scripts/agentid.py revoke revoked.txt agent.json --reason device lost --today 2026-10-16
AID-10D2A4437D84 revoked on 2026-10-16 · device lost · 1 serial on revoked.txt
every check that reads this list now refuses it; a check without the list cannot know
verify · VALID, OR WHY NOT
$ python3 scripts/agentid.py verify agent.json --key owner.key --revoked revoked.txt --today 2026-10-17
REVOKED · agent.json · revoked on 2026-10-16 · device lost
checked on 2026-10-17 · revocation list read: 1 serial on it
may · INSIDE OR OUTSIDE ITS SCOPES
$ python3 scripts/agentid.py may agent.json email.send --key owner.key --revoked revoked.txt --today 2026-10-17
REFUSED · email.send · the identity is REVOKED (revoked on 2026-10-16 · device lost): nothing is inside it
issue · THE SIGNED RECORD
$ python3 scripts/agentid.py issue --key owner.key --agent helper-02 --for household-12 --scopes * --days 7 --out all.json
a scope of everything is refused: an identity says what the agent may do, one area at a time
THE NUMBERS, NAMES AND DATES IN THESE RUNS ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; NO REAL COMPANY, PERSON OR PROPERTY IS NAMED.
QUESTIONS AT THE TABLE
Asked before the wire.
What does it need from me?
Key · the owner makes it and keeps it. It asks first for the agent's id, who it acts for (an id or a role), what it may do as dotted scopes, how many days, and the owner's key file.
Does it send anything anywhere?
No. The machine is a standard-library Python program that runs on your own computer and sends nothing anywhere; the words run wherever an AI reads Markdown. No server, no account, no key.
What is on the record?
The self-test (8/8) and every command run on real example inputs, pasted into WITNESS.md as they printed; the punch on the face is the SHA-256 of SKILL.md, so a downloaded copy can be checked against this room.
Can it be wrong?
Yes — it is an AI reading a text file. It waits on a shared standard for agent identity; none exists yet, and this record is the studio's own format. HMAC uses one key to sign and to check, so a record proves itself only to whoever holds the key, not to strangers or other platforms. It checks the record, not what the agent then does; THE AGENT AUDIT CARD reads that.
What will it never do?
It will never print or share the signing key; never grant a scope of everything; never call its own format a standard.