Official agent skill

Wxo Builder

by IBM in IBM/ibm-watsonx-orchestrate-adk

A skill your agent uses when building, testing, debugging, or publishing IBM watsonx Orchestrate agents, tools, flows, connections, knowledge bases, or custom models with the orchestrate CLI or ADK…

OfficialMITAuto-check: notesKnowledge Management

Install Wxo Builder

skills CLI
$ npx skills add IBM/ibm-watsonx-orchestrate-adk --skill wxo-builder -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install IBM/ibm-watsonx-orchestrate-adk wxo-builder --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/IBM/ibm-watsonx-orchestrate-adk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/wxo-builder .claude/skills/wxo-builder && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
wxo-builder
GitHub stars
178
Token cost
~6.8k tokens
SKILL.md length
2,027 words
Files
8 (incl. references)
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when building, testing, debugging, or publishing IBM watsonx Orchestrate agents, tools, flows, connections, knowledge bases, or custom models with the orchestrate CLI or ADK…

  • Works in 12 steps: Mental Model → Setup & Environment → Canonical Lifecycle → …
  • Publishing IBM watsonx Orchestrate agents
  • SKILL.md covers 1. Mental Model, 2. Setup & Environment, 3. Canonical Lifecycle and 4. Python Tools (@tool), plus 10 more sections
  • Calls python, pip and node; needs IBM_CLOUD_API_KEY

What it does

Wxo Builder is an agent skill from IBM/ibm-watsonx-orchestrate-adk, published by the product's own GitHub organization. Use when building, testing, debugging, or publishing IBM watsonx Orchestrate agents, tools, flows, connections, knowledge bases, or custom models with the orchestrate CLI or ADK, or when a project contains agent YAML, @tool, or @flow files.

Its SKILL.md is about 6.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including reference files (for example `references/agents-tools-schemas.md`, `references/cli-reference.md` and `references/connections-models-kb.md`).

It sits in Knowledge Management, covering Knowledge bases. It works with Python. The repository describes itself as: The command line client for watsonx Orchestrate's agent builder experience. The licence is MIT.

When your agent uses it

  • Publishing IBM watsonx Orchestrate agents
  • Knowledge bases
  • Custom models with the orchestrate CLI
  • A project contains agent YAML

Example prompts

  • “/wxo-builder”

Requirements

  • Python 3
  • Docker
  • A credential in IBM_CLOUD_API_KEY

Workflow steps

12 steps, taken from the step headings in SKILL.md.

  1. Mental Model
  2. Setup & Environment
  3. Canonical Lifecycle
  4. Python Tools (@tool)
  5. Flows (@flow)
  6. Agent YAML
  7. Import (dependency-ordered)
  8. Test Gate (verify before handover)
  9. Connections, Models, Knowledge Bases
  10. Debugging Playbook
  11. Publishing to Production
  12. Runtime REST API

What it can do on your machine

Read from SKILL.md and the folder at commit 15d588c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • pip
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • developer.watson-orchestrate.ibm.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • IBM_CLOUD_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wxo Builder loads about 6.8k tokens when it runs, and up to ~36k if it reads all its reference files. Until then it costs about 65 tokens; SKILL.md has 2,027 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~65
When it runs · the whole SKILL.md, loaded when a task matches
~6.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~36k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:50
    8 cores / 25 GB disk, entitlement key in .env)
  • NoteMentions a .env fileSKILL.md:51
    orchestrate server start -e .env --accept-terms-and-conditions && orchestrate env activate local
  • NoteMentions a .env fileSKILL.md:53
    # orchestrate server start -d -e .env --accept-terms-and-conditions
  • NoteMentions a .env fileSKILL.md:59
    > Keep secrets in a gitignored `.env`; pass via `"$VAR"` to stay out of shell history.
  • NoteMentions a .env fileSKILL.md:88
    └── .env            secrets (gitignored)
  • NoteMentions a .env fileSKILL.md:383
    th `-d`: `orchestrate server start -d -e .env --accept-terms-and-conditions` |

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from IBM/ibm-watsonx-orchestrate-adk at commit 15d588c, republished under its MIT licence (© IBM). 2,027 words, ~6,825 tokens.

Download SKILL.mdSave it as .claude/skills/wxo-builder/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
wxo-builder
description
Use when building, testing, debugging, or publishing IBM watsonx Orchestrate agents, tools, flows, connections, knowledge bases, or custom models with the `orchestrate` CLI or ADK, or when a project contains agent YAML, `@tool`, or `@flow` files.
tags
watsonx-orchestrate, wxo, agent-development, workflow-automation, sop-to-code

watsonx Orchestrate (wxO): Build · Test · Debug · Publish

Last verified: ADK v2.15.x (Aug 2026). Version-specific items below (server extras, premier-model default, default LLM, UI render flags) are point-in-time; re-verify if orchestrate --version differs. Golden rule: the ADK moves fast. Always verify uncertain flags with orchestrate <group> --help; never rely on memory. Upgrade: pip install -U ibm-watsonx-orchestrate (Python ≥3.11, <3.15). Pre-flight: activate venv (source venv/bin/activate) · always import + test after code generation.

1. Mental Model

ResourceWhat it isDefined as
AgentLLM-driven assistant. Kinds: native, external (A2A), assistantYAML kind: native
ToolCallable capabilityPython @tool, OpenAPI spec, @flow, or Langflow
FlowMulti-step workflow exposed as a toolPython @flow (build_<name>(aflow: Flow) -> Flow)
ToolkitBundle of tools from an MCP serverorchestrate toolkits add -k mcp …
ConnectionStored credentials for an external serviceYAML kind: connection + connections CLI
ModelLLM available to agentsYAML kind: model via the AI Gateway
Knowledge baseDocuments for RAG/groundingYAML kind: knowledge_base

2. Setup & Environment

bash
source venv/bin/activate && orchestrate --version

Finding the venv (multi-project workspaces): check ./venv/ first (project root), then ../venv/ (repo root, shared across projects). In scripts, resolve paths relative to the script's directory for portability.

orchestrate targets the active environment (orchestrate env list). Confirm before importing.

bash
# SaaS — use API service URL (contains /instances/<id>), not the console URL
orchestrate env add -n my-saas -u https://api.<region>.watson-orchestrate.cloud.ibm.com/instances/<ID>
orchestrate env activate my-saas --api-key "$IBM_CLOUD_API_KEY"   # auth type auto-inferred (ibm_iam)
orchestrate agents list   # confirm connected
# Auth type override: --type [ibm_iam|mcsp|mcsp_v2|cpd]

# Local Developer Edition (Docker, 16 GB RAM / 8 cores / 25 GB disk, entitlement key in .env)
orchestrate server start -e .env --accept-terms-and-conditions && orchestrate env activate local
# ⚠ Document processing nodes (docproc/docext/docclassifier) require the WDU service — add -d:
# orchestrate server start -d -e .env --accept-terms-and-conditions
# On-prem CPD setup + all env/server flags (--with-voice/-langflow/-ai-builder, extras) → references/cli-reference.md §1, §8

orchestrate env list · orchestrate env activate <name> · orchestrate env remove --name <name>

Keep secrets in a gitignored .env; pass via "$VAR" to stay out of shell history.

3. Canonical Lifecycle

write tools + connections/models/KB → write agent YAML
  → scripts/import-all.sh (connections → models → KB → tools/toolkits → agent)
  → test gate (§7) → debug + re-import → deploy to production (§11)

**Default build assumptions (unless the user says otherwise):**
- If the request says to use a knowledge base, create an actual wxO knowledge base spec plus source documents, import it, wait/check until it is ready, and reference it from the agent YAML with `knowledge_base:`. Do **not** substitute a plain `.txt` file plus custom file-reading tool for a requested knowledge base.
- If the user names a specific model/LLM, use that exact model. If the user does **not** specify one, first inspect the workspace for an existing model convention in nearby agent YAML files or project docs; if none exists, use the skill's documented default LLM. Never pick an arbitrary alternative model when the request is silent.

Project scaffold:

my_agent/
├── agents/         *.yaml
├── tools/          *.py  (one @flow per file; @tool files self-contained)
├── connections/    *.yaml
├── knowledge_base/ *.yaml + source docs
├── models/         *.yaml  (custom models only)
├── tests/
│   └── test_<flow_name>.py   ← one test file per @flow (ONLY create when the project contains a @flow)
│   └── TEST_REPORT.md
├── generated/         ← auto-created by test script; stores compiled flow JSON specs
├── scripts/
│   └── import-all.sh   dependency-ordered imports
│   └── delete-all.sh
└── .env            secrets (gitignored)

tests/test_<flow_name>.py (one per flow):

python
# tests/test_<flow_name>.py
import asyncio
from pathlib import Path
from tools.<flow_module> import build_<flow_name>   # adjust import to match your flow file

async def main():
    # compile_deploy ONCE — the CompiledFlow object is reusable across invocations
    fdef = await build_<flow_name>().compile_deploy()
    generated_folder = Path(__file__).resolve().parent.parent / "generated"
    generated_folder.mkdir(exist_ok=True)
    fdef.dump_spec(str(generated_folder / "<flow_name>.json"))   # saves compiled spec for inspection

    # For run_flow() implementation and why fdef.invoke()/fdef.flow_run() don't work,
    # see references/testing-debugging.md §4
    result = await fdef.flow_run({"<input_field>": "<test_value>"}, debug=True)
    print("Output:", result.output)
    assert result.output.get("<expected_key>") == "<expected_value>", result.output

if __name__ == "__main__":
    asyncio.run(main())

Rules:

  • Always create one tests/test_<flow_name>.py per @flow — required deliverable, not optional. Skip only for tool-only or agent-only projects (no @flow present). ⚠ Exception: flows that use docproc/docext/docclassifier nodes require a live WDU service — skip those flows only.
  • Call compile_deploy() once at the top of main(); calling it again raises ValueError: Flow has already been compiled.
  • Use the run_flow() helper from references/testing-debugging.md §4; fdef.invoke() and fdef.flow_run() don't work reliably (see reference for why).
  • ⚠ Platform pre-processes inputs: the wxO LLM layer silently normalises invalid inputs. Assert against business-state outcomes (mock data that always returns fixed status), not input-validation rejections.
  • Run with python -m pytest tests/ -v (set PYTHONPATH=. first).
  • The generated/ folder is gitignored.

4. Python Tools (@tool)

python
from ibm_watsonx_orchestrate.agent_builder.tools import tool, ToolPermission
from pydantic import BaseModel

class WeatherInfo(BaseModel):
    city: str
    temp_c: float

@tool(permission=ToolPermission.READ_ONLY)
def get_weather(city: str) -> WeatherInfo:
    """Get current weather for a city.

    Args:
        city (str): Name of the city.
    Returns:
        WeatherInfo: Temperature in Celsius for the city.
    """
    return WeatherInfo(city=city, temp_c=21.1)

Must-haves: @tool on every callable · Google-style docstring (summary → Args: → Returns:, no blank line between them) · type hints on all params and return · self-contained file (no cross-file local imports) · Pydantic models as explicit classes · never add ibm-watsonx-orchestrate to requirements.txt. ToolPermission valid values: READ_ONLY · WRITE_ONLY · READ_WRITE · ADMIN. WRITE does not exist; use WRITE_ONLY for any tool that mutates state. Docstring/type-hint import warning (Pydantic/dict/list returns): known ADK false positive; imports and runs fine. A real problem only if (1) a blank line sits between Args: and Returns:, or (2) a param lacks a type hint. Full note → references/agents-tools-schemas.md. Credentials — never pass as parameters; declare in expected_credentials and fetch at runtime:

python
from ibm_watsonx_orchestrate.agent_builder.connections import ConnectionType, ExpectedCredentials
from ibm_watsonx_orchestrate.run import connections

APP_ID = "my_api"

@tool(permission=ToolPermission.READ_ONLY,
      expected_credentials=[ExpectedCredentials(app_id=APP_ID, type=ConnectionType.API_KEY_AUTH)])
def call_api(query: str) -> dict:
    """Call the API.

    Args:
        query (str): Search text.
    Returns:
        dict: API response.
    """
    conn = connections.api_key_auth(APP_ID)   # .api_key · .token · .username/.password · .access_token
    headers = {"Authorization": f"Bearer {conn.api_key}"}
bash
orchestrate tools import -k python -f tools/api_tool.py --app-id my_api

Full decorator signature, ConnectionType values, and Pydantic patterns → references/agents-tools-schemas.md §2.

5. Flows (@flow)

Flow vs. Agent: use @flow for deterministic sequences (BPMN/SOP), agent for LLM-decided order. If you can draw a flowchart → @flow.

SignalUse @flowUse agent
Step sequenceFixed, deterministicDynamic (LLM decides)
SourceBPMN diagram / SOPOpen-ended conversation
DataStructured, typed (Pydantic)Unstructured / natural language
python
from pydantic import BaseModel
from ibm_watsonx_orchestrate.flow_builder.flows import Flow, flow, START, END

class MyInput(BaseModel):
    city: str

@flow(name="weather_flow", display_name="Weather Flow",
      description="Fetch and summarise weather", input_schema=MyInput)
def build_weather_flow(aflow: Flow) -> Flow:
    fetch = aflow.tool(get_weather)
    summarize = aflow.prompt(
        name="summarize",
        system_prompt="You format weather data for users.",   # REQUIRED
        user_prompt=["Summarize: {weather}"],
        llm="groq/openai/gpt-oss-120b",
    )
    aflow.sequence(START, fetch, summarize, END)
    return aflow

Must-haves: signature exactly def build_<name>(aflow: Flow) -> Flow: · one flow per file · system_prompt required on aflow.prompt(...) · map_input/map_output single-line Python only · wire with aflow.sequence(START, …, END) or aflow.edge(a, b).

@flow decorator options: name, display_name, description, input_schema, output_schema, schedulable, suppress_agent_summarization (surface the last node's output verbatim; full note in §10 and references/agents-tools-schemas.md §3).

Default LLM: groq/openai/gpt-oss-120b · Node builders: aflow.tool · aflow.prompt · aflow.agent · aflow.script · aflow.foreach · aflow.conditions · aflow.parallel_conditions · aflow.docext · aflow.docclassifier · aflow.docproc · aflow.userflow

Programmatic test (run after every flow change): await build_<flow_name>().compile_deploy() then .invoke(<input_dict>, debug=True). Verify the response is not {}, check every mapped output field, and confirm no An error has occurred in the agent chat response.

Full flow node API → references/agents-tools-schemas.md §3–4.

6. Agent YAML

yaml
spec_version: v1                # REQUIRED
kind: native                    # REQUIRED
name: weather_agent             # snake_case, no spaces
description: Returns weather information for a location.   # REQUIRED — drives routing
instructions: |
  You are a helpful weather assistant. When the user asks about weather,
  call get_weather with the city name and present the result clearly.
llm: groq/openai/gpt-oss-120b
style: react_core
tools:
  - get_weather
starter_prompts:                # include 2–4; set `is_default_prompts: false`, each prompt needs `subtitle` & `state: active`
  is_default_prompts: false
  prompts:
    - id: default0
      title: Check weather
      subtitle: ''
      prompt: "What's the weather in Boston?"
      state: active
welcome_content:
  welcome_message: Welcome to the Weather Agent
  description: Ask me about the weather in any city.
  is_default_message: false     # REQUIRED for custom welcome_content to render
# Production extras:
# compaction_settings: {context_compaction_enabled: true, context_compaction_threshold: 20000, compaction_sliding_window: 10}
# llm_config: {temperature: 0, max_tokens: 2048}
# is_schedulable: true   # ⚠ must be enabled at tenant level first

Key constraints: spec_version: v1 + kind: native mandatory · resources listed by name (imported first) · toolkits only for experimental_customer_care · snake_case name.

Multi-agent (collaborators):

yaml
style: react_core        # experimental_customer_care does NOT support collaborators
collaborators:           # import/deploy collaborators FIRST
  - dr_wilson
  - dr_cuddy

wxO auto-generates chat_with_collaborator_<name> per collaborator. Routing driven by collaborator's description, so make it distinct. Agent cannot list itself.

Full schema (external/assistant kinds, guidelines, structured_output, chat_with_docs, memory_enabled) → references/agents-tools-schemas.md §1.

7. Import (dependency-ordered)

Import rule (Follow this priority order):

  1. import-all.sh exists → run chmod +x import-all.sh && ./import-all.sh.
  2. Missing → create it first (connections → models → KB → tools → agent), then run it immediately via execute_command.
  3. MCP import tools (import_tool, import_agent, …) → last resort only, when running a script isn't possible. ⚠️ If you just wrote import-all.sh this turn, run it next; do NOT switch to MCP import tools. ⚠️ Keep in sync: any time you add/rename/remove a resource file, update both import-all.sh and delete-all.sh in the same turn before running. Never import a single file manually outside the script.
bash
# import-all.sh template
source venv/bin/activate
orchestrate connections import   -f connections/my_api.yaml
orchestrate models import        -f models/granite.yaml --app-id watsonx_credentials
orchestrate knowledge-bases import -f knowledge_base/kb.yaml
orchestrate tools import -k python -f tools/weather.py
orchestrate tools import -k python -f tools/api_tool.py --app-id my_api
orchestrate tools import -k flow   -f tools/weather_flow.py
orchestrate agents import        -f agents/weather_agent.yaml

-k values: python|openapi|flow|langflow. Use --safe to prompt before overwriting. MCP toolkit: orchestrate toolkits add -k mcp -n <name> --description "…" --package-root ./mcp_server --language node --command '["node","dist/index.js"]' --tools "*" Skills: orchestrate skills import -f SKILL.md --upsert · orchestrate skills import -d skills/ --recursive --upsert · orchestrate skills remove --skill-name <name> (uses --skill-name, not --name)

For cleanup: use orchestrate <resource> remove in reverse import order (agents → tools → kb → models → connections). Always append || true for idempotency:

bash
orchestrate agents remove -n weather_agent --kind native || true
orchestrate tools remove -n weather_flow || true
orchestrate knowledge-bases remove -n my_kb || true
orchestrate models remove -n my_model || true
orchestrate connections remove -a my_api || true

8. Test Gate (verify before handover)

Deployed ≠ verified. Never declare "done" until tested, or the human explicitly declines.

After ./import-all.sh:

Step 1 — Unit-test flows: create one tests/test_<flow_name>.py per flow (stub the SDK, test tool logic, Pydantic schemas, and flow wiring). Execute pytest now — do not proceed to Step 2 until all tests pass:

bash
source venv/bin/activate && PYTHONPATH=. python -m pytest tests/ -v

If it fails: fix flow → ./import-all.sh → re-run until all pass. Step 2 is blocked until this is green.

Step 2 — Agent smoke-test: Ask:

"<agent> is deployed to <env>. Want me to smoke-test it? I'll run 1 single-turn + 1 multi-turn — read-only prompts." — Yes / No

Execute (preferred): watsonx-orchestrate-adk:chat_with_agent; Turn 1 with include_reasoning=True, save thread_id, Turn 2 with same thread_id. CLI fallback: orchestrate chat ask -n <agent> "<prompt>" -r (⚠ can hang on SaaS; use runtime REST API from references/runtime-api.md instead).

Pass criteria: no error · correct output · expected tool fired (check reasoning) · turn 2 uses context from turn 1.

Fix loop (any failed test): read root cause from reasoning → fix .py/.yaml → update import-all.sh/delete-all.sh if files changed → ./import-all.sh → re-run with chat_with_agent. Repeat until all pass.

Emit TEST_REPORT.md: "deployed and tested (2/2)" · "deployed; test N failed — <reason>" · "deployed; not tested at your request."

After testing, always tell the user how to test manually:

  • UI — open the agent in the wxO web UI, use starter prompts or type directly.
  • CLI — orchestrate chat ask -n <agent_name> "<prompt>" -r (-r = reasoning trace; ⚠ can hang on SaaS — use chat_with_agent MCP tool instead).
  • Bob — "Chat with <agent_name>: <prompt>" — Bob calls chat_with_agent with include_reasoning=True.

Provide 3–5 sample prompts covering: happy path · edge/unknown input · multi-turn. For each, state the expected output so the user knows what a pass looks like.

Full gate procedure + report template + pre-publish checklist → references/testing-debugging.md.

9. Connections, Models, Knowledge Bases

Connection YAML:

yaml
spec_version: v1
kind: connection       # singular — NOT 'connections'
app_id: my_api
environments:
  draft:
    security_scheme: api_key_auth   # NOT 'kind:' — must be 'security_scheme:'
    type: team                      # team (shared) | member (per-user)
    server_url: https://api.example.com

security_scheme values: basic_auth · bearer_token · api_key_auth · oauth2 · key_value_creds. OAuth2: use oauth2_auth_code, not authorization_code. YAML defines structure only; never hardcode secrets.

bash
orchestrate connections import -f connections/my_api.yaml
orchestrate connections configure -a my_api --kind api_key --type team --env draft
orchestrate connections set-credentials -a my_api --env draft --api-key "$MY_API_KEY"

Models: orchestrate models list to see available IDs. orchestrate models list --all to show all including disabled. Premier models disabled by default in 2.13+; check with orchestrate models config are-premier-models-enabled. Custom watsonx.ai model: create a watsonx_credentials key-value connection + kind: model YAML → orchestrate models import --app-id watsonx_credentials.

LLM selection rule: if the user specifies a model, use it. If not, inspect existing project agent YAML files / docs for the established model first; only fall back to the skill default when no project convention exists.

Knowledge bases: built-in Milvus is the default (no infra); external AstraDB / Milvus / Elasticsearch use provider blocks, anything else (Pinecone etc.) a custom @tool. If the request says to use a knowledge base, create the KB resource itself (kind: knowledge_base) and attach source documents to it; a local .txt file read by a tool is not an acceptable substitute for a requested KB. Decision tree + provider schemas → references/connections-models-kb.md §3.

bash
orchestrate knowledge-bases import -f kb.yaml
orchestrate knowledge-bases status -n product_docs   # watch indexing

Reference in agent YAML: knowledge_base: [product_docs]

Full schemas → references/connections-models-kb.md.

Show full SKILL.md (728 more words)Show less

10. Debugging Playbook

SymptomCause → Fix
agents import required field errorMissing spec_version/kind/name/description, or dependency not imported yet
Starter prompts not showing in UIMissing is_default_prompts: false at starter_prompts level, or missing subtitle: '' / state: active on each prompt entry, or missing is_default_message: false on welcome_content
Agent ignores a toolVague docstring; tool not named in instructions → improve both
Docstring/type-hint warnings on tools importKnown false positive on Pydantic/dict/list return types; tool imports and runs fine. Real problem only per the two exceptions in §4.
"name cannot contain spaces"Use snake_case
ModuleNotFoundError at runtimeAdd to requirements.txt, re-import with -r. Never add ibm-watsonx-orchestrate
401/403 on tool callWrong app_id or credentials not set → orchestrate connections list → re-run set-credentials
Works locally, missing in prodWrong active env → orchestrate env list → activate → re-import
No agents with the name 'X'Used display name; get snake_case from orchestrate agents list -v
Flow won't compileCheck signature, system_prompt present, single-line expressions
conditions() branch always takes the default pathWrong expression path: use flow.<node_name>.output.<field>, not flow.steps.<node_name>.output.<field> (the steps. prefix is invalid at runtime)
aflow.tool(fn, map_input="...") raises unexpected keyword argumentmap_input/map_output are node methods, not aflow.tool() kwargs — call node.map_input(...) after node = aflow.tool(fn)
Tool receives /field_name instead of field_name (slash-prefixed keys)Automatic inter-tool mapping uses JSON Pointer notation — source all shared fields explicitly via node.map_input("f", "flow.input.f") instead
Final flow output is {} despite aflow.map_output() callsLikely cause: output mapped from a conditional branch without a consolidation node. Both paths must wire to a common node before END — create a script consolidation node, wire both branches to it, then map from consolidation node. See conditional + output mapping pattern below.
Raw flow output dict shown to user; agent formatting instructions ignoredFlow contains agent steps → platform auto-sets suppress_agent_summarization=True, bypassing the calling agent's LLM. Fix: set suppress_agent_summarization=False so the flow result passes through the agent LLM for formatting.
Agent hallucinating / re-narrating instead of presenting the flow resultAgent LLM is active but told to "reformat/summarise". Fix: set suppress_agent_summarization=True to stream the last node's output verbatim and skip the agent LLM entirely.
docproc/docext/docclassifier node fails at runtime (Developer Edition)WDU service not started — restart with -d: orchestrate server start -d -e .env --accept-terms-and-conditions
Need reasoning traceorchestrate chat ask -n <agent> "…" -r (-r reasoning, -l logs)
Server issuesorchestrate server logs; orchestrate server reset to wipe state

Export a deployed agent to edit locally: orchestrate agents export -n <name> --kind native -o agents/<name>.yaml --agent-only

Full failure-mode table + programmatic flow testing + observability/traces → references/testing-debugging.md.

11. Publishing to Production

No publish verb; publishing = activate target env + re-import.

bash
orchestrate env activate prod
./import-all.sh
orchestrate agents deploy   -n weather_agent
orchestrate agents undeploy -n weather_agent

One set of artifacts per project; only connection credentials and model provider_config differ per env.

Embedded web chat:

bash
orchestrate channels webchat embed --agent-name <agent> --env live

⚠ CRN gotcha (SaaS): webchat embed auto-fetch 403s; extract the CRN from the bearer token first. One-liner → references/cli-reference.md §10.

12. Runtime REST API

Consume a deployed agent from your backend. Base <service-url>/api/v1 · bearer auth (orchestrate env get-token); never expose the token to a browser.

⚠ SaaS path gotcha: use /v1/orchestrate/runs not /v1/runs; bare path returns 404.

Agent endpoints: /orchestrate/{agent_id}/chat/completions (OpenAI-compatible, reply at choices[0].message.content) · /orchestrate/runs (richer/async, reply at result.data.message.content[0].text, step_history has tool outputs; /runs/stream for SSE). Both return thread_id; send it back for multi-turn. chat/completions for portability, /runs for fidelity.

Full endpoint shapes, SSE sequence, model-only completions, embedding pattern, file-upload gotchas → references/runtime-api.md.

13. MCP Servers

Two servers are available to coding agents (Bob/Cursor): adk-docs (documentation search) and adk (live platform control). One-time .bob/mcp.json / .cursor/mcp.json host config → references/mcp-setup.md. Call MCP tools with fully qualified names: <ServerName>:<tool_name>.

ServerKey tools
adk-docssearch_ibm_watsonx_orchestrate_adk (broad) · query_docs_filesystem_… (read page by path, append .mdx)
adk (live platform)list/create_or_update/import/export/remove_agent · list/import/create/remove_tool · list/add/import/remove_toolkit · import/check_status/remove_knowledge_base · import/configure/set_credentials_connection · list/import/create_or_update_model · chat_with_agent (add thread_id for multi-turn; include_reasoning=True for trace)

14. References (load on demand)

FileContents
references/agents-tools-schemas.mdFull agent YAML schema (all kinds), @tool/@flow decorator signatures, all flow nodes (parallel, foreach, decisions, callbacks, masking, dynamic forms, docproc/KVP, docext, userflow, swarms)
references/connections-models-kb.mdConnection YAML + CLI lifecycle, watsonx.ai model setup, KB provider configs (AstraDB/Milvus/Elasticsearch)
references/examples.mdComplete worked examples: tool agent, KB agent, multi-agent chain, conditional flow, foreach, document extraction
references/cli-reference.mdFull orchestrate CLI (every group, command, flag), webchat CRN one-liner
references/mcp-setup.mdMCP host config (.bob/.cursor mcp.json), server + tool inventory
references/testing-debugging.mdPost-deploy gate + TEST_REPORT template, failure-mode table, programmatic flow testing, traces/observability, pre-publish checklist
references/runtime-api.mdRuntime REST API: base URL/auth, endpoint families, SSE streaming, multi-turn, model-only completions, SaaS gotchas
ADK docshttps://developer.watson-orchestrate.ibm.com
ADK exampleshttps://github.com/IBM/ibm-watsonx-orchestrate-adk → examples/

When a pattern isn't covered here, fetch a matching example from the public examples/ directory.

© IBM, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (references) in skills/wxo-builder of IBM/ibm-watsonx-orchestrate-adk.

  • SKILL.md
  • references/agents-tools-schemas.md
  • references/cli-reference.md
  • references/connections-models-kb.md
  • references/examples.md
  • references/mcp-setup.md
  • references/runtime-api.md
  • references/testing-debugging.md

Open the folder on GitHubat commit 15d588c

Compare with similar skills

Wxo Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Wxo Builder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wxo Builder this skillIBM/ibm-watsonx-orchestrate-adk178—~6.8kAutomated safety check: NotesMIT
Nexus MapperHaaaiawd/Nexus-skills1661 repos~2.5kAutomated safety check: NotesNone
Nexus QueryHaaaiawd/Nexus-skills166—~1.1kAutomated safety check: PassNone
Modeling Threats With Openctimukul975/Anthropic-Cybersecurity-Skills34k—~2.8kAutomated safety check: NotesApache-2.0
Telnyx Missions Pythonmajiayu000/claude-skill-registry6661 repos~5.1kAutomated safety check: PassMIT
LLM Wiki Knowledge GraphEgonex-AI/Understand-Anything86k1 repos~1.5kAutomated safety check: PassMIT

Similar skills

  • Nexus Mapper

    Haaaiawd/Nexus-skills

    Generate a persistent .nexus-map/ knowledge base that lets any AI session instantly understand a codebase's architecture, systems, dependencies, and change hotspots.

    166 GitHub starsUsed in 1 repo~2.5k tokens
    DevelopmentAuto-check: notes
  • Nexus Query

    Haaaiawd/Nexus-skills

    Precise, instant code structure queries for active development — answer 'who depends on this interface before I refactor it', 'how many modules break if I change this', 'what is the real impact…

    166 GitHub stars~1.1k tokensUpdated 6 mo ago
    DevelopmentAuto-check passed
  • Modeling Threats With Opencti

    mukul975/Anthropic-Cybersecurity-Skills

    Deploy OpenCTI (Filigran) via Docker Compose and use the pycti Python client to model threat actors, intrusion sets, campaigns, and indicators as a STIX 2.1 knowledge graph with relationships (uses…

    34k GitHub stars~2.8k tokensUpdated 1 mo ago
    Knowledge ManagementAuto-check: notes
  • Telnyx Missions Python

    majiayu000/claude-skill-registry

    Create and manage Telnyx Missions — automated workflows, tasks, and sub-resources for AI-driven telecom operations.

    666 GitHub starsUsed in 1 repo~5.1k tokens
    Knowledge ManagementAuto-check passed
  • LLM Wiki Knowledge Graph

    Egonex-AI/Understand-Anything

    Detects a Karpathy-pattern LLM wiki and builds an interactive knowledge graph with entities, implicit relationships and topic clusters.

    86k GitHub starsUsed in 1 repo~1.5k tokens
    Knowledge ManagementAuto-check passed
  • QwenPaw Setup Guide

    agentscope-ai/QwenPaw

    Answers questions about installing and configuring QwenPaw by locating and reading its local documentation first, with the official website as a fallback.

    35k GitHub stars~1.4k tokensUpdated yesterday
    Knowledge ManagementAuto-check passed

More from IBM/ibm-watsonx-orchestrate-adk

All 8 skills in this repo
  • Agentic Workflow Advisor

    IBM/ibm-watsonx-orchestrate-adk

    Official

    Analyzes IBM watsonx Orchestrate agentic workflow artefacts (JSON or Python @flow) and returns prioritised architecture recommendations grouped by impact.

    178 GitHub stars~10k tokensUpdated yesterday
    Auto-check passed
  • Telemetry Analyzer

    IBM/ibm-watsonx-orchestrate-adk

    Official

    A skill your agent uses when the user wants to analyze agent telemetry traces to find bugs and get fix recommendations — walks through exporting traces from a local or remote watsonx Orchestrate…

    178 GitHub stars~10k tokensUpdated yesterday
    Auto-check: notes
  • Customercare MCP Builder

    IBM/ibm-watsonx-orchestrate-adk

    Official

    Build MCP servers for customer care agents following Watson Orchestrate specifications.

    178 GitHub stars~5.3k tokensUpdated yesterday
    Auto-check passed
  • Agent Instructions Evaluator

    IBM/ibm-watsonx-orchestrate-adk

    Official

    Evaluate an agent instructions or agent definition for achievability and produce a structured, evidence-backed report artifact with per-dimension scores, findings, deterministic signals, and…

    178 GitHub stars~17k tokensUpdated yesterday
    Auto-check passed
  • Solution Architect

    IBM/ibm-watsonx-orchestrate-adk

    Official

    Expert guidance for creating high-level solution architecture documents from business requirements, use cases, or problem statements.

    178 GitHub stars~8.4k tokensUpdated yesterday
    Auto-check passed
  • Sop Builder

    IBM/ibm-watsonx-orchestrate-adk

    Official

    Expert guidance for building a Standard Operating Procedure (SOP) from a workflow diagram, Langflow JSON, n8n JSON, BPMN model or workflow description.

    178 GitHub stars~6.6k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Wxo Builder

What does Wxo Builder do?

A skill your agent uses when building, testing, debugging, or publishing IBM watsonx Orchestrate agents, tools, flows, connections, knowledge bases, or custom models with the orchestrate CLI or ADK…. Wxo Builder is an agent skill from IBM/ibm-watsonx-orchestrate-adk, published by the product's own GitHub organization. Use when building, testing, debugging, or publishing IBM watsonx Orchestrate agents, tools, flows, connections, knowledge bases, or custom models with the orchestrate CLI or ADK, or when a project contains agent YAML, @tool, or @flow files.

When should I use Wxo Builder?

Wxo Builder fits situations like: publishing IBM watsonx Orchestrate agents; knowledge bases; custom models with the orchestrate CLI; A project contains agent YAML.

How do I install Wxo Builder in Claude Code?

Run `npx skills add IBM/ibm-watsonx-orchestrate-adk --skill wxo-builder -a claude-code`. Or copy the skill folder (skills/wxo-builder in IBM/ibm-watsonx-orchestrate-adk) into .claude/skills/wxo-builder in your project. Claude Code loads it when a task matches its description.

How do I install Wxo Builder in Codex?

Run `npx skills add IBM/ibm-watsonx-orchestrate-adk --skill wxo-builder -a codex`. Or copy the skill folder (skills/wxo-builder in IBM/ibm-watsonx-orchestrate-adk) into .agents/skills/wxo-builder in your project. Codex loads it when a task matches its description.

Can I use Wxo Builder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add IBM/ibm-watsonx-orchestrate-adk --skill wxo-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wxo-builder, .gemini/skills/wxo-builder, .github/skills/wxo-builder and .opencode/skills/wxo-builder in your project.

What does Wxo Builder need to run?

Going by SKILL.md and its folder, Wxo Builder needs the command-line tools its instructions call (python, pip and node) and credentials named IBM_CLOUD_API_KEY. Our summary lists: Python 3; Docker; A credential in IBM_CLOUD_API_KEY.

Does Wxo Builder access the network?

SKILL.md names 1 domain. As links in the text: developer.watson-orchestrate.ibm.com. This is read from the text; nothing was executed.

Is Wxo Builder safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Wxo Builder use?

Wxo Builder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wxo Builder use?

About 6.8k tokens (SKILL.md is roughly 27k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 29k tokens, read only when the agent opens those files.

What are the alternatives to Wxo Builder?

Skills that share tags, products or a category with Wxo Builder: Nexus Mapper (Haaaiawd/Nexus-skills, 166 stars), Nexus Query (Haaaiawd/Nexus-skills, 166 stars), Modeling Threats With Opencti (mukul975/Anthropic-Cybersecurity-Skills, 34k stars) and Telnyx Missions Python (majiayu000/claude-skill-registry, 666 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wxo Builder?

IBM (a GitHub organization, an official publisher) maintains it in IBM/ibm-watsonx-orchestrate-adk, which has 178 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 7, 2026.

Source: IBM/ibm-watsonx-orchestrate-adk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.