dist/codex/magento2-commerce/skills/magento-events-cron/SKILL.md
Implement Magento 2 events, observers, cron jobs, and message queues. Use when building event-driven logic, scheduled tasks, or asynchronous processing.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins magento-events-cronInstall 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:
https://developer.adobe.com/commerce/php/development/components/events-and-observers/ for events/observers guidesite:developer.adobe.com commerce php development components message-queues for message queue guidesite:developer.adobe.com commerce php development components cron for cron developmentPublish-subscribe pattern: code dispatches named events, and observers respond.
$this->eventManager->dispatch('event_name', ['key' => $value]);
EventManagerInterface is injected via constructor.
Observers are bound to events in etc/events.xml (global), etc/frontend/events.xml, or etc/adminhtml/events.xml:
event name — event to observeobserver name — unique identifierinstance — observer class (fully qualified)Observer/ directoryMagento\Framework\Event\ObserverInterfaceexecute(Observer $observer) — access event data via $observer->getEvent()etc/events.xml — runs in ALL areasetc/frontend/events.xml — storefront onlyetc/adminhtml/events.xml — admin onlyMagento dispatches hundreds of events. Common categories:
catalog_product_save_before/after — product save lifecyclecheckout_submit_all_after — order placementcustomer_register_success — customer registrationsales_order_place_after — order placedcontroller_action_predispatch/postdispatch — request lifecycleCron jobs are declared in etc/crontab.xml:
job name — unique identifierinstance — class namemethod — method to call (usually execute)schedule — cron expression (minute hour day month weekday)group — cron group (default, index; Adobe Commerce also has staging, catalog_event)Any class with an execute() method. No interface required. Constructor injection for dependencies.
etc/cron_groups.xmlbin/magento cron:run # Run all due cron jobs
bin/magento cron:install # Install system crontab entry
For asynchronous, resource-intensive, or decoupled operations. Supports AMQP (RabbitMQ) and MySQL-based queues.
communication.xml — defines topics and request/response typesqueue_consumer.xml — maps queues to consumer handler classesqueue_topology.xml — exchanges, queues, routingqueue_publisher.xml — defines where topics publish toConsumer class with a process($message) method. Started via:
bin/magento queue:consumers:start <consumer_name>
index cron group for indexer-related jobsFetch the events/observers and cron documentation for exact XML schemas, event names, and cron expression syntax 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.