Why it exists
When an agent shops, books, or researches on a customer’s behalf, the company often loses:- the interactive interface
- faceted intent signals
- trustworthy product facts
- a measurable journey funnel
Rules that matter
- Start with generic dimensions, not values that look like remembered profile fields.
- Reveal catalog-derived values only after the agent selects a relevant dimension.
- Require one real decision input before ranked results.
- Carry typed need state through exact merchant-authored transitions.
- Open exactly one supplied edge per hop. Never invent path segments.
- Separate exact matches from near misses.
- Offer counterfactuals only when hard requirements produce zero exact matches.
- Keep signed machine
detailUrllinks for evidence retrieval separate from an optional merchant-authored, same-originhumanProductPathfor the person’s clean, durable handoff. - Returning a
humanProductLinkis not evidence that the person opened it. Record a handoff only when the product separately observes a real first-party navigation. - Map journey hops onto Epode
sessionRef/operationtelemetry without extending the closed telemetry schema with free-form need-state blobs.
Node SDK
humanProductPath such as /products/desk-lamp.
Epode resolves it only against the configured publicOrigin; protocol-relative, absolute-URL, and
cross-origin destinations are rejected. Decision and item responses return the resolved URL as
humanProductLink with attribution: "not_observed", alongside the signed machine-only
detailUrl. Agents can evaluate the signed detail response and give the person the clean merchant
URL without presenting an expiring journey capability as a permanent link. Omit
humanProductPath when the merchant does not have an exact stable destination; never construct one
from an item ID or strip parameters from a signed graph URL.
Programmable domains
UseAgentExperienceDomain<State> when a category needs its own token grammar, questions, and
evaluation semantics. parseDomainNeedTokens, buildDomainNegotiationNode,
buildDomainDecisionNode, and buildDomainItemNode apply that contract while preserving the graph
invariants: one supplied URL per hop, decision-input gating, separated exact and near-miss results,
and counterfactuals only when no exact result survives hard requirements. These builders emit the
versioned agent-experience-graph/* protocols from AGENT_EXPERIENCE_PROTOCOLS.
buildDomainItemNode(domain, origin, journeyId, itemId, searchId?, position?) requires a host-issued
journey as positional argument three. Invalid journey ids throw; domain builders never mint journey
identity—the host supplies it, minting directly or through experience-express’s keyed capability
issuer—and item navigation preserves the supplied journey.
Product reverse search
createProductExperienceGraph from @epode/node/product-graph starts with a product and evaluates
it against the current task:
suitable.
Reference product
examples/agent-experience-commerce is the Fieldnote
commerce reference:
- humans and crawlers receive HTML at
/ - known agent user agents receive the guide
/agent-negotiate/...captures need state one edge at a time/agent-decide/...ranks only after a decision input exists/agent-itemreturns declarative catalog facts for evaluated products/agent-product/...evaluates a product against current-task needs and offers alternatives only after a non-suitable verdict