# DMT Receipts — permanent agent memory on Bitcoin (TAP) > Your agent forgets. Bitcoin doesn't. Permanent memories on Bitcoin for AI agents. > Inscribe a canonical agent memory on Bitcoin L1 via the TAP Protocol / Ordinals. > Permanence = inscription content on Bitcoin — not a free hash-only calendar digest. A confirmed inscription proves: these exact bytes were written into a Bitcoin Ordinals inscription (TAP-indexed Bitcoin L1). It does NOT prove who wrote them, that they are true, or any ownership / DMT / $NAT rights. Fees are real Bitcoin inscription fees. ## The recipe (canonical memory → inscription payload) ```python import hashlib, json, datetime memory = { # dmt-memory/v1 — exactly these 5 fields (extensions allowed) "agent_id": "my-agent", "key": "notes/example", "content": "User prefers concise answers.", "tags": ["preferences"], "created_at": datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), } raw = json.dumps(memory, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8") digest = hashlib.sha256(raw).hexdigest() open("memory.json", "wb").write(raw) # keep these exact bytes print("inscribe memory.json as application/json or text/plain Ordinals content") print("sha256", digest) # Optional TAP dta (≤512 bytes) for token-deploy flows only: # {"p":"tap","op":"token-deploy","tick":"…","max":"1","lim":"1","dec":"0","dta":"sha256:"+digest} ``` ## Permanence path (TAP / Ordinals) 1. Canonicalize `dmt-memory/v1` (sorted keys, compact separators, UTF-8, no trailing newline). 2. Inscribe those exact bytes as Ordinals content (`application/json` or `text/plain`). - TAP ops are JSON inscriptions with `"p":"tap"` and an `op` field. - For pure agent memories, **content inscription** is the permanence mechanism. - Optional: attach TAP `dta` (string ≤512 bytes) when using token-deploy flows. 3. Keep `memory.json` + `inscription_id` / `txid` together in storage you control. 4. Verify by fetching inscription content from a public Ordinals / TAP explorer and comparing SHA-256 to your canonical bytes. ## Browser - Live UI: https://misty-flame-3nw3.here.now/ (`#anchor`, `#verify`, `#receipts`, `#docs`) - Prefer TAP Wallet `window.tapprotocol` when present (`requestAccounts`, sign/send flows). - If wallet missing: install TAP Wallet, or use the offline JSON recipe with any Ordinals/TAP tool. - This static page never fakes a successful on-chain write. ## Support & Tap buyback (optional) Memory prepare stays free. Optional **Support** and **Tap buyback** contributions are honor-system. **All proceeds route to the Buyback tab** (USDC address shown there; Base preferred). This is separate from Bitcoin inscription fees paid to miners/inscribers. UI: https://misty-flame-3nw3.here.now/#support · https://misty-flame-3nw3.here.now/#buyback ## Links - TAP docs: https://docs.tap-protocol.com/ - TAP specs: https://github.com/Trac-Systems/tap-protocol-specs - Spec: https://misty-flame-3nw3.here.now/spec.txt (markdown: `/spec.md`) - Agent guide: https://misty-flame-3nw3.here.now/agent.txt - Manifest: https://misty-flame-3nw3.here.now/agent.json - Source + MCP tools (MIT): https://github.com/Colchora/dmt-receipts