Adobe Commerce Developer Agent App Builder dry run
A hands-on walkthrough for building, deploying, and testing Commerce extensibility use cases with the Adobe Commerce Developer Agent (CDA). This dry run covers three use cases: a cart quantity limit webhook, a high-value order hold, and event-driven archival for held orders, from blueprint through functional testing.
Getting started
How to report issues and feedback
Throughout the dry run, you encounter rough edges — that’s expected while working with a new feature. Capture and share any issues with your Adobe program contact using the feedback template provided during onboarding.
- Include the
projectId(visible in your browser URL). - Include screenshots whenever relevant.
Prerequisites
Accounts and access
- At least the Developer role in your Early Access IMS Organization.
- Admin access to an Adobe Commerce as a Cloud Service (ACCS) instance within that organization, available at experience.adobe.com under Cloud Service Instances.
- A GitHub account.
Tools
An Edge Delivery Services (EDS) storefront is required for functional validation. You’ll need:
- Node.js 22+
- Adobe I/O CLI:
npm install -g @adobe/aio-cli - AIO CLI Commerce plugin:
aio plugins:install https://github.com/adobe-commerce/aio-cli-plugin-commerce
Install the storefront boilerplate in an empty folder, selecting your ACCS instance when prompted:
aio commerce extensibility app-setup -s aem-boilerplate-commerce -n storefront
Start the storefront:
cd storefront
npm run start
Opening the Commerce Developer Agent
- Navigate to the Commerce Developer Agent at experience.adobe.com, under Developer Agent.
- Sign in using your Early Access IMS Organization credentials.
Use case 1: cart maximum units webhook
This use case validates cart quantity limits before a product is added, using a synchronous Commerce webhook.
Blueprint stage
Enter the following prompt and click Generate Blueprint:
Add a validation webhook that runs before a product is added to the cart.
Use the Commerce webhook method observer.sales_quote_item_save_before (type before) — do not use
observer.checkout_cart_product_add_before, observer.sales_quote_add_item, or any other event.
Calculate the total by summing all quote line quantities and the quantity of the current item.
If the same SKU already exists in the quote, exclude its existing quantity to avoid double-counting.
If the total is greater than the maximum allowed, block the add and show:
"You have reached the maximum amount of items."
The maximum allowed must be configurable in Commerce Admin as max_cart_units, with default 10.
Map payload fields using name and source properties:
- name: item.qty, source: data.item.qty
- name: item.sku, source: data.item.sku
- name: quote, source: context_checkout_session.get_quote[items.qty,items.sku]
Set required: true and fallback_error_message: "You have reached the maximum amount of items."
on the webhook config.
When blocking the add, do not use exceptionOperation, because it serializes exceptionClass as class.
Instead, manually return an exception operation response whose body includes type:
{
"op": "exception",
"message": "You have reached the maximum amount of items.",
"type": "\\Magento\\Framework\\GraphQl\\Exception\\GraphQlInputException"
}
- A blueprint (v1) capturing the requirements is created.
- Tasks to guide the implementation are created.
Refine the blueprint by entering details in the chat box or by clicking one of the pills above the chat box (Challenge assumptions, Find design gaps, etc.). Once you’re satisfied, click Approve plan to move forward.
Develop stage
The agent transitions to the Develop stage and begins provisioning the workspace.
app.commerce.config.tsapp.config.yamlinstall.yamlpackage-lock.jsonpackage.json
Once provisioned, the agent shows a list of implementation tasks and starts building.
- The code generated matches the requirements.
- The
Validatestreaming screen shows progress on workspace validation (aio app build). - The agent self-corrects the generated code if validation fails.
Once satisfied with the code, click the Integrations tab to move forward.
Configure integrations
Connect or create an App Builder workspace
To create or connect an App Builder project, follow the on-screen instructions.
If connecting to an existing workspace, make sure it has:
- The
Runtimeservice added. - The following APIs added: Adobe Commerce as a Cloud Service, I/O Management API, App Builder Data Services, I/O Events, Adobe I/O Events for Adobe Commerce.
If creating a new workspace, manually add the Adobe Commerce as a Cloud Service API.
Click Next to continue.
Connect to Commerce
Select your ACCS instance from the list, or enter the URL in the Commerce REST Base URL field, then click Connect Commerce instance. Click Next to continue.
Connect to GitHub
Connect the workspace to a GitHub repository by entering the repository URL and either using the GitHub App or a personal access token. Click Next to continue.
Configure environment variables
Fill in any environment variables required by the project.
Deploy
Click Develop to return to the develop stage, then ask the agent to deploy in the prompt field.
Confirm the deployment.
- The
Validatestreaming screen showing pre-deploy validation progress. - The agent self-correcting the code if validation fails.
- The
Deploystreaming screen showing deployment progress (aio app deploy). - The agent self-correcting the code if deployment fails.
Associate the app in App Management
- Navigate to your ACCS instance Admin URL and sign in.
- Select Apps on the left-hand menu, then App Management.
- Click + Associate App (upper right).
- Select the Project and Workspace that CDA deployed to, then click Associate.
Install and configure in App Management
- On the row for your application, click Install, then Close.
- On the same row, click Configure to fill in business configuration values, then Close.
Functional testing
- In the App Management app configuration, set Maximum cart units to 3 (a low value for a quick test).
- On the storefront, start with an empty cart.
- Add products from the Product Detail Page (PDP) until the total quantity exceeds 3 — the last add fails.
- On PDP, you see: “You have reached the maximum amount of items.”
- Below the limit, adds still succeed.
Use case 2: high-value order hold and verification code
Navigate back to the Blueprint stage to begin this use case.
Blueprint stage
Enter the following prompt and click Generate Blueprint:
Add a Commerce event priority subscription to `plugin.sales.api.order_management.place`.
Extract `entity_id` and `grand_total` from the Commerce event payload using event `fields` in `app.commerce.config.ts`.
Important: the runtime action receives a CloudEvents-shaped payload. For Commerce eventing extracted fields,
parse them from `params.data.value`, not directly from `params.data`. The handler must use:
- `params.data.value.entity_id`
- `params.data.value.grand_total`
When `grand_total` is greater than `order_hold_threshold`:
1. Generate a verification code locally.
2. Put the order on hold with state and status `holded`.
When putting the order on hold, save the verification code using `custom_attributes`, not `extension_attributes`.
The Commerce `POST V1/orders` payload should include:
{
"entity": {
"entity_id": <entity_id>,
"state": "holded",
"status": "holded",
"custom_attributes": [
{
"attribute_code": "<hold_verification_attribute>",
"value": "<verification_code>"
}
]
}
}
3. Save the verification code via a `POST V1/orders` Commerce REST API call.
Make these configurable in Commerce Admin:
- `order_hold_threshold`, default `500`
- `hold_verification_attribute`, default `lab_verification_code`
Validate inputs before use:
- `entity_id` must be a positive integer.
- `grand_total` must be a non-negative number.
- A blueprint (v2) capturing the requirements is created.
- Original plan tasks are retained.
- New tasks corresponding to the new requirements have been added.
Refine the blueprint as needed, then click Approve plan to move forward.
Develop, deploy, associate, and install
Follow the same process used in Use case 1 to move from requirements to an installed application — there’s no need to reconfigure integrations.
Functional testing
- In App Management app configuration, set Order hold threshold (USD) to 50 (easy to exceed in a test cart).
- Confirm the order custom attribute exists (default
lab_verification_code). - Place an order with a grand total over $50.
- Wait ~30 seconds (events are asynchronous; non-priority delivery can take up to ~59s).
- In Commerce Admin → Sales → Orders, open the order. Status is On Hold (
holded); custom attributes includelab_verification_codewith a random value. - Optional: place an order under $50 first — this handler does not put it on hold.
Use case 3: event-driven archival for held orders
Navigate back to the Blueprint stage to begin this use case.
Blueprint stage
Enter the following prompt and click Generate Blueprint:
When an order is saved with state holded, archive it to external storage and
record a reference that can be looked up later by order ID.
Add an event priority subscription on observer.sales_order_save_after, filtered to fire only when
state equals holded. From the event payload, extract:
- `entity_id`
- `payment.amount_ordered`
- `custom_attributes` (to read the `lab_verification_code` attribute set in Step 3)
The event handler must:
1. Persist the order details to the `held_orders` App Builder DB collection:
{
"order_id": <entity_id>,
"grand_total": <payment.amount_ordered>,
"verification_code": <lab_verification_code>,
"archived_at": <ISO timestamp>
}
2. Ensure the record can be looked up later by order ID.
The `held_orders` collection must exist before the handler runs:
- Provision persistent App Builder Database Storage in region `amer`.
- Create the collection during app installation.
- Create a unique index on `order_id` during installation.
- Drop the whole `held_orders` collection when the app is uninstalled.
Register the event handler separately from the existing cart validation webhook and high-value order hold action:
- runtime action: `order-archive/archive-held-order`
- non-web action
- `include-ims-credentials: true` on the archive action and the installation action
Follow the `commerce-app-storage` skill for DB auth, installation steps, and ext.config wiring.
Do not use custom IMS credential normalization or `Core.AuthClient.generateAccessToken`.
- A blueprint (v3) capturing the requirements is created.
- Original plan tasks are retained.
- New tasks corresponding to the new requirements have been added.
Refine the blueprint as needed, then click Approve plan to move forward.
Develop, deploy, associate, and install
Follow the same process used in the previous use cases to move from requirements to an installed application — there’s no need to reconfigure integrations.
Functional testing
- Ensure the Use case 2 threshold is low enough for testing (for example, $50 in app configuration).
- Place an order over that threshold so Use case 2 puts it on hold (~30 seconds).
- In Adobe Developer Console → Your Project → Stage → Events, open the registration for the held-order archival event (added or updated at install).
- Confirm an event was delivered to that registration after the order moved to hold. Use the event trace or monitoring for the Commerce event linked to
order-archive/archive-held-order.
Troubleshooting
If the application generated by CDA isn’t behaving as expected or is producing errors, ask the agent to troubleshoot from the Develop stage.
- What you did, and where (for example, “clicked Install in App Management”).
- What you expected to happen.
- What happened.
- The exact error text or message shown on screen.
- Any relevant errors from the browser console, or from the Adobe Developer Console’s App Builder Logs and Event Registration Debug Traces.
The more concrete the report, the better the agent can diagnose the issue.
Optional steps
Download the code
To continue refining or editing in your favorite IDE, download the code generated by CDA by clicking the download icon on the Develop stage Explorer toolbar. Select a destination folder and click Save, then unzip the workspace package.
- All files displayed in the Develop stage Explorer are present in the unzipped folder.
- No “compilation” errors when building the project with
aio app build.
To use the same agent skills CDA uses, install them in your project folder:
npx skills add adobe/aio-commerce-sdk --skill commerce-app-init -y && \
npx skills add adobe/aio-commerce-sdk --skill commerce-app-eventing -y && \
npx skills add adobe/aio-commerce-sdk --skill commerce-app-webhooks -y && \
npx skills add adobe/aio-commerce-sdk --skill commerce-app-business-config -y && \
npx skills add adobe/aio-commerce-sdk --skill commerce-app-storage -y && \
npx skills add adobe/skills --skill appbuilder-project-init -y
Then start your IDE or CLI and begin prompting.
Attach context via file or link
Instead of prompting directly in the Blueprint or Develop stages, you can attach context using a text file or a link:
- Click the attachment icon on the chat box.
- Click Add File to upload a local text file, or enter a URL and click Add Link to add context via a remote file.
- Click Done and enter a prompt to nudge the agent.
Known issues and workarounds
The Blueprint stage does not generate tasks
To get unblocked and continue, nudge the agent to generate tasks.
The buttons to push to and pull from GitHub are not functional
Instead, download the project ZIP file from the Develop stage.