04 · Mechanism

Soul Mirror, and the standard that moved

A companion contract per collection that a marketplace can see, that follows the original on every sale, and that works when the founders are gone. Then the September 4 update to ERC-8217 that reopens one settled design point.

0x97f6…c652
Art DeCC0s, 10,000 on Ethereum. TransparentUpgradeableProxy; MOCA holds the admin key
0x8004…a432
ERC-8004 identity registry, live on mainnet, Base and Robinhood Chain
8217 · 8048
Binding and on-token metadata, both Draft. 8004A / 721T nicknames since September 4

The gap

Marketplaces index Transfer events. Anything attached to an NFT either has its own transfer history and can drift away from the original, or resolves ownership at read time and is invisible on marketplaces. Every live approach picks one side.

ApproachLive exampleFollows the NFT on saleVisible on OpenSeaWorks on renounced contracts
Adapter8004 (ERC-8217)Normies, Compas, 26 moreYes, read-time ownerOfNo. Agent shows as owned by the adapterYes
Per-collection agent registryGoblinarinos Agents, Sproto Gremlins AgentsNo. Separate transferable tokenYesYes
ERC-721T on-token metadata (ERC-8048)Reference implementation, LoopersYesTraits onlyNeeds the contract or its metadata JSON
Soul MirrorArt DeCC0s firstYesYes, own collection, current holder as ownerYes

How the companion works

Source collection any ERC-721, untouched ownerOf → holder tokenURI unchanged Embodied companion Soul Mirror · ERC-721 · soulbound ownerOf = source.ownerOf transfer reverts (5192) metadata(id, key) · 721T fee split · claim ledger weaver attestation (712) official flag · referrer ERC-8004 registry AgentIdentity #N bound via 8217 singleton master NFT = source token reads live registers anyone, after a sale: sync(id) → internal transfer → Transfer(old, new, id) → OpenSea shows the new holder holder, one tx: embody(tokenId, identity, sig, referrer)

One companion per collection, deployed lazily from a factory on the first embodiment, immutable once deployed. Same token ids as the source.

What moved on September 4

Prem Makeig (nxt3d) added two lines to ERC-8217: any NFT registered as a master NFT under it may use the label 8004A, "regardless of the registration method used". In the same post he named 8004A/721T as the label for an NFT that carries ERC-8048 agent metadata: a context key, endpoint[mcp|a2a|web|x402], and address and account keys per chain. He quoted Loopers, a 7,777-piece collection minting September 10 to 17 on Base as 8004A/721T with token-bound wallets, through Bankr.

Consequence 1

Agent NFT is a labelled category

Normies and 27 other collections already qualify. New drops launch agent-native with off-the-shelf tooling. "Embodied" must read as 8004A/721T or it is a private dialect.

Consequence 2

Soul Mirror as drafted is a second binding contract

Draft 4 has each companion write agent-binding pointing at itself. The spec wants one binding contract per chain and calls more than one "NOT RECOMMENDED". Reopened.

Consequence 3

The Codex is a context key

721T gives the agent a standard place for who it is, where its MCP server is, and which account holds funds. The package's agent.json becomes a projection of those keys.

Proposed correction. Bind through the canonical per-chain 8217 singleton, with the source NFT (the DeCC0) as master NFT, not the companion. The companion keeps the jobs nobody else does: visibility of embodied status under the current holder, the attestation, the fee split and ledger, and the 721T surface for collections that cannot carry keys. It stops being the custodian of the identity.

The fork: Path A or Path B

DeCC0s is upgradeable. MOCA could make DeCC0s 8004A/721T natively: implement metadata() on the proxy, bind each token through the singleton, point a live trait at the agent. Then the companion is needed only for renounced and immutable follower collections.

Path A · companion for everyone
Path B · DeCC0s native, companion for followers
Opening audit surface
Factory, mirror, fee module, ledger
Proxy upgrade plus singleton binding; factory can follow later
"Embodied" set on OpenSea for DeCC0s
Yes, its own collection
No; embodied status is a trait on the DeCC0 itself
One roadmap for everyone
Yes
Weakened; DeCC0s take a different technical path
Interop with 8004A indexers
Only if bound through the singleton
Native
Dependence on the OpenSea sync test
Load-bearing
Not needed for DeCC0s
Story
Bodies as a visible companion
Bodies as the DeCC0 itself waking up

Neither is chosen. Path B removes the largest unvalidated assumption for the opening; Path A keeps the product uniform. A hybrid is possible: native for DeCC0s first, the companion factory for followers when the first one is ready.

Who can adopt

CollectionExampleOn-token metadataPath
Upgradeable, or owned with a swappable rendererArt DeCC0s, NormiesNativeImplement ERC-8048 in the contract, add a transfer hook that calls sync. Companion for visibility if Path A.
Immutable contract, metadata served by a project APIMost 2021 to 2023 drops that never frozeVia one JSON fieldAdd ERC-8048's metadata_contract to the served JSON, pointing at the companion. Zero on-chain change.
Immutable, frozen metadata, no ownerFrozen blue chips, on-chain artOn the companion onlyEverything works identically. Discovery runs from the agent, the factory, or soulweaver.

Prem Makeig, this week

The outreach was planned as "co-author a standard". It is now "we adopt 8217 and 721T; here is how a visibility companion coexists with the singleton; two technical questions". The two questions decide whether embodiment fits in one transaction:

Governance of the DeCC0s keys

The ProxyAdmin is owned by a single EIP-7702-delegated EOA and owner() is a plain EOA. On September 3 the position was "Safe and timelock before anything launches". On September 4 it was reversed: the keys stay as they are while ERC-8217, 8048, 8154 and 8257 are drafts, so MOCA can upgrade the proxy as they move. The posture is published openly, a key hygiene review replaces the lock, and a Safe without timelock is available whenever MOCA wants key-loss protection. Path B makes the upgrade power the mechanism itself, which strengthens the case for keeping it.