<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Coordination | Giulia Solinas</title><link>https://giuliasolinas.github.io/tags/coordination/</link><atom:link href="https://giuliasolinas.github.io/tags/coordination/index.xml" rel="self" type="application/rss+xml"/><description>Coordination</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 16 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://giuliasolinas.github.io/media/icon_hu_982c5d63a71b2961.png</url><title>Coordination</title><link>https://giuliasolinas.github.io/tags/coordination/</link></image><item><title>Bringing all together: The key building blocks of watsonx Orchestrate</title><link>https://giuliasolinas.github.io/blog/wxorchestrate_iv/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/blog/wxorchestrate_iv/</guid><description>&lt;h1 id="from-code-to-collaboration-mastering-the-watsonx-orchestrate-agent-development-kit-adk"&gt;From Code to Collaboration: Mastering the watsonx Orchestrate Agent Development Kit (ADK)&lt;/h1&gt;
&lt;p&gt;This blog post summarizes the key concepts and hands-on learning from the watsonx Orchestrate Agent Development Kit (ADK) curriculum—covering the development lifecycle from tool creation to advanced agent collaboration, knowledge integration, and prompt optimization.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Throughout the past three blogs, we&amp;rsquo;ve explored the architectural foundations, best practices, and tooling that make watsonx Orchestrate a powerful platform for enterprise AI agents. Now, let&amp;rsquo;s add few more concepts and bring it all together.&lt;/p&gt;
&lt;p&gt;The IBM watsonx Orchestrate Agent Development Kit (ADK) is a powerful toolset for building, testing, and deploying robust AI agents tailored for enterprise workflows. This learning path moves beyond basic development to cover critical topics like agent collaboration, knowledge grounding, and optimization with Copilot.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="building-blocks-agents-and-tools"&gt;Building Blocks: Agents and Tools&lt;/h2&gt;
&lt;p&gt;The foundation of the watsonx Orchestrate ecosystem lies in two core concepts: &lt;strong&gt;Agents&lt;/strong&gt; and &lt;strong&gt;Tools&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="agents"&gt;Agents&lt;/h3&gt;
&lt;p&gt;The primary intelligent entity, defined using &lt;strong&gt;YAML&lt;/strong&gt; or &lt;strong&gt;JSON&lt;/strong&gt; files. An agent&amp;rsquo;s configuration dictates its behavior, the &lt;strong&gt;LLM&lt;/strong&gt; it uses, and the tools it can access. The YAML file has the following structure.&lt;/p&gt;
&lt;h3 id="tools"&gt;Tools&lt;/h3&gt;
&lt;p&gt;The reusable functions that expose specific business capabilities to the agent, allowing it to take action. Tools can be created from two main formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Python Functions&lt;/strong&gt;: Directly written in Python, they are imported using a command like &lt;code&gt;orchestrate tools import -k python -f my-tool.py -r requirements.txt -a app1 -a app2&lt;/code&gt;. Note that the wx orchestrate framework is moving towards importing tools&amp;rsquo; packages instead of single tools to improve the utilization of runtime capacity while calling the deployed tool.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OpenAPI Specification&lt;/strong&gt;: A standard way to define REST APIs. The agent uses the structure of the OpenAPI document, specifically the &lt;strong&gt;&lt;code&gt;paths&lt;/code&gt;&lt;/strong&gt; element to identify endpoints and the &lt;strong&gt;&lt;code&gt;servers&lt;/code&gt;&lt;/strong&gt; element to find the API&amp;rsquo;s base URLs. The import command is &lt;code&gt;orchestrate tools import -k openapi&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agents can access tools also through local MCP server packages hosted on the local machine and connections to external MCP server. Here the changes in the documentation are very dynamic and it is better to refer to the official wx orchestrate ADK developer webpage for references.&lt;/p&gt;
&lt;p&gt;Tools are secured using &lt;strong&gt;Connections&lt;/strong&gt;, which handle authentication details like API keys or user credentials.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="grounding-agents-with-knowledge"&gt;Grounding Agents with Knowledge&lt;/h2&gt;
&lt;p&gt;For agents to answer informational or history-based questions accurately, they need access to a &lt;strong&gt;Knowledge Base&lt;/strong&gt;, leveraging the &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; pattern.&lt;/p&gt;
&lt;p&gt;A Knowledge Base is defined using &lt;strong&gt;YAML or JSON&lt;/strong&gt; and populated with relevant documents. Two key parameters govern the accuracy of the responses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;retrieval_confidence_threshold&lt;/code&gt;&lt;/strong&gt;: This controls the &lt;strong&gt;minimum confidence required for retrieved documents&lt;/strong&gt; to be considered relevant to the user&amp;rsquo;s query. Documents below this threshold are ignored.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Response Confidence&lt;/strong&gt;: If the Large Language Model&amp;rsquo;s (LLM) final generated answer falls below this set threshold, the agent will refuse to answer and &lt;strong&gt;returns a default &amp;lsquo;I don&amp;rsquo;t know&amp;rsquo; response&lt;/strong&gt; to prevent hallucinations and maintain factual integrity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="advanced-architectures-collaboration-and-workflow"&gt;Advanced Architectures: Collaboration and Workflow&lt;/h2&gt;
&lt;p&gt;For complex business processes, single agents are replaced by a system of collaborating agents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Collaborating Agents&lt;/strong&gt;: Specialized agents (e.g., a &lt;code&gt;Quoter Agent&lt;/code&gt; and a &lt;code&gt;Monthly Payment Agent&lt;/code&gt;) work together to achieve a multi-step goal.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Manager Agent&lt;/strong&gt;: The &lt;strong&gt;manager agent&lt;/strong&gt; sits at the top, and its primary role is to &lt;strong&gt;coordinate the collaborating agents&lt;/strong&gt;. It uses its own LLM reasoning to decide which agent to call, in what sequence, and how to combine their outputs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This collaborative architecture is the practical implementation of the Supervisor/Manager pattern we discussed in earlier posts—a testament to how architectural concepts translate into working code.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="development-debugging-and-optimization"&gt;Development, Debugging, and Optimization&lt;/h2&gt;
&lt;p&gt;The ADK streamlines the development lifecycle with powerful tooling:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Area&lt;/th&gt;
&lt;th style="text-align: left"&gt;Tool/Concept&lt;/th&gt;
&lt;th style="text-align: left"&gt;Key Function&lt;/th&gt;
&lt;th style="text-align: left"&gt;CLI Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Local Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Developer Edition Chat UI&lt;/td&gt;
&lt;td style="text-align: left"&gt;Interactive environment to test agents locally.&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;orchestrate chat start&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Agent Builder&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;AI agent builder for &lt;strong&gt;prompt-tuning&lt;/strong&gt; to improve prompt clarity and agent behavior. It requests &lt;strong&gt;invocation examples&lt;/strong&gt; to understand and refine the agent&amp;rsquo;s logic.&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;orchestrate agents ai-builder create&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Observability&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Langfuse&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Integrated stack that &lt;strong&gt;captures and visualizes agent reasoning traces&lt;/strong&gt; (tool calls, inputs, outputs). Essential for debugging the agent&amp;rsquo;s decision-making process.&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;em&gt;(Integrated with server trace)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="conclusion-bringing-it-all-together"&gt;Conclusion: Bringing It All Together&lt;/h2&gt;
&lt;p&gt;By combining the structural power of tool definition, the informational grounding of knowledge bases, the architectural flexibility of collaboration, and the optimization capabilities of Copilot and Langfuse, developers can build reliable, enterprise-grade AI agents with the watsonx Orchestrate ADK.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="series-summary-key-takeaways"&gt;Series Summary: Key Takeaways&lt;/h2&gt;
&lt;p&gt;Over this four-part series, we&amp;rsquo;ve covered the essential elements of building production-ready agents with watsonx Orchestrate:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Architectural Foundation&lt;/strong&gt; (Part 1): The hybrid pro-code/low-code approach—using the ADK for complex logic and the Agent Builder for orchestration and speed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Best Practices&lt;/strong&gt; (Part 2): Multi-Agent Orchestration with the Supervisor/Manager pattern, writing clear agent descriptions, and choosing the right tool type (Python vs. MCP).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tooling and APIs&lt;/strong&gt; (Part 3): Mastering the ADK CLI commands, understanding MCP security considerations, and working with the core API parameters (&lt;code&gt;agent_id&lt;/code&gt; and &lt;code&gt;thread_id&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt; (Part 4): The ADK development lifecycle—defining agents and tools, grounding with knowledge bases, implementing collaborative architectures, and optimizing with AI Agent Builder and Langfuse.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These concepts form a cohesive framework for building enterprise-grade AI agents that scale. The difference between a proof-of-concept and a production-ready agent lies not in any single technique, but in how these elements work together as a system.&lt;/p&gt;
&lt;p&gt;Start building. Start iterating. And most importantly—start orchestrating.&lt;/p&gt;</description></item><item><title>My notes about the watsonx Orchestrate Agent Development Kit (ADK) and Model Context Protocol</title><link>https://giuliasolinas.github.io/blog/wxorchestrate_iii/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/blog/wxorchestrate_iii/</guid><description>&lt;h1 id="elevate-your-ai-engineering-mastering-watsonx-orchestrate-tooling-and-apis"&gt;Elevate Your AI Engineering: Mastering watsonx Orchestrate Tooling and APIs&lt;/h1&gt;
&lt;p&gt;In Parts 1 and 2, I covered the architectural foundations and best practices for building production-ready agents. Now it&amp;rsquo;s time to get hands-on with the &lt;strong&gt;tooling and APIs&lt;/strong&gt; that power your watsonx Orchestrate implementations.&lt;/p&gt;
&lt;p&gt;For AI engineers looking to extend the capabilities of their agents, this installment provides the foundational knowledge necessary to integrate custom tools and manage the environment using powerful command-line tools and direct API calls. It is also&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-agent-developer-kit-adk-the-command-center"&gt;The Agent Developer Kit (ADK): The Command Center&lt;/h2&gt;
&lt;p&gt;The ADK is the essential CLI for managing your watsonx Orchestrate environments and assets. Mastering a few key commands allows you to seamlessly switch between environments (for example, ), as well as manage the tools your agents use.&lt;/p&gt;
&lt;h3 id="essential-commands"&gt;Essential Commands&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;orchestrate env list&lt;/code&gt;&lt;/strong&gt; &amp;amp; &lt;strong&gt;&lt;code&gt;orchestrate env activate&lt;/code&gt;&lt;/strong&gt;: Essential for listing all configured environments and activating a specific one (e.g., a local development instance or a SaaS tenant).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;orchestrate agents import -f [agent_name].yaml&lt;/code&gt;&lt;/strong&gt; to import the agent into the environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;orchestrate tools import&lt;/code&gt;&lt;/strong&gt; &amp;amp; &lt;strong&gt;&lt;code&gt;orchestrate tools list&lt;/code&gt;&lt;/strong&gt;: The standardized way to register new tools into your environment and verify their successful import.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;orchestrate connections remove&lt;/code&gt;&lt;/strong&gt;: Used to safely unregister external service connections from your active tenant.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;orchestrate knowledge-bases status&lt;/code&gt;&lt;/strong&gt;: Provides vital diagnostic information on the content and state of your retrieval-augmented generation (RAG) knowledge bases.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These commands form the backbone of your day-to-day workflow. Whether you&amp;rsquo;re deploying to production or debugging in development, the ADK is your interface to the platform.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="standardizing-tools-with-the-model-context-protocol-mcp"&gt;Standardizing Tools with the Model Context Protocol (MCP)&lt;/h2&gt;
&lt;p&gt;To enable agents to use external applications, watsonx Orchestrate utilizes the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;, which relies on an MCP server as a standardized intermediary.&lt;/p&gt;
&lt;h3 id="why-mcp-matters"&gt;Why MCP Matters&lt;/h3&gt;
&lt;p&gt;The core benefit of MCP is providing a &lt;strong&gt;standardized interface&lt;/strong&gt; for watsonx Orchestrate, allowing various external services to be integrated with consistent simplicity. Instead of building custom integrations for every service, MCP gives you a uniform approach.&lt;/p&gt;
&lt;p&gt;Here you can find an insightful reading if you want to compare this approach with Anthropics&amp;rsquo;s guidelines to build
. I believe learnings from one platform can be applied to other contexts, too.&lt;/p&gt;
&lt;h3 id="security-considerations"&gt;Security Considerations&lt;/h3&gt;
&lt;p&gt;MCP servers typically require &lt;strong&gt;environment variables&lt;/strong&gt; at startup to initialize correctly with necessary authentication keys (API keys) and endpoints. However, there&amp;rsquo;s a critical security consideration: without proper &lt;strong&gt;sandboxing&lt;/strong&gt;, running an MCP server poses a severe security risk of &lt;strong&gt;arbitrary code execution&lt;/strong&gt;. This risk must be mitigated before deploying to production.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="api-essentials-for-conversational-flows"&gt;API Essentials for Conversational Flows&lt;/h2&gt;
&lt;p&gt;When building custom user interfaces or services, direct interaction with the watsonx Orchestrate API is required. Two identifiers are paramount for managing conversation state:&lt;/p&gt;
&lt;h3 id="the-critical-api-parameters"&gt;The Critical API Parameters&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;agent_id&lt;/code&gt;&lt;/strong&gt;: &lt;strong&gt;Must be included in the API request&lt;/strong&gt; to direct the conversation to the specific agent instance that is configured with the right skills and tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;thread_id&lt;/code&gt;&lt;/strong&gt;: Used to &lt;strong&gt;maintain and reference the context of a specific conversation&lt;/strong&gt;. Including this ID in subsequent calls ensures the agent has access to the full conversation history for coherent, multi-turn dialogue.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These two identifiers are the keys to building seamless, context-aware conversational experiences in your custom applications.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="key-takeaways"&gt;Key Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Master the ADK&lt;/strong&gt;—it&amp;rsquo;s your command center for environment management, tool registration, and diagnostics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embrace MCP&lt;/strong&gt; for standardized integrations, but never neglect security—sandbox your MCP servers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understand the API fundamentals&lt;/strong&gt;—&lt;code&gt;agent_id&lt;/code&gt; and &lt;code&gt;thread_id&lt;/code&gt; are essential for building custom conversational interfaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With these tooling and API skills in your toolkit, we&amp;rsquo;re equipped to move beyond conceptual design into full implementation. The foundation is set; the execution begins.&lt;/p&gt;</description></item><item><title>Mastering Multi-Agent Orchestration and Tool Selection in watsonx Orchestrate</title><link>https://giuliasolinas.github.io/blog/wxorchestrate_ii/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/blog/wxorchestrate_ii/</guid><description>&lt;h1 id="mastering-multi-agent-orchestration-and-tool-selection-in-watsonx-orchestrate"&gt;Mastering Multi-Agent Orchestration and Tool Selection in watsonx Orchestrate&lt;/h1&gt;
&lt;p&gt;In the first blog, we explored the foundational architectural choices: when to use the Agent Development Kit (ADK) for pro-code development and when to leverage the Agent Builder for speed. Now, let&amp;rsquo;s dive deeper into two critical best practices that separate agentic design from AI assistants and more traditional chatbot solution: &lt;strong&gt;Multi-Agent Orchestration&lt;/strong&gt; and &lt;strong&gt;Agent Descriptions&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="multi-agent-orchestration-the-supervisormanager-pattern"&gt;Multi-Agent Orchestration: The Supervisor/Manager Pattern&lt;/h2&gt;
&lt;p&gt;If there&amp;rsquo;s one architectural pattern I had to internalize for watsonx Orchestrate, it&amp;rsquo;s the &lt;strong&gt;Supervisor/Manager agent topology&lt;/strong&gt;. This approach leverages the concept of Multi-Agent Systems—a core capability that transforms how complex workflows are handled.&lt;/p&gt;
&lt;h3 id="why-single-agents-fail-at-scale"&gt;Why Single Agents Fail at Scale&lt;/h3&gt;
&lt;p&gt;Do not get me wrong, single agents have been there for a while and can still be deployed with success. Furthermore, single agents that handle a sequence of tasks in parallel can be more performing that a crew of agents accomplishing the same tasks in parallel but without real coordination &amp;ndash;see for example,
from Google.&lt;/p&gt;
&lt;p&gt;However a single agent hits a wall when performing a very complex job that would require parallel tasks and multiple tools, even if they are supported by very powerful, state-of-the-art models. When multiple tools have similar names or work with the same data, the LLM inside a single, large agent can struggle with &lt;strong&gt;tool routing&lt;/strong&gt;—the process of selecting the correct tool for a given step. The more tools you pile into one agent, the more overwhelmed the model&amp;rsquo;s reasoning becomes. The result? Incorrect routing, failed tasks, and frustrated users.&lt;/p&gt;
&lt;p&gt;There is now quite a lot of evidence on this topic, suggesting that the maximum number of tools an agent should handle should be larger than eight. Allen Chen, distinguished engineer at IBM, has written a great article about it
on
.&lt;/p&gt;
&lt;p&gt;The solution to this problem is thinking modular and designing a multi-agent framework, in which each agent covers a specialized task with its associated tools and connects loosely with the other agents. The idea is to turn our implementations from monolith agents to lightweight, decentralized yet connected agents. I find multi-agent coordination a very fascinating topic and I recommend reading this
by Grötschla and co-authors to know more about forms of coordination design.&lt;/p&gt;
&lt;p&gt;One of those modes is indeed the &amp;ldquo;Supervisor/Manager&amp;rdquo; patter that is at the core of watsonx Orchestrate. Its foundational idea is to have an orchestrating agent taking a overview of the tasks and coordination among its collaborators. Collaborators can pass information among each other and run tasks in parallel or in sequence. Yet, the ultimate check resides to the orchestrator.&lt;/p&gt;
&lt;h3 id="the-modular-solution"&gt;The Modular Solution&lt;/h3&gt;
&lt;p&gt;By decomposing a complex task into smaller, specialized agents (e.g., a &amp;ldquo;Leave Balance Agent&amp;rdquo; and a &amp;ldquo;Submission Agent&amp;rdquo;), you dramatically simplify the decision space. Each sub-agent is given a small, specific set of tools, making its reasoning and selection process highly accurate.&lt;/p&gt;
&lt;p&gt;This architecture assigns &lt;strong&gt;specialized roles&lt;/strong&gt; to agents, allowing them to excel at their dedicated tasks. A supervising agent (the manager) then handles the overall complexity by &lt;strong&gt;delegating&lt;/strong&gt; the user&amp;rsquo;s request to the correct sequence of specialized agents—the orchestration step.&lt;/p&gt;
&lt;p&gt;This modular, collaborative approach is the &lt;strong&gt;best practice for complex workflows&lt;/strong&gt; in watsonx Orchestrate.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="agent-descriptions-writing-for-the-model"&gt;Agent Descriptions: Writing for the Model&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a truth that surprises many developers: &lt;strong&gt;the agent description isn&amp;rsquo;t for humans—it&amp;rsquo;s primarily for the AI&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The description is critically important because it is used by the underlying Large Language Model (LLM) within watsonx Orchestrate to perform reasoning and routing. The LLM reads the description in a &lt;code&gt;YAML&lt;/code&gt; file to determine the agent&amp;rsquo;s capabilities and decide if it should be invoked to handle a user&amp;rsquo;s request.&lt;/p&gt;
&lt;h3 id="what-makes-a-great-description"&gt;What Makes a Great Description&lt;/h3&gt;
&lt;p&gt;A well-crafted description should clearly state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: What the agent does&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inputs&lt;/strong&gt;: The type of information it needs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outputs&lt;/strong&gt;: What it returns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints&lt;/strong&gt;: Any key limitations or special instructions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This information is packed in the &lt;code&gt;YAML&lt;/code&gt; file with this structure,for a customer service agent running on ServiceNow.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;spec_version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;service_now_agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;groq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gpt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;oss&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="n"&gt;who&lt;/span&gt; &lt;span class="n"&gt;specializes&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="n"&gt;care&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;large&lt;/span&gt; &lt;span class="n"&gt;healthcare&lt;/span&gt; &lt;span class="n"&gt;institution&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;should&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;compassionate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;able&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt; &lt;span class="n"&gt;tickets&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;processing&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;human&lt;/span&gt; &lt;span class="n"&gt;later&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Examples&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;adding&lt;/span&gt; &lt;span class="n"&gt;members&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;plans&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;helping&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;having&lt;/span&gt; &lt;span class="n"&gt;difficulty&lt;/span&gt; &lt;span class="n"&gt;either&lt;/span&gt; &lt;span class="n"&gt;generating&lt;/span&gt; &lt;span class="n"&gt;benefits&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;adding&lt;/span&gt; &lt;span class="n"&gt;additional&lt;/span&gt; &lt;span class="n"&gt;members&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;their&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;create&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;incident&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;our&lt;/span&gt; &lt;span class="n"&gt;support&lt;/span&gt; &lt;span class="n"&gt;team&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;service_now_create_incident&lt;/span&gt; &lt;span class="k"&gt;tool&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Be&lt;/span&gt; &lt;span class="n"&gt;compassionate&lt;/span&gt; &lt;span class="n"&gt;about&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;facing&lt;/span&gt; &lt;span class="n"&gt;difficulty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;get_service_now_incidents&lt;/span&gt; &lt;span class="n"&gt;should&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;formatted&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;github&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt; &lt;span class="n"&gt;formatted&lt;/span&gt; &lt;span class="n"&gt;markdown&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;collaborators&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;create_service_now_incident&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;get_my_service_now_incidents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;get_service_now_incident_by_number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here some notes about this example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The agent&amp;rsquo;s style is set as default, which is the baseline agentic reasoning mode for native agents in wx orchestrate. It can be changed into the ReAct style.&lt;/li&gt;
&lt;li&gt;The agent is a stand alone one and does not have collaborators. They can be added with additional YAML files stored in the project&amp;rsquo;s workspace and loaded in the environment. You do not need to setup an A2A protocol to let them sync and collaborate, unless we have imported third-party agents that need to coordinate with native ones.&lt;/li&gt;
&lt;li&gt;There is a list of tools, typically Python files or MCP integration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="clarity-over-complexity"&gt;Clarity Over Complexity&lt;/h3&gt;
&lt;p&gt;Using clear, non-technical language ensures the LLM interprets the agent&amp;rsquo;s role correctly, which in turn leads to a better user experience. While developers also read the description, think of it primarily as a &lt;strong&gt;prompt for the AI&amp;rsquo;s logic&lt;/strong&gt;—and AI needs unambiguous instructions.&lt;/p&gt;
&lt;p&gt;Avoid:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Technical jargon that the LLM won&amp;rsquo;t recognize&lt;/li&gt;
&lt;li&gt;Internal acronyms without context&lt;/li&gt;
&lt;li&gt;Vague or overly brief descriptions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These introduce ambiguity and &lt;strong&gt;increase the risk of incorrect routing decisions&lt;/strong&gt;. When in doubt, err on the side of clarity. Ambiguity is poison.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="choosing-the-right-tool-python-vs-mcp"&gt;Choosing the Right Tool: Python vs. MCP&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve touched on the role of tools before before, but this topic deserves a deeper explanation. In watsonx Orchestrate, as in the other agentic design frameworks, tools can be developed through Python code or MCP integrations. The question is &lt;strong&gt;when do you use Python tools versus MCP tools?&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="python-tools-via-adk"&gt;Python Tools (via ADK)&lt;/h3&gt;
&lt;p&gt;The Agent Development Kit (ADK) allows developers to create custom Python tools. Python is the ideal choice when you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complex conditional logic (business rules)&lt;/li&gt;
&lt;li&gt;Data manipulation and calculations&lt;/li&gt;
&lt;li&gt;Handling accrual rates, rollovers, and time-based calculations&lt;/li&gt;
&lt;li&gt;Any custom computational logic unique to your business&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, calculating remaining vacation days based on custom seniority rules? That requires Python.&lt;/p&gt;
&lt;h3 id="mcp-tools-model-context-protocol"&gt;MCP Tools (Model Context Protocol)&lt;/h3&gt;
&lt;p&gt;MCP tools are excellent for &lt;strong&gt;integrating with existing systems&lt;/strong&gt;—typically via OpenAPI specifications. They&amp;rsquo;re best suited for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Calling standard REST APIs&lt;/li&gt;
&lt;li&gt;Simple, form-based workflows&lt;/li&gt;
&lt;li&gt;Connecting to external services&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What they lack is the ability to embed complex, custom computational logic. If you need to transform data in unique ways or implement business rules that don&amp;rsquo;t exist in an external service, reach for Python.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="key-takeaways"&gt;Key Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decompose complex workflows&lt;/strong&gt; into specialized agents to reduce the LLM&amp;rsquo;s cognitive load and improve routing accuracy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write descriptions for the AI first&lt;/strong&gt;—clear, unambiguous descriptions are the difference between reliable routing and failed execution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose Python for logic, MCP for integration&lt;/strong&gt;—understand the strength of each tool type and use them appropriately.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are my learning in trying to discover and put in practice the best practices to build multi-agents. The
offers several tips on how to write good agent&amp;rsquo;s descriptions, and offers an extensive list of dos and don&amp;rsquo;ts. Check it and have fun.&lt;/p&gt;</description></item><item><title>How Do Design-Thinking and Agents' Roles Matter to Generate Predictive Knowledge in Organizations?</title><link>https://giuliasolinas.github.io/publications/qca/</link><pubDate>Mon, 02 Oct 2023 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/publications/qca/</guid><description/></item><item><title>Competition, formal governance and trust in alliances An experimental study</title><link>https://giuliasolinas.github.io/publications/lrp/</link><pubDate>Sat, 01 Oct 2022 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/publications/lrp/</guid><description/></item><item><title>Cui Bono Cui Malo? Contractual Complementarity for Rent Appropriation in Strategic Outsourcing</title><link>https://giuliasolinas.github.io/publications/dd_gs/</link><pubDate>Wed, 01 Apr 2020 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/publications/dd_gs/</guid><description/></item><item><title>Framing Technology Licensing</title><link>https://giuliasolinas.github.io/publications/licensing/</link><pubDate>Wed, 15 Feb 2017 00:00:00 +0000</pubDate><guid>https://giuliasolinas.github.io/publications/licensing/</guid><description/></item></channel></rss>