1. Triage Acme’s issue
The coordinator takes Acme’s customer ID and ticket TICK-2026-99381 and assigns six focused support tasks.
Understand the pattern, watch Customer Resolution in action, then set up the sample and embedded chat with one PowerShell script.
Open the live demo ↗ · Set up your own swarm ↓Acme Retail’s checkout is blocked by HTTP 429 errors. Its customer support swarm uses one coordinator to assign six specialist tasks and turn their results into a single resolution report.
The coordinator takes Acme’s customer ID and ticket TICK-2026-99381 and assigns six focused support tasks.
CRM, product, and knowledge provide account and policy context. Billing, technical, and escalation return the sample relief, remediation, and ticket updates.
The final response explains the quota trigger, the extra capacity and fee waiver, the cleared errors, and the follow-up for Acme’s customer success manager.
If a task needs another task’s output, name that prerequisite in requires. The runtime can schedule dependent work after that result is available. In this downloaded example, all six tasks use requires: []. The page and README call it “multi-wave,” but the actual YAML does not enforce a discovery-before-action sequence.
Acme Retail’s checkout is hitting HTTP 429 errors. The swarm checks the account and quota, applies the sample remedy, and prepares the support response.
Open the demo and select 06 Customer Resolution, then choose API Throttling. The GIFs below were captured from actual runs of that prompt on the supplied embedded-chat page.
The Python tools return fixed demo data. No billing ledger, gateway, Slack channel, or support system is changed by these sample functions. The reported “11.4 minutes” is a fixture value, not the measured duration of this run. Dates and generated prose should be checked before reuse.
Customer Acme Retail Corp (CUST-ENTERPRISE-8821) is reporting 429 Too Many Requests errors and API throttling blocking their checkout traffic. Investigate customer tier and quota entitlements, apply necessary billing adjustments, execute rate-limiter remediation, and update support ticket TICK-2026-99381.
Save the script below → run it in PowerShell → paste a valid API key → wait for the sample to pass → use the chat page that opens.
Use the login assigned to your group. Open the Singapore instance, choose IBMid sign-in, and enter the details below.
Download lab materials (Box) ↗ · Open Singapore lab ↗ · Download login handout| Group | IBMid / username | Password |
|---|---|---|
| Group 1 | swarm1911c@maxxspace.com | Swarm@123456 |
| Group 2 | swarm2911c@maxxspace.com | Swarm@123456 |
| Group 3 | swarm3911c@maxxspace.com | Swarm@123456 |
These are the participant credentials supplied for this lab. If IBM requests an MFA code, ask the facilitator to complete the verification. This handout contains lab login credentials; share it with the assigned participants.
Rohit’s preloaded Singapore example is Customer Onboarding Coordinator (KYC). To build the Customer Resolution example shown in this guide, continue with the unified script below.
| You need | What to check |
|---|---|
| Windows and PowerShell | 64-bit Windows 10/11; Windows PowerShell 5.1 or PowerShell 7. The script must be permitted by your organization. |
| Computer architecture | x64, or Windows 11 ARM64 for automatic x64 Python installation. 32-bit Windows/Python is rejected. Native ARM64 Python can be selected explicitly if dependency wheels are available. |
| Python | Standard 64-bit CPython 3.11–3.13. With -InstallPython, the script installs Python 3.11 through winget only when compatible Python is missing. If winget is unavailable, install Python from python.org first. |
| Browser and network | A current Edge, Chrome or Firefox; network access to PyPI and the Singapore tenant. A corporate proxy may need IT-provided proxy and CA settings. |
| Orchestrate access | A current API key for the assigned tenant, with tools/agent import and deployment permissions. An IBMid/password is used for the website; the script asks for an API key. |
| Facilitator preparation | Parallel execution enabled; the selected model available; official widget embed security configured for the lab. The launcher does not change tenant security. |
No Docker, WSL, Bash, Node, npm, PATH editing or virtual-environment activation is needed. The script includes the sample agents and tools; the original ZIP is optional reference material.
Validation scope, 27 October 2026: PowerShell 7.6.9 on macOS, 19 Python tests, PowerShell architecture/launcher checks, fresh Singapore authentication and six-specialist completion passed. Both chat modes completed the sample in the macOS browser. Windows x64 and ARM64 wheel downloads passed; actual Windows, winget and Windows browser execution remain unverified.
/instances/….The launcher already defaults to the Singapore API URL shown below. The website’s /home URL is for browser sign-in.
The launcher defaults to the Singapore instance below. Use a current API key for that same instance. Paste only the key value at the script’s hidden prompt, or provide its downloaded JSON with -ApiKeyFile.
Instance URL
https://api.ap-southeast-1.dl.watson-orchestrate.ibm.com/instances/20261026-1109-2741-3043-5f3ff8fef68aAPI key: swarm-lab-replacement · Expires October 27, 2026 · Key used in validation; confirm its expiration covers your session.
azI6OWQzYjczYzktYWM5Zi00YTBhLTgyNjYtYWM5ZmI1MjU5MmIxOk5mMEgzTzhzd0RpaGc3V28xQlRuaUdjY0UxaFh0SjFnTk1XeVlEekZCYzQ9This personal key inherits the facilitator’s Service administrator access. This document contains the key in plain text; distribute only to authorized lab participants. It is for ADK authentication, not for insertion into the browser embed script.
.ps1, not .ps1.txt. In File Explorer, enable View → Show → File name extensions if needed.Copy the entire box, including the long bundled-payload line. It contains the Python backend, sample tools, YAMLs and both chat pages. No API key or participant password is embedded in this script. Do not edit its payload.
The box is read-only and works without page scripts. Selection and copying use your browser’s standard controls. Copy through the final closing brace. If using the original distributed .ps1 file, its SHA-256 is b1c8adbd1d0bd969d147eaf77061a36a8df95f188e1c17a873cf873474e6fc53. Notepad may change line endings or the UTF-8 BOM, so a manually saved file can have a different file hash; the launcher separately checks its bundled payload.
Setup-Swarm-Lab.ps1.powershell, and press Enter. The PowerShell window opens in that folder..\Setup-Swarm-Lab.ps1 -InstallPythonIf winget needs confirmation to install Python, review its prompt. The script uses a user-scoped installation and does not require you to activate a Python environment.
When asked “Paste API key VALUE”, paste only the key value and press Enter. The prompt hides the characters. Do not paste the full JSON, the IBMid password, or quotation marks.
Alternatively, use a downloaded key JSON:
.\Setup-Swarm-Lab.ps1 -InstallPython -ApiKeyFile "$env:USERPROFILE\Downloads\my-key.json"Optional check before installation: if a supported Python is already installed, run the command below. It writes a local report but does not install packages, sign in, import agents or deploy them. If Python is missing, use the normal -InstallPython command above.
.\Setup-Swarm-Lab.ps1 -CheckOnlymcsp_v2 environment, validates the supplied key and checks authenticated inventory.lab…_ names, then deploys and verifies their Live releases.Expect installation downloads and model execution to take time. Leave PowerShell open. A success marker for login alone is not the end of setup; wait for:
PASS: all expected specialists completed and a final response arrived.
READY: http://localhost:8765/Default working files are under %USERPROFILE%\SwarmLab. Generated agent YAMLs are in generated\agents; sample tools are in generated\tools. The launcher selects watsonx-orchestrate/frontier and adds instructions limiting the demonstration to six assigned tasks without extra follow-on delegation. Original source files remain available for comparison.
When the browser opens http://localhost:8765/, the official IBM widget appears inside the lab page. Select API Throttling or send the sample prompt in section 02.
Success: specialist progress, six completed tasks, and a combined Acme Retail resolution report. These tools return synthetic demo results; no real billing, gateway, Slack or ticket action is performed.
If the official widget shows Agent fetching failed, select API-backed lab chat in the running lab page, then Run scenario. It reaches the same Live coordinator through the local Python server. Its success confirms that path; it does not prove the official widget is healthy.
Keep PowerShell open. Ctrl+C stops the local server. If the browser does not open automatically, type http://localhost:8765/ into a current browser. Reopen the script to restart chat.
Correct the reported error, then rerun the same command with the same work folder. Saved import and deployment stages are reused. The launcher still verifies Live releases and runs a fresh sample. To reuse the saved ADK login:
.\Setup-Swarm-Lab.ps1 -Resume| What you see | What to do |
|---|---|
| Downloaded script is blocked | After reviewing the file, run Unblock-File -LiteralPath .\Setup-Swarm-Lab.ps1. Organization-enforced script restrictions need IT assistance. |
| Scripts disabled by local policy | If permitted by your organization, use the process-scoped command below. It does not change the persistent policy. |
| Python not found / winget missing | Install standard 64-bit Python 3.11 from python.org, reopen PowerShell and rerun. Or supply -PythonExe 'C:\Path With Spaces\python.exe'. |
| No matching dependency wheel / wrong architecture | Use compatible 64-bit Python. On Windows 11 ARM, x64 Python is an available emulation route. Use a new work folder when changing Python architecture or version. |
| Existing virtual environment differs / long or network path | Choose a fresh, short local folder with -WorkDir 'C:\SwarmLab-Team1'. Existing files are preserved. |
| 401 / 403 during login | Check key expiry, tenant and permissions with the facilitator, then rerun without -Resume to validate the corrected key. |
| TLS / proxy / VPN failure | Use the VPN/proxy configuration supplied by IT. For an IT-provided CA bundle, add -CertificatePath 'C:\Certificates\corporate-ca.pem'. Certificate checks remain enabled. |
| localhost:8765 busy | Stop the earlier lab server with Ctrl+C. The script does not kill other applications or choose another port. |
| Sample incomplete or no final response | Inspect state\smoke-events.json and the reported error with the facilitator. Partial progress is not a pass. Agent requests are not automatically replayed. |
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File .\Setup-Swarm-Lab.ps1 -InstallPythonThe script checks both available localhost address families, adds localhost to its process proxy exclusions, and leaves the key with the local ADK/server. It does not place the API key in either browser page.
The launcher discovers your coordinator’s agent ID, Live environment ID and tenant routing metadata. It generates the official widget configuration with woAPI: "v2completions" and the API-backed chat. There is no manual ID substitution or embed-snippet download in this route.
The lab page uses an iframe to mount the chat; the local server provides the page and API-backed execution. The script serves it at the same localhost:8765 address on Windows and Mac. The static guide you are reading contains the setup script, not a running chat server.
The official widget requires the tenant’s configured embed security. If Security is on, the facilitator must provide the corresponding token integration; this launcher does not build that service. The authenticated API-backed lab chat remains a separate local integration.
For a hosted website beyond this local lab, follow IBM’s embedded-chat documentation and provide the required authenticated backend. The local launcher is not a public hosting deployment.
The table links the original source. The launcher imports generated copies with a unique prefix; find your actual YAMLs in generated\agents under your work folder.
| Agent YAML | Job | Tool |
|---|---|---|
crm_context_agent.yaml | Account tier, ARR, health and CSM | lookup_customer_crm |
product_entitlement_agent.yaml | Quota, usage and throttling trigger | inspect_product_entitlements |
knowledge_solution_agent.yaml | Relevant policies and runbooks | query_knowledge_base |
billing_action_agent.yaml | Sample quota burst and fee waiver | apply_billing_adjustment |
technical_remediation_agent.yaml | Sample gateway reset and error rate | execute_technical_remediation |
escalation_management_agent.yaml | Sample ticket status and CSM update | update_and_escalate_ticket |
The coordinator has no business tool of its own. Its YAML names the six collaborators and opts into parallel coordination:
name: customer_resolution_triage_coordinator
kind: native
style: react_intrinsic
coordination: parallel
collaborators:
- crm_context_agent
- product_entitlement_agent
- knowledge_solution_agent
- billing_action_agent
- technical_remediation_agent
- escalation_management_agent
tools: []Excerpt only. Import the complete downloaded coordinator YAML, including its instructions, description, model, and welcome content.
They use the same parallel-coordinator pattern. The earlier PDF’s main exercises are PR review and vacation planning; this walkthrough uses Customer Resolution from the current hosted demo. The reference YAMLs and tools are original downloads. The unified launcher generates isolated names, selects the configured model, and adds a six-task boundary for reproducible execution.
Check that the imported coordinator still has coordination: parallel, the SDK is compatible, and the target instance has the preview feature enabled. The public sequential-collaborator documentation does not describe this preview. Use the hosted preview guide for the feature-specific instructions.
In the local lab page, select API-backed lab chat to test the authenticated local-server route. Confirm the Live deployment and tenant embed-security configuration with the facilitator. Both modes completed the sample on 27 October 2026; the earlier widget failure cause remains unconfirmed. A loaded page is not a completed agent run.
Use Customer-Care-Swarm-Lab.html for a single file containing the images and GIFs. For the editable package, extract the ZIP and keep index.html, assets/, sources/, and downloads/ together. The hosted execution link opens the shared demo page. No local server is needed to read the guide.
Use these answers for the lab discussion—from what actually overlaps to how tasks share results, retry, and finish.
Checked against the downloaded Customer Resolution YAMLs, the hosted preview guide, and the parallel runtime source on 26 October 2026. Limits below are preview defaults, not a measurement of this tenant’s active configuration.
The specialist task invocations: CRM context, product entitlements, knowledge policy, billing adjustments, technical remediation, and escalation management. Each specialist has its own instructions and tool. Its model calls and tool execution can overlap with those of other specialists in the same wave.
The coordinator first creates the plan, then the runtime dispatches specialists. After their results are collected, the coordinator writes the final answer. Planning and final synthesis are separate stages around the parallel work.
All six are independent in the supplied instructions, but the preview default is five concurrent specialist tasks per run. With that setting, five can run in one wave and the remaining task in a later wave. A tenant with a different limit can group them differently.
The reviewed implementation waits for all branches in the current wave before scheduling the next one. It does not refill a freed slot immediately when the fastest specialist finishes. “Six tasks completed” confirms completion count; it does not establish six simultaneous executions.
submit_plan with task assignments and dependencies.That is the source-level path plan → dispatch → specialist × N → barrier → dispatch or synthesis. Shared run state is updated at the join, rather than each specialist freely mutating it while peers run.
It is multiple agent invocations and model calls. The coordinator uses its configured model for planning and synthesis. Each native specialist runs with its own agent configuration and may make several model/tool turns.
The original downloaded YAMLs all select groq/openai/gpt-oss-120b; the unified launcher selects watsonx-orchestrate/frontier by default. Sharing a model identifier does not make them one invocation, and distinct models are not required for concurrency. Model availability, provider capacity, and rate limits still affect elapsed time.
Agent parallelism schedules several specialist tasks, each with its own role, instructions, and reasoning/tool loop. Tool parallelism concerns multiple tool calls inside one agent’s execution and is controlled separately.
This sample gives each specialist one business tool. Setting coordination: parallel on the coordinator does not make every tool call inside each specialist simultaneous; the specialist still follows its own execution flow.
| Plan field | Meaning | Customer-support example |
|---|---|---|
produces | Names an output artifact. | Product task produces entitlement_report. |
requires | Names upstream output keys needed as input. The runtime links the producer and injects available matching content into the consumer’s task. | Billing requires entitlement_report. |
depends_on | Lists task IDs for ordering. It does not itself select data to inject. | Billing waits for task t2. |
Use exact matching output keys and put producers before consumers in the submitted plan. These are fields of the runtime plan, not extra top-level agent YAML settings.
The supplied instructions do not enforce that order. They explicitly request requires: [] for all six tasks. The demo’s “multi-wave” label and narrative do not create a dependency. An extra wave may simply be caused by the concurrency limit.
If billing must use the quota result, change the planning instructions to have the product task produce an entitlement artifact and the billing task require it. Then inspect the emitted plan and execution; a prose description alone is not proof that the required ordering happened.
This illustrative submit_plan payload makes billing consume the entitlement result. It explains the contract; it is not the downloaded sample’s plan and should not be pasted as agent YAML.
{
"tasks": [
{
"id": "t2",
"agent_id": "product_entitlement_agent",
"display_text": "Check Acme quota",
"execution_text": "Inspect entitlements for CUST-ENTERPRISE-8821.",
"produces": ["entitlement_report"],
"requires": []
},
{
"id": "t4",
"agent_id": "billing_action_agent",
"display_text": "Review Acme relief",
"execution_text": "Use the entitlement report to determine eligible relief for CUST-ENTERPRISE-8821.",
"produces": ["billing_result"],
"requires": ["entitlement_report"],
"depends_on": ["t2"]
}
]
}The explicit depends_on repeats the ordering that requires implies here. Other independent tasks can still run alongside the quota check. An ordering dependency does not validate the business result or grant approval for an action; the consuming specialist/tool must check that its required evidence is present and acceptable.
They do not share a live conversation or see peers’ in-progress reasoning. Each branch gets a snapshot of previously collected artifacts when its wave starts. Required outputs are inserted into the specialist’s task message; new outputs are merged at the wave boundary.
The runtime also supplies coordination tools such as check_parallel_results, publish_artifact, and wait_for_artifacts. In the reviewed implementation, wait_for_artifacts reads available snapshot data; it does not suspend a branch until a same-wave peer publishes. Use a dependency and a later wave when fresh peer output is required.
A named artifact is content associated with a key. The runtime can store the specialist’s final text under its declared produces key; that name alone does not turn the result into a validated, typed business object.
In the general parallel pattern, a specialist can request follow-on work through post_follow_on_task. The unified launcher’s generated lab instructions explicitly prohibit follow-on tasks to keep this demonstration to the six assigned tasks. Those requests are collected and considered for a later dispatch, subject to admission rules and configured budgets. Posting a task is not proof that it has been admitted or executed.
The current preview does not have a coordinator review-and-replan loop after the specialists finish. The coordinator’s last stage synthesizes their results. This is distinct from a specialist requesting additional work while it runs.
In the reviewed runtime, an invocation error can requeue that task for a later wave, with up to two retries after the initial attempt. Exhausted attempts mark the task failed. An engine-level failure can terminate the run; ordinary specialist failures can still lead to synthesis with partial results.
The synthesis prompt includes task status and asks the model to acknowledge gaps. If final synthesis fails or returns no content, the runtime can return a plain-text fallback of available specialist results.
A tool returning a normal response that says “not eligible” or “operation failed” is a business result, not necessarily an invocation error that triggers a scheduler retry. Check both task status and the reported business outcome. Retries do not provide rollback or exactly-once execution for external actions; real integrations need their own idempotency controls.
| Setting | Published preview default |
|---|---|
| Concurrent specialist tasks | 5 per run |
| Tasks in a run | 20 |
| Planning timeout | 120 seconds |
| Specialist task timeout | 120 seconds |
| Final synthesis timeout | 60 seconds |
These are stage budgets, not a promise that the whole run finishes in 120 seconds. Waves, retries, model latency, and upstream limits affect the total. The facilitator must confirm tenant-specific settings; changing a YAML or the browser page does not change server concurrency limits.
The response stream includes thread.parallel.event envelopes. The parallel_event payload identifies events such as parallel.agent.started, parallel.agent.completed, and parallel.run.state. A started event carries the task and wave; a completion event can include task_state and a short result summary.
Inspect task_state: an invocation finishing may mean success, failure, or a retry being queued. Progress delivery is best-effort. Use thread.message.completed for the final answer, and read its task outcomes rather than treating the existence of a final message as proof that every action succeeded.
For this lab’s embedded chat, point at the Live coordinator and keep woAPI: "v2completions", as in step 8.
No. It helps when substantial work is independent. A useful approximation is:
Total time ≈ planning
+ sum of the slowest specialist duration in each wave
+ final synthesis
+ orchestration / network overheadDependencies, retries, and provider throttling can reduce the benefit. Multiple specialist calls plus planning and synthesis also consume model usage; shorter wall-clock time does not imply lower token cost. The recorded GIF is a demonstration, not a controlled benchmark.
The hosted preview guide says an active plan cannot stop to ask for clarification, and an in-progress run is not resumed after a service restart. Give every task the needed customer/ticket identifiers and instruct specialists to report missing information instead of waiting for the user.
The implementation records run, task, and artifact data, but stored data alone is not a crash-resume guarantee. For this fixture-only lab, you can submit the sample again after a failed run. With real external actions, first reconcile what completed before rerunning.
No. The coordinator must retain coordination: parallel, and the target runtime must have the preview enabled. The source gate is ORCHESTRATION_PARALLEL_ENABLED; participants use the facilitator’s enabled instance. A compatible ADK must preserve the field during import.
The general coordinator supports a direct_answer path for simple requests. This demo’s instructions specifically demand submit_plan and six tasks. If it answers immediately without specialist progress, inspect the imported configuration and generated plan. The embed API setting selects the chat API; it does not enable the server feature.
In the bundled Customer Resolution source, all six Python tools return fixed sample JSON. The +1M API calls, $1,500 waiver, cleared 429 errors, and resolved ticket are fixture results. These functions do not call the billing system, gateway, CRM, or notification service.
To build a real integration, replace those functions with connected tools and define the data dependencies, permissions, business checks, and repeat-call behavior those actions require. Keep independent lookups parallel; make actions that need verified context depend on that context.
The participant-facing source of preview behavior is the hosted preview guide. The original agent YAMLs and tools are linked in What you imported; generated lab copies are in your local generated folder.
For readers with repository access, the source review used agent-runtime@f3e13c0b:
Source inspection explains the reviewed implementation; it does not identify the exact runtime build serving a tenant. The successful six-task recordings in this guide establish the demonstrated happy path, not every failure or recovery case discussed here.