dist/codex/acp-agentic-commerce/skills/acp-intent-traces/SKILL.md
Implement ACP intent traces — structured cart abandonment signals with reason codes for analytics and automated recovery workflows. Use when building abandonment tracking, recovery automation, or conversion optimization.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins acp-intent-tracesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch live docs:
site:github.com agentic-commerce-protocol rfcs intent_traces for the intent traces RFChttps://developers.openai.com/commerce/specs/checkout/ for how intent traces integrate with checkoutsite:github.com agentic-commerce-protocol spec json-schema intent for the schemaIntent traces are a built-in ACP extension that provides structured cart abandonment signals. When a buyer abandons a checkout, the agent sends a trace explaining why — enabling merchants to understand conversion barriers and automate recovery.
| Code | Meaning |
|------|---------|
| price_sensitivity | Total was too expensive |
| shipping_cost | Shipping cost was a barrier |
| shipping_speed | Delivery time was too slow |
| product_fit | Product didn't match buyer's needs |
| trust_security | Buyer didn't trust the merchant/payment |
| returns_policy | Return/refund policy was inadequate |
| payment_options | Preferred payment method unavailable |
| comparison | Buyer is comparison shopping |
| timing_deferred | Buyer wants to purchase later |
| other | Doesn't fit other categories |
POST /checkout_sessions/{id}/cancel, including a single reason_code (required enum string, exactly one per trace)Like all extensions, intent traces must be negotiated:
intent_traces in capabilities.extensions[]trace_summary — Optional free-text summary of the abandonment reason (max 500 characters)metadata — Optional flat key-value map for additional context (string keys and string values only)Intent traces are write-only — they are sent on the POST /checkout_sessions/{id}/cancel endpoint and are never echoed back in GET responses. This prevents information leakage and ensures traces are used only for analytics and recovery workflows.
other is better than no signalreason_code (required enum string); if the buyer has multiple reasons, choose the most significant oneFetch the intent traces RFC for exact trace payload structure, reason code definitions, and integration points before implementing.
development
Build with Spree's headless Next.js storefront — the official `spree/storefront` repo (Next.js 16 App Router with Server Actions and Turbopack, React 19 Server Components, Tailwind CSS 4, TypeScript 5, `@spree/sdk`, Sentry), server-only auth (httpOnly JWT cookies + publishable key), MeiliSearch faceted catalog, one-page checkout with Apple/Google Pay/Klarna/Affirm/SEPA, multi-region market routing, GA4 + JSON-LD SEO, and Vercel/Docker deployment. Use when forking or customizing the storefront, or evaluating headless adoption.
tools
Build Spree extensions as Rails engines — gem scaffolding, `bin/rails g spree:extension`, mounting routes/migrations/assets, the modern `prepend` decorator pattern (`*_decorator.rb` with `self.prepended(base)`), generators (`spree:model_decorator`, `spree:controller_decorator`), the four customization surfaces in preference order (Events > Webhooks > Dependencies > Decorators), Spree::Dependencies for swapping service objects, gem release/versioning, and the deprecated Deface engine. Use when building a reusable Spree extension or adding non-trivial customization to an app.
development
Build with Spree's event bus and Webhooks 2.0 — `Spree::Events` publication, `Spree::Subscriber` DSL with `subscribes_to` and `on`, wildcard matching, lifecycle events (`{model}.created/.updated/.deleted` via `publishes_lifecycle_events`), the canonical event catalog (order.*, payment.*, shipment.*, product.*), Webhooks 2.0 endpoints, HMAC-SHA256 signing (`X-Spree-Webhook-Signature`), exponential-backoff retries, and Sidekiq job orchestration. Use when wiring event-driven business logic, building webhook consumers, or replacing ActiveSupport callback chains.
tools
Cross-cutting Spree development patterns — the customization preference hierarchy (Events > Webhooks > Dependencies > Decorators), `Spree::Dependencies` service-object swapping, the `_decorator.rb` + `prepend` + `self.prepended` idiom, idempotent subscribers and webhook receivers, multi-store scoping discipline, prefixed IDs, calculator polymorphism (shipping/promotion/tax share the base), service-object composition with `dry-monads` or simple results, why to avoid `class_eval` reopening and Deface, and Spree-on-Rails idioms (Hotwire/Turbo Stimulus, ActiveStorage, Action Cable, Sidekiq). Use when designing the architecture of a Spree extension or solving cross-cutting concerns.