agent-swarm-kit-docs / documents /app_getting-started.html
tripolskypetr's picture
deploy: migrate media images to Git LFS
0ed609b
Raw
History Blame Contribute Delete
76.7 kB
<!DOCTYPE html><html class="default" lang="en" data-base=".."><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>app/getting-started | agent-swarm-kit</title><meta name="description" content="Documentation for agent-swarm-kit"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search"><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">agent-swarm-kit</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">agent-swarm-kit</a></li><li><a href="app_getting-started.html">app/getting-started</a></li></ul></div><div class="tsd-panel tsd-typography"><a id="getting-started" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Getting Started<a href="#getting-started" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><blockquote>
<p><code>agent-swarm-kit</code> facilitates the creation of agent-based systems capable of handling tasks like voice-based chats, cryptocurrency trading, and pharmaceutical consultations. It offers a modular architecture where agents collaborate within swarms, utilizing tools, completions, and storage to process user requests. Below, we explore each component, add a section on connecting to swarms, provide examples of key operational functions, and emphasize practical resources for developers.</p>
</blockquote>
<p>Whether you’re building a voice chatbot, a crypto trader, or a pharma consultant, <code>agent-swarm-kit</code> has you covered. It’s a modular framework where agents team up in swarms, tapping into tools, completions, and storage to get the job done. Let’s break down each piece, show you how to connect to swarms, and spotlight some handy examples and resources to kickstart your project.</p>
<a id="ask-ai" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Ask AI<a href="#ask-ai" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><p><strong>DeepWiki is available online just in your web browser</strong>: <a href="https://deepwiki.com/tripolskypetr/agent-swarm-kit/">https://deepwiki.com/tripolskypetr/agent-swarm-kit/</a></p>
<p>This documentation contains a lot of text, which makes it difficult to read manually. Just ask any specific question to <code>DeepWiki AI Chat</code> or <code>Cursor</code> and AI will answer you. If it won't, <a href="https://github.com/tripolskypetr/agent-swarm-kit/issues">open the Issue on GitHub</a> and I will answer you in person</p>
<a id="core-components" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Core Components<a href="#core-components" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="1-storages" class="tsd-anchor"></a><h3 class="tsd-anchor-link">1. Storages<a href="#1-storages" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Storages are the memory banks for your agents, holding onto things like orders, user preferences, or past data. With the <code>addStorage</code> function, you can set them up and even add embeddings to make searches lightning-fast. Here’s how it works in action:</p>
<ul>
<li><strong>Example</strong>: The <code>OrderStorage</code> in the trading swarm stores cryptocurrency orders (e.g., buy/sell details for BTC, ETH):<pre><code class="javascript"><span class="hl-0">addStorage</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">docDescription:</span><span class="hl-1"> </span><span class="hl-3">&quot;Persistent storage system designed to record and organize cryptocurrency trading orders...&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">storageName:</span><span class="hl-1"> </span><span class="hl-2">StorageName</span><span class="hl-1">.</span><span class="hl-2">OrderStorage</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">createIndex</span><span class="hl-2">:</span><span class="hl-1"> ({ </span><span class="hl-2">type</span><span class="hl-1">, </span><span class="hl-2">coin</span><span class="hl-1">, </span><span class="hl-2">quantity</span><span class="hl-1">, </span><span class="hl-2">price</span><span class="hl-1"> }) </span><span class="hl-4">=&gt;</span><span class="hl-1"> </span><span class="hl-2">str</span><span class="hl-1">.</span><span class="hl-0">space</span><span class="hl-1">(</span><span class="hl-2">type</span><span class="hl-1">, </span><span class="hl-2">coin</span><span class="hl-1">, </span><span class="hl-2">quantity</span><span class="hl-1">, </span><span class="hl-2">price</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-2">embedding:</span><span class="hl-1"> </span><span class="hl-2">EmbeddingName</span><span class="hl-1">.</span><span class="hl-2">NomicEmbedding</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Usage</strong>: The <code>BtcTraderAgent</code> uses this storage to upsert buy orders and calculate profit/loss:<pre><code class="javascript"><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">Storage</span><span class="hl-1">.</span><span class="hl-0">upsert</span><span class="hl-1">({ </span><span class="hl-2">item:</span><span class="hl-1"> { </span><span class="hl-2">id</span><span class="hl-1">, </span><span class="hl-2">coin</span><span class="hl-1">, </span><span class="hl-2">price</span><span class="hl-1">, </span><span class="hl-2">quantity</span><span class="hl-1">, </span><span class="hl-2">type:</span><span class="hl-1"> </span><span class="hl-3">&quot;buy&quot;</span><span class="hl-1"> }, ... });</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Purpose</strong>: Storages enable long-term memory and data-driven decision-making across agent interactions.</li>
</ul>
<hr>
<a id="2-completors-completions" class="tsd-anchor"></a><h3 class="tsd-anchor-link">2. Completors (Completions)<a href="#2-completors-completions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Completors—set up with <code>addCompletion</code> — are the brains behind your agents’ responses, pulling in language models or APIs from the likes of OpenAI, Ollama, or LM Studio. They take user input and spit out answers. Check out a few ways devs are using them:</p>
<ul>
<li>
<p><strong>Examples</strong>:</p>
<ul>
<li><strong>OpenAI Completion</strong>: Used in the <code>nginx-balancer-chat</code> and trading swarm:<pre><code class="javascript"><span class="hl-0">addCompletion</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">completionName:</span><span class="hl-1"> </span><span class="hl-3">&quot;openai_completion&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">getCompletion:</span><span class="hl-1"> </span><span class="hl-2">Adapter</span><span class="hl-1">.</span><span class="hl-0">fromOpenAI</span><span class="hl-1">(</span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-0">OpenAI</span><span class="hl-1">({ </span><span class="hl-2">apiKey:</span><span class="hl-1"> </span><span class="hl-2">process</span><span class="hl-1">.</span><span class="hl-2">env</span><span class="hl-1">.</span><span class="hl-6">OPENAI_API_KEY</span><span class="hl-1"> })),</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Ollama with Nemotron-Mini</strong>: Used in the <code>whisper-voice-chat</code> project:<pre><code class="javascript"><span class="hl-0">addCompletion</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">completionName:</span><span class="hl-1"> </span><span class="hl-3">&quot;navigate-completion&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">getCompletion:</span><span class="hl-1"> </span><span class="hl-2">Adapter</span><span class="hl-1">.</span><span class="hl-0">fromOllama</span><span class="hl-1">(</span><span class="hl-2">ollama</span><span class="hl-1">, </span><span class="hl-3">&quot;nemotron-mini:4b&quot;</span><span class="hl-1">),</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Saiga Yandex GPT</strong>: Used in the pharmaceutical swarm:<pre><code class="javascript"><span class="hl-0">addCompletion</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">completionName:</span><span class="hl-1"> </span><span class="hl-2">CompletionName</span><span class="hl-1">.</span><span class="hl-2">SaigaYandexGPTCompletion</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">getCompletion:</span><span class="hl-1"> </span><span class="hl-2">Adapter</span><span class="hl-1">.</span><span class="hl-0">fromLMStudio</span><span class="hl-1">(</span><span class="hl-0">getOpenAI</span><span class="hl-1">(), </span><span class="hl-3">&quot;saiga_yandexgpt_8b_gguf&quot;</span><span class="hl-1">),</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Cohere2 Completion:</strong> Integrates Cohere’s API for text generation (assuming Cohere2 refers to a hypothetical or updated Cohere model):<pre><code class="typescript"><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-0">getCohere</span><span class="hl-1"> = (</span><span class="hl-2">token</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><br/><span class="hl-1"> </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-0">CohereClientV2</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">token</span><span class="hl-1">,</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">COHERE_TOKENS</span><span class="hl-1"> = [</span><span class="hl-2">process</span><span class="hl-1">.</span><span class="hl-2">env</span><span class="hl-1">.</span><span class="hl-6">COHERE_API_KEY</span><span class="hl-1">!];</span><br/><br/><span class="hl-1"> </span><span class="hl-0">addCompletion</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">completionName:</span><span class="hl-1"> </span><span class="hl-2">CompletionName</span><span class="hl-1">.</span><span class="hl-2">CohereCompletion</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">getCompletion:</span><span class="hl-1"> </span><span class="hl-2">RoundRobin</span><span class="hl-1">.</span><span class="hl-0">create</span><span class="hl-1">(</span><span class="hl-6">COHERE_TOKENS</span><span class="hl-1">, (</span><span class="hl-2">apiKey</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><br/><span class="hl-1"> </span><span class="hl-2">Adapter</span><span class="hl-1">.</span><span class="hl-0">fromCohereClientV2</span><span class="hl-1">(</span><span class="hl-0">getCohere</span><span class="hl-1">(</span><span class="hl-2">apiKey</span><span class="hl-1">), </span><span class="hl-3">&quot;command-r-08-2024&quot;</span><span class="hl-1">)</span><br/><span class="hl-1"> ),</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
</ul>
</li>
<li>
<p><strong>Purpose</strong>: Completors provide the reasoning and conversational capabilities of agents, tailored to specific use cases.</p>
</li>
</ul>
<hr>
<a id="3-embedders" class="tsd-anchor"></a><h3 class="tsd-anchor-link">3. Embedders<a href="#3-embedders" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Embedders, added via <code>addEmbedding</code>, turn text into vectors—think of them as fingerprints for your data. They’re great for stuff like similarity searches or speeding up indexing. Here’s why they matter: they make your storages way more efficient.</p>
<ul>
<li><strong>Example</strong>: The <code>NomicEmbedding</code> in the trading swarm uses Ollama’s <code>nomic-embed-text</code> model:<pre><code class="javascript"><span class="hl-0">addEmbedding</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">embeddingName:</span><span class="hl-1"> </span><span class="hl-2">EmbeddingName</span><span class="hl-1">.</span><span class="hl-2">NomicEmbedding</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">createEmbedding</span><span class="hl-2">:</span><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> (</span><span class="hl-2">text</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> { </span><span class="hl-6">embedding</span><span class="hl-1"> } = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">ollama</span><span class="hl-1">.</span><span class="hl-0">embeddings</span><span class="hl-1">({ </span><span class="hl-2">model:</span><span class="hl-1"> </span><span class="hl-3">&quot;nomic-embed-text&quot;</span><span class="hl-1">, </span><span class="hl-2">prompt:</span><span class="hl-1"> </span><span class="hl-2">text</span><span class="hl-1"> });</span><br/><span class="hl-1"> </span><span class="hl-5">return</span><span class="hl-1"> </span><span class="hl-2">embedding</span><span class="hl-1">;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-0">calculateSimilarity</span><span class="hl-2">:</span><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> (</span><span class="hl-2">a</span><span class="hl-1">, </span><span class="hl-2">b</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">return</span><span class="hl-1"> </span><span class="hl-0">tidy</span><span class="hl-1">(() </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">tensorA</span><span class="hl-1"> = </span><span class="hl-0">tensor1d</span><span class="hl-1">(</span><span class="hl-2">a</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">tensorB</span><span class="hl-1"> = </span><span class="hl-0">tensor1d</span><span class="hl-1">(</span><span class="hl-2">b</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">dotProduct</span><span class="hl-1"> = </span><span class="hl-0">sum</span><span class="hl-1">(</span><span class="hl-0">mul</span><span class="hl-1">(</span><span class="hl-2">tensorA</span><span class="hl-1">, </span><span class="hl-2">tensorB</span><span class="hl-1">));</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">normA</span><span class="hl-1"> = </span><span class="hl-0">norm</span><span class="hl-1">(</span><span class="hl-2">tensorA</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">normB</span><span class="hl-1"> = </span><span class="hl-0">norm</span><span class="hl-1">(</span><span class="hl-2">tensorB</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">cosineData</span><span class="hl-1"> = </span><span class="hl-0">div</span><span class="hl-1">(</span><span class="hl-2">dotProduct</span><span class="hl-1">, </span><span class="hl-0">mul</span><span class="hl-1">(</span><span class="hl-2">normA</span><span class="hl-1">, </span><span class="hl-2">normB</span><span class="hl-1">)).</span><span class="hl-0">dataSync</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">cosineSimilarity</span><span class="hl-1"> = </span><span class="hl-2">cosineData</span><span class="hl-1">[</span><span class="hl-8">0</span><span class="hl-1">];</span><br/><span class="hl-1"> </span><span class="hl-5">return</span><span class="hl-1"> </span><span class="hl-2">cosineSimilarity</span><span class="hl-1">;</span><br/><span class="hl-1"> });</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Usage</strong>: Paired with <code>OrderStorage</code> to index trading orders for quick lookup.</li>
<li><strong>Purpose</strong>: Embedders enable advanced data processing, such as clustering or matching, within storages.</li>
</ul>
<hr>
<a id="4-agents" class="tsd-anchor"></a><h3 class="tsd-anchor-link">4. Agents<a href="#4-agents" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Agents are the stars of the show, brought to life with <code>addAgent</code>. They’re the ones chatting with users, each with a unique role, a guiding prompt, a completion to lean on, and maybe some tools or storages in their toolkit.</p>
<ul>
<li><strong>Examples</strong>:
<ul>
<li><strong>TestAgent (Whisper-Voice-Chat)</strong>: Handles voice-based chats:<pre><code class="javascript"><span class="hl-0">addAgent</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">agentName:</span><span class="hl-1"> </span><span class="hl-3">&quot;test-agent&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">completion:</span><span class="hl-1"> </span><span class="hl-6">MOCK_COMPLETION</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">prompt:</span><span class="hl-1"> </span><span class="hl-3">&quot;You are the agent of a swarm system. Chat with customer&quot;</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>TriageAgent (Root Swarm)</strong>: Routes queries to specialized agents:<pre><code class="javascript"><span class="hl-0">addAgent</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">agentName:</span><span class="hl-1"> </span><span class="hl-3">&quot;triage_agent&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">completion:</span><span class="hl-1"> </span><span class="hl-6">OPENAI_COMPLETION</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">system:</span><span class="hl-1"> [</span><span class="hl-3">&quot;Triage Agent Guidelines: ...&quot;</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-2">tools:</span><span class="hl-1"> [</span><span class="hl-6">NAVIGATE_TO_TECH_TRENDS</span><span class="hl-1">, </span><span class="hl-6">NAVIGATE_TO_CYBERSECURITY</span><span class="hl-1">, ...],</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>BtcTraderAgent (Trading Swarm)</strong>: Manages Bitcoin trading:<pre><code class="javascript"><span class="hl-0">addAgent</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">agentName:</span><span class="hl-1"> </span><span class="hl-2">AgentName</span><span class="hl-1">.</span><span class="hl-2">BtcTraderAgent</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">completion:</span><span class="hl-1"> </span><span class="hl-2">CompletionName</span><span class="hl-1">.</span><span class="hl-2">OpenAiCompletion</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">prompt:</span><span class="hl-1"> </span><span class="hl-3">&quot;You are the Bitcoin AI trader specializing in long-term investments.&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">tools:</span><span class="hl-1"> [</span><span class="hl-2">ToolName</span><span class="hl-1">.</span><span class="hl-2">CalculateBuyPriceQuantityTool</span><span class="hl-1">, ...],</span><br/><span class="hl-1"> </span><span class="hl-2">storages:</span><span class="hl-1"> [</span><span class="hl-2">StorageName</span><span class="hl-1">.</span><span class="hl-2">OrderStorage</span><span class="hl-1">],</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
</ul>
</li>
<li><strong>Purpose</strong>: Agents encapsulate domain-specific logic and interact with users or other agents via tools and completions.</li>
</ul>
<hr>
<a id="5-swarms" class="tsd-anchor"></a><h3 class="tsd-anchor-link">5. Swarms<a href="#5-swarms" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Swarms, defined with <code>addSwarm</code>, are collections of agents that work together, with a default agent serving as the entry point. They orchestrate multi-agent workflows.</p>
<ul>
<li><strong>Examples</strong>:
<ul>
<li><strong>TestSwarm (Whisper-Voice-Chat)</strong>: Single-agent voice chat system:<pre><code class="javascript"><span class="hl-0">addSwarm</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">swarmName:</span><span class="hl-1"> </span><span class="hl-3">&quot;test-swarm&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">agentList:</span><span class="hl-1"> [</span><span class="hl-6">TEST_AGENT</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-2">defaultAgent:</span><span class="hl-1"> </span><span class="hl-6">TEST_AGENT</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>RootSwarm (Multi-Agent System)</strong>: Manages specialized agents:<pre><code class="javascript"><span class="hl-0">addSwarm</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">swarmName:</span><span class="hl-1"> </span><span class="hl-3">&quot;root_swarm&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">agentList:</span><span class="hl-1"> [</span><span class="hl-6">TECH_TRENDS_AGENT</span><span class="hl-1">, </span><span class="hl-6">CYBERSECURITY_AGENT</span><span class="hl-1">, ..., </span><span class="hl-6">TRIAGE_AGENT</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-2">defaultAgent:</span><span class="hl-1"> </span><span class="hl-6">TRIAGE_AGENT</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>TradingSwarm</strong>: Coordinates cryptocurrency trading:<pre><code class="javascript"><span class="hl-0">addSwarm</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">swarmName:</span><span class="hl-1"> </span><span class="hl-2">SwarmName</span><span class="hl-1">.</span><span class="hl-2">TradingSwarm</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">agentList:</span><span class="hl-1"> [</span><span class="hl-2">AgentName</span><span class="hl-1">.</span><span class="hl-2">BtcTraderAgent</span><span class="hl-1">, ..., </span><span class="hl-2">AgentName</span><span class="hl-1">.</span><span class="hl-2">TriageAgent</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-2">defaultAgent:</span><span class="hl-1"> </span><span class="hl-2">AgentName</span><span class="hl-1">.</span><span class="hl-2">TriageAgent</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
</ul>
</li>
<li><strong>Purpose</strong>: Swarms provide structure and routing for complex, multi-agent applications.</li>
</ul>
<hr>
<a id="6-tools" class="tsd-anchor"></a><h3 class="tsd-anchor-link">6. Tools<a href="#6-tools" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Tools, added with <code>addTool</code>, extend agent capabilities by enabling actions like navigation, calculations, or external integrations. They are invoked explicitly by agents when needed and often utilize key functions like <code>commitToolOutput</code>, <code>changeToAgent</code>, <code>emit</code>, <code>execute</code>, <code>commitFlush</code>, and <code>getLastUserMessage</code>.</p>
<ul>
<li>
<p><strong>Examples with Key Functions</strong>:</p>
<ul>
<li><strong>NavigateToTechTrends</strong>: Routes to the tech trends agent and changes the active agent:<pre><code class="javascript"><span class="hl-0">addTool</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">toolName:</span><span class="hl-1"> </span><span class="hl-3">&quot;navigate_to_tech_trends_tool&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">call</span><span class="hl-2">:</span><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> ({ </span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">params</span><span class="hl-1"> }) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">commitToolOutput</span><span class="hl-1">(</span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-3">&quot;Switching to Tech Trends Agent&quot;</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Commit tool output</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">changeToAgent</span><span class="hl-1">(</span><span class="hl-6">TECH_TRENDS_AGENT</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Change active agent</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">execute</span><span class="hl-1">(</span><span class="hl-3">&quot;Continue conversation with user&quot;</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Continue LLM execution</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-2">function:</span><span class="hl-1"> { </span><span class="hl-2">name:</span><span class="hl-1"> </span><span class="hl-3">&quot;navigate_to_tech_trends_tool&quot;</span><span class="hl-1">, ... },</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>CalculateBuyPriceQuantityTool</strong>: Computes buy order details, emits a message, and continues execution:<pre><code class="javascript"><span class="hl-0">addTool</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">toolName:</span><span class="hl-1"> </span><span class="hl-2">ToolName</span><span class="hl-1">.</span><span class="hl-2">CalculateBuyPriceQuantityTool</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">call</span><span class="hl-2">:</span><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> ({ </span><span class="hl-2">agentName</span><span class="hl-1">, </span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">params</span><span class="hl-1"> }) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> { </span><span class="hl-6">price</span><span class="hl-1">, </span><span class="hl-6">quantity</span><span class="hl-1"> } = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">calculateBuyUSDT</span><span class="hl-1">(</span><span class="hl-0">Number</span><span class="hl-1">(</span><span class="hl-2">params</span><span class="hl-1">.</span><span class="hl-2">total</span><span class="hl-1">), </span><span class="hl-2">coin</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">commitToolOutput</span><span class="hl-1">(</span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-3">`Long-term buy </span><span class="hl-4">${</span><span class="hl-2">coin</span><span class="hl-4">}</span><span class="hl-3"> for </span><span class="hl-4">${</span><span class="hl-2">params</span><span class="hl-10">.</span><span class="hl-2">total</span><span class="hl-4">}</span><span class="hl-3"> USD: price=</span><span class="hl-4">${</span><span class="hl-2">price</span><span class="hl-4">}</span><span class="hl-3">, quantity=</span><span class="hl-4">${</span><span class="hl-2">quantity</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">agentName</span><span class="hl-1">); </span><span class="hl-9">// Commit tool output</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">emit</span><span class="hl-1">(</span><span class="hl-3">`To buy </span><span class="hl-4">${</span><span class="hl-2">coin</span><span class="hl-4">}</span><span class="hl-3"> for </span><span class="hl-4">${</span><span class="hl-2">params</span><span class="hl-10">.</span><span class="hl-2">total</span><span class="hl-4">}</span><span class="hl-3"> USDT, place a MARKET_BUY order with price=</span><span class="hl-4">${</span><span class="hl-2">price</span><span class="hl-4">}</span><span class="hl-3">, quantity=</span><span class="hl-4">${</span><span class="hl-2">quantity</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">agentName</span><span class="hl-1">); </span><span class="hl-9">// Emit message to user</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">execute</span><span class="hl-1">(</span><span class="hl-3">&quot;Confirm the buy order details with the user&quot;</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">agentName</span><span class="hl-1">); </span><span class="hl-9">// Continue execution</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>CalculateAverageCoinPriceTool</strong>: Handles coin mismatch by retrieving the last message and clearing history:<pre><code class="javascript"><span class="hl-0">addTool</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">toolName:</span><span class="hl-1"> </span><span class="hl-2">ToolName</span><span class="hl-1">.</span><span class="hl-2">CalculateAverageCoinPriceTool</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">call</span><span class="hl-2">:</span><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> ({ </span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-2">agentName</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">params</span><span class="hl-1"> }) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">if</span><span class="hl-1"> (</span><span class="hl-2">coin</span><span class="hl-1"> !== </span><span class="hl-2">params</span><span class="hl-1">.</span><span class="hl-2">coin</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">lastMessage</span><span class="hl-1"> = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">getLastUserMessage</span><span class="hl-1">(</span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Get last user message</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">commitFlush</span><span class="hl-1">(</span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">agentName</span><span class="hl-1">); </span><span class="hl-9">// Clear conversation history</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">changeToAgent</span><span class="hl-1">(</span><span class="hl-2">AgentName</span><span class="hl-1">.</span><span class="hl-2">TriageAgent</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Switch to Triage Agent</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">executeForce</span><span class="hl-1">(</span><span class="hl-2">lastMessage</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Re-execute with last message</span><br/><span class="hl-1"> </span><span class="hl-5">return</span><span class="hl-1">;</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">averageCost</span><span class="hl-1"> = </span><span class="hl-0">calculateAverageCost</span><span class="hl-1">(</span><span class="hl-2">orderList</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">commitToolOutput</span><span class="hl-1">(</span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-3">`Average cost for </span><span class="hl-4">${</span><span class="hl-2">coin</span><span class="hl-4">}</span><span class="hl-3">: </span><span class="hl-4">${</span><span class="hl-2">averageCost</span><span class="hl-4">}</span><span class="hl-3"> USD`</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">agentName</span><span class="hl-1">);</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>AddToCartTool</strong>: Adds pharmaceutical products and notifies the user:<pre><code class="javascript"><span class="hl-0">addTool</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">toolName:</span><span class="hl-1"> </span><span class="hl-2">ToolName</span><span class="hl-1">.</span><span class="hl-2">AddToCartTool</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">call</span><span class="hl-2">:</span><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> ({ </span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">params</span><span class="hl-1"> }) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">commitToolOutput</span><span class="hl-1">(</span><span class="hl-2">toolId</span><span class="hl-1">, </span><span class="hl-3">`Pharma product </span><span class="hl-4">${</span><span class="hl-2">params</span><span class="hl-10">.</span><span class="hl-2">title</span><span class="hl-4">}</span><span class="hl-3"> added successfully`</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Commit tool output</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">emit</span><span class="hl-1">(</span><span class="hl-3">`The product </span><span class="hl-4">${</span><span class="hl-2">params</span><span class="hl-10">.</span><span class="hl-2">title</span><span class="hl-4">}</span><span class="hl-3"> has been added to your cart`</span><span class="hl-1">, </span><span class="hl-2">clientId</span><span class="hl-1">); </span><span class="hl-9">// Emit message to user</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
</ul>
</li>
<li>
<p><strong>Key Functions Explained</strong>:</p>
<ul>
<li><strong><code>commitToolOutput(toolId, output, clientId, agentName)</code></strong>: Records the result of a tool’s execution in the conversation history, making it available to the agent or swarm. It’s often used to log actions or results (e.g., &quot;Switching to Tech Trends Agent&quot;).</li>
<li><strong><code>changeToAgent(agentName, clientId)</code></strong>: Switches the active agent for a client, enabling seamless transitions within a swarm (e.g., from <code>TriageAgent</code> to <code>TechTrendsAgent</code>).</li>
<li><strong><code>emit(message, clientId, agentName)</code></strong>: Sends a direct message to the user, typically for notifications or updates outside the main conversation flow (e.g., &quot;Product added to cart&quot;).</li>
<li><strong><code>execute(prompt, clientId, agentName)</code></strong>: Continues the LLM’s execution after a tool call, allowing further processing or user interaction (e.g., confirming details with the user).</li>
<li><strong><code>commitFlush(clientId, agentName)</code></strong>: Clears the conversation history for a client, resetting the context (e.g., before rerouting to a new agent).</li>
<li><strong><code>getLastUserMessage(clientId)</code></strong>: Retrieves the most recent user input, useful for maintaining context during agent switches or error handling.</li>
</ul>
</li>
<li>
<p><strong>Purpose</strong>: Tools enhance agent functionality, and these functions provide fine-grained control over conversation flow, agent transitions, and user communication.</p>
</li>
</ul>
<hr>
<a id="7-connecting-to-a-swarm" class="tsd-anchor"></a><h3 class="tsd-anchor-link">7. Connecting to a Swarm<a href="#7-connecting-to-a-swarm" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Connecting to a swarm allows clients (e.g., CLI, WebSocket, or HTTP interfaces) to interact with agents. <code>agent-swarm-kit</code> provides three primary methods: <code>session</code>, <code>makeConnection</code>, and <code>Chat</code>. Each supports disposal to clean up resources.</p>
<ul>
<li>
<p><strong>Session</strong>: Ideal for WebSocket-based connections, <code>session</code> creates a persistent session for real-time bidirectional communication.</p>
<ul>
<li><strong>Example</strong>: A WebSocket server connects to the <code>TestSwarm</code>:<pre><code class="javascript"><span class="hl-2">Bun</span><span class="hl-1">.</span><span class="hl-0">serve</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">req</span><span class="hl-1">, </span><span class="hl-2">server</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">clientId</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-0">URL</span><span class="hl-1">(</span><span class="hl-2">req</span><span class="hl-1">.</span><span class="hl-2">url</span><span class="hl-1">).</span><span class="hl-2">searchParams</span><span class="hl-1">.</span><span class="hl-0">get</span><span class="hl-1">(</span><span class="hl-3">&quot;clientId&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-2">server</span><span class="hl-1">.</span><span class="hl-0">upgrade</span><span class="hl-1">(</span><span class="hl-2">req</span><span class="hl-1">, { </span><span class="hl-2">data:</span><span class="hl-1"> { </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">session:</span><span class="hl-1"> </span><span class="hl-0">session</span><span class="hl-1">(</span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">SwarmName</span><span class="hl-1">.</span><span class="hl-2">TestSwarm</span><span class="hl-1">) } });</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-2">websocket:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-0">message</span><span class="hl-1">(</span><span class="hl-2">ws</span><span class="hl-1">, </span><span class="hl-2">message</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">answer</span><span class="hl-1"> = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-2">session</span><span class="hl-1">.</span><span class="hl-0">complete</span><span class="hl-1">(</span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-0">parse</span><span class="hl-1">(</span><span class="hl-2">message</span><span class="hl-1">).</span><span class="hl-2">data</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-0">send</span><span class="hl-1">(</span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">({ </span><span class="hl-2">data:</span><span class="hl-1"> </span><span class="hl-2">answer</span><span class="hl-1">, </span><span class="hl-2">agentName:</span><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">getAgentName</span><span class="hl-1">(</span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-2">clientId</span><span class="hl-1">) }));</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-0">close</span><span class="hl-1">(</span><span class="hl-2">ws</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-2">session</span><span class="hl-1">.</span><span class="hl-0">dispose</span><span class="hl-1">(); </span><span class="hl-9">// Dispose of the session</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Disposal</strong>: <code>dispose</code> cleans up session resources on closure.</li>
</ul>
</li>
<li>
<p><strong>MakeConnection</strong>: Used for WebSocket connections with a publish-subscribe model, paired with a <code>Subject</code> for event handling.</p>
<ul>
<li><strong>Example</strong>: A Hono-based WebSocket server connects to the <code>ROOT_SWARM</code>:<pre><code class="javascript"><span class="hl-2">app</span><span class="hl-1">.</span><span class="hl-0">get</span><span class="hl-1">(</span><span class="hl-3">&quot;/api/v1/session/:clientId&quot;</span><span class="hl-1">, </span><span class="hl-0">upgradeWebSocket</span><span class="hl-1">((</span><span class="hl-2">ctx</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">clientId</span><span class="hl-1"> = </span><span class="hl-2">ctx</span><span class="hl-1">.</span><span class="hl-2">req</span><span class="hl-1">.</span><span class="hl-0">param</span><span class="hl-1">(</span><span class="hl-3">&quot;clientId&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">incomingSubject</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-0">Subject</span><span class="hl-1">&lt;</span><span class="hl-7">string</span><span class="hl-1">&gt;();</span><br/><span class="hl-1"> </span><span class="hl-5">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">onOpen</span><span class="hl-1">(</span><span class="hl-2">_</span><span class="hl-1">, </span><span class="hl-2">ws</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">receive</span><span class="hl-1"> = </span><span class="hl-0">makeConnection</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> (</span><span class="hl-2">outgoing</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-0">send</span><span class="hl-1">(</span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">(</span><span class="hl-2">outgoing</span><span class="hl-1">)),</span><br/><span class="hl-1"> </span><span class="hl-2">clientId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">ROOT_SWARM</span><br/><span class="hl-1"> );</span><br/><span class="hl-1"> </span><span class="hl-2">incomingSubject</span><span class="hl-1">.</span><span class="hl-0">subscribe</span><span class="hl-1">(</span><span class="hl-2">receive</span><span class="hl-1">);</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-0">onMessage</span><span class="hl-1">(</span><span class="hl-2">event</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-2">incomingSubject</span><span class="hl-1">.</span><span class="hl-0">next</span><span class="hl-1">(</span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-0">parse</span><span class="hl-1">(</span><span class="hl-2">event</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-0">toString</span><span class="hl-1">()).</span><span class="hl-2">data</span><span class="hl-1">);</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-0">onClose</span><span class="hl-2">:</span><span class="hl-1"> () </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">disposeConnection</span><span class="hl-1">(</span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-6">ROOT_SWARM</span><span class="hl-1">); </span><span class="hl-9">// Dispose of the connection</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> };</span><br/><span class="hl-1">}));</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Disposal</strong>: <code>disposeConnection</code> terminates the connection on closure.</li>
</ul>
</li>
<li>
<p><strong>Chat</strong>: Designed for CLI or simple interactive interfaces, <code>Chat</code> provides a high-level API for conversations.</p>
<ul>
<li><strong>Example</strong>: A CLI interface connects to the <code>TradingSwarm</code>:<pre><code class="javascript"><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">CLIENT_ID</span><span class="hl-1"> = </span><span class="hl-3">&quot;binance-candle-chat&quot;</span><span class="hl-1">;</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">rl</span><span class="hl-1"> = </span><span class="hl-2">readline</span><span class="hl-1">.</span><span class="hl-0">createInterface</span><span class="hl-1">({ </span><span class="hl-2">input:</span><span class="hl-1"> </span><span class="hl-2">process</span><span class="hl-1">.</span><span class="hl-2">stdin</span><span class="hl-1">, </span><span class="hl-2">output:</span><span class="hl-1"> </span><span class="hl-2">process</span><span class="hl-1">.</span><span class="hl-2">stdout</span><span class="hl-1"> });</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-0">askQuestion</span><span class="hl-1"> = </span><span class="hl-4">async</span><span class="hl-1"> () </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">rl</span><span class="hl-1">.</span><span class="hl-0">question</span><span class="hl-1">(</span><span class="hl-3">`[</span><span class="hl-4">${</span><span class="hl-5">await</span><span class="hl-10"> </span><span class="hl-0">getAgentName</span><span class="hl-10">(</span><span class="hl-6">CLIENT_ID</span><span class="hl-10">)</span><span class="hl-4">}</span><span class="hl-3">] =&gt; `</span><span class="hl-1">, </span><span class="hl-4">async</span><span class="hl-1"> (</span><span class="hl-2">input</span><span class="hl-1">) </span><span class="hl-4">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">if</span><span class="hl-1"> (</span><span class="hl-2">input</span><span class="hl-1"> === </span><span class="hl-3">&quot;exit&quot;</span><span class="hl-1">) { </span><span class="hl-2">rl</span><span class="hl-1">.</span><span class="hl-0">close</span><span class="hl-1">(); </span><span class="hl-5">return</span><span class="hl-1">; }</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">output</span><span class="hl-1"> = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">Chat</span><span class="hl-1">.</span><span class="hl-0">sendMessage</span><span class="hl-1">(</span><span class="hl-6">CLIENT_ID</span><span class="hl-1">, </span><span class="hl-2">input</span><span class="hl-1">, </span><span class="hl-2">SwarmName</span><span class="hl-1">.</span><span class="hl-2">TradingSwarm</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-3">`[</span><span class="hl-4">${</span><span class="hl-5">await</span><span class="hl-10"> </span><span class="hl-0">getAgentName</span><span class="hl-10">(</span><span class="hl-6">CLIENT_ID</span><span class="hl-10">)</span><span class="hl-4">}</span><span class="hl-3">]: </span><span class="hl-4">${</span><span class="hl-2">output</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-0">askQuestion</span><span class="hl-1">();</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">};</span><br/><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">Chat</span><span class="hl-1">.</span><span class="hl-0">beginChat</span><span class="hl-1">(</span><span class="hl-6">CLIENT_ID</span><span class="hl-1">, </span><span class="hl-2">SwarmName</span><span class="hl-1">.</span><span class="hl-2">TradingSwarm</span><span class="hl-1">);</span><br/><span class="hl-0">askQuestion</span><span class="hl-1">();</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Disposal</strong>: Will be disposed automatically after 15 minutes of chat inactivity</li>
</ul>
</li>
<li>
<p><strong>Purpose</strong>: These methods enable flexible swarm integration, with proper disposal ensuring resource efficiency.</p>
</li>
</ul>
<hr>
<a id="8-why-developers-should-fork-the-repo-and-use-the-demo-folder" class="tsd-anchor"></a><h3 class="tsd-anchor-link">8. Why Developers Should Fork the Repo and Use the Demo Folder<a href="#8-why-developers-should-fork-the-repo-and-use-the-demo-folder" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><p>For developers looking to integrate <code>agent-swarm-kit</code> into real-life projects, forking the repository and exploring the <code>demo</code> folder is highly recommended. The official repository (assumed to be hosted on a platform like GitHub) provides a wealth of practical examples that demonstrate the framework’s capabilities in action. Here’s why this is important and how to get started:</p>
<ul>
<li>
<p><strong>Practical Examples</strong>: The <code>demo</code> folder typically contains fully functional code samples that showcase real-world use cases, such as:</p>
<ul>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/binance-candle-chat/"><strong>binance-candle-chat</strong></a>: A cryptocurrency trading swarm with a triage agent routing to specialized trader agents (BTC, ETH, BNB, XRP, SOL) that calculate buy/sell orders and predict trends using OpenAI completion.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/it-consulting-swarm/"><strong>it-consulting-swarm</strong></a>: A multi-agent system with a triage agent routing queries to specialized agents for tech trends, cybersecurity, environment, health, and finance, all powered by OpenAI completion.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/langchain-stream/"><strong>langchain-stream</strong></a>: A pharma sales demo with a triage agent using Cohere completion and LangChain for real-time token streaming, alongside Ollama and LMStudio, to assist with consultations and cart operations.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/redis-persist-chat/"><strong>redis-persist-chat</strong></a>: A chat system with a triage agent using Saiga Yandex GPT, persisting chat history and states (like Tic-tac-toe) in Redis, with policies to restrict sensitive topics.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/nginx-balancer-chat/"><strong>nginx-balancer-chat</strong></a>: A test environment demonstrating load balancing across 5 chat instances via Nginx, with a single agent reporting the server port using OpenAI completion.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/cohere-token-rotate/"><strong>cohere-token-rotate</strong></a>: A pharma sales system with a triage agent using Cohere completion and a token rotation mechanism (10 trial tokens in parallel) for optimized API performance.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/whisper-voice-chat/"><strong>whisper-voice-chat</strong></a>: A voice-based chat system using Whisper for real-time transcription and a single test agent powered by Nemotron Mini (via Ollama) to handle user interactions.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/telegram-ollama-chat/"><strong>telegram-ollama-chat</strong></a>: A Telegram-based pharma sales chatbot with a triage agent routing requests to a sales agent, both using Ollama for natural conversations and managing product data from a shared storage.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/repl-phone-seller/"><strong>repl-phone-seller</strong></a>: A REPL terminal app featuring a sales agent that helps users add phones to a cart, leveraging Ollama completions and tools for searching phones by keywords or diagonal size.</p>
</li>
<li>
<p><a href="https://github.com/tripolskypetr/agent-swarm-kit/tree/master/demo/client-server-chat/"><strong>client-server-chat</strong></a>: A WebSocket-based pharma sales demo with a single test agent using Saiga Yandex GPT to provide consultations and manage a cart.</p>
</li>
</ul>
</li>
<li>
<p><strong>Learning by Doing</strong>: By forking the repo, you can:</p>
<ul>
<li>Run the demos directly to see how components like agents, tools, and connections work together.</li>
<li>Modify the code to experiment with custom agents, tools, or completions tailored to your needs.</li>
<li>Use the demos as a starting point for your own projects, saving time on initial setup.</li>
</ul>
</li>
<li>
<p><strong>How to Get Started</strong>:</p>
<ol>
<li><strong>Fork the Repository</strong>: Visit the <a href="https://github.com/tripolskypetr/agent-swarm-kit">agent-swarm-kit GitHub page</a>, click &quot;Fork,&quot; and clone it to your local machine:<pre><code class="bash"><span class="hl-0">git</span><span class="hl-1"> </span><span class="hl-3">clone</span><span class="hl-1"> </span><span class="hl-3">https://github.com/tripolskypetr/agent-swarm-kit.git</span><br/><span class="hl-0">cd</span><span class="hl-1"> </span><span class="hl-3">agent-swarm-kit</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Install Dependencies</strong>: Use Bun or npm to install required packages:<pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">install</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Explore the Demo Folder</strong>: Navigate to the <code>demo</code> directory (assuming it exists) and review the README or run the scripts:<pre><code class="bash"><span class="hl-0">cd</span><span class="hl-1"> </span><span class="hl-3">demo/binance-candle-chat</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">install</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">start</span>
</code><button type="button">Copy</button></pre>
</li>
<li><strong>Customize and Build</strong>: Copy a demo script, tweak it for your use case (e.g., change the swarm or add a tool), and integrate it into your project.</li>
</ol>
</li>
<li>
<p><strong>Purpose</strong>: Forking the repo and using the <code>demo</code> folder provides a hands-on way to learn the framework, accelerate development, and adapt proven examples to your specific requirements.</p>
</li>
</ul>
<hr>
<a id="putting-it-all-together-a-simple-example" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Putting It All Together: A Simple Example<a href="#putting-it-all-together-a-simple-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Let’s create a basic swarm with a WebSocket connection and a tool:</p>
<ol>
<li>
<p><strong>Define a Completion</strong>:</p>
<pre><code class="javascript"><span class="hl-5">import</span><span class="hl-1"> { </span><span class="hl-2">Adapter</span><span class="hl-1">, </span><span class="hl-2">addCompletion</span><span class="hl-1">, </span><span class="hl-2">addAgent</span><span class="hl-1">, </span><span class="hl-2">addSwarm</span><span class="hl-1">, </span><span class="hl-2">addTool</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-3">&quot;agent-swarm-kit&quot;</span><span class="hl-1">;</span><br/><span class="hl-5">import</span><span class="hl-1"> </span><span class="hl-2">OpenAI</span><span class="hl-1"> </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-3">&quot;openai&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">openai</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-0">OpenAI</span><span class="hl-1">({ </span><span class="hl-2">apiKey:</span><span class="hl-1"> </span><span class="hl-2">process</span><span class="hl-1">.</span><span class="hl-2">env</span><span class="hl-1">.</span><span class="hl-6">OPENAI_API_KEY</span><span class="hl-1"> });</span><br/><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">SUPPORT_COMPLETION</span><span class="hl-1"> = </span><span class="hl-0">addCompletion</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">completionName:</span><span class="hl-1"> </span><span class="hl-3">&quot;support_completion&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">getCompletion:</span><span class="hl-1"> </span><span class="hl-2">Adapter</span><span class="hl-1">.</span><span class="hl-0">fromOpenAI</span><span class="hl-1">(</span><span class="hl-2">openai</span><span class="hl-1">),</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li>
<p><strong>Create an Agent with a Tool</strong>:</p>
<pre><code class="javascript"><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">SUPPORT_AGENT</span><span class="hl-1"> = </span><span class="hl-0">addAgent</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">agentName:</span><span class="hl-1"> </span><span class="hl-3">&quot;support_agent&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">completion:</span><span class="hl-1"> </span><span class="hl-6">SUPPORT_COMPLETION</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">prompt:</span><span class="hl-1"> </span><span class="hl-3">&quot;You are a customer support agent. Assist the user with their query.&quot;</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li>
<p><strong>Build a Swarm</strong>:</p>
<pre><code class="javascript"><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">SUPPORT_SWARM</span><span class="hl-1"> = </span><span class="hl-0">addSwarm</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-2">swarmName:</span><span class="hl-1"> </span><span class="hl-3">&quot;support_swarm&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">agentList:</span><span class="hl-1"> [</span><span class="hl-6">SUPPORT_AGENT</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-2">defaultAgent:</span><span class="hl-1"> </span><span class="hl-6">SUPPORT_AGENT</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
<li>
<p><strong>Connect via WebSocket</strong>:</p>
<pre><code class="javascript"><span class="hl-5">import</span><span class="hl-1"> { </span><span class="hl-2">session</span><span class="hl-1">, </span><span class="hl-2">getAgentName</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-3">&quot;agent-swarm-kit&quot;</span><span class="hl-1">;</span><br/><span class="hl-2">Bun</span><span class="hl-1">.</span><span class="hl-0">serve</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">req</span><span class="hl-1">, </span><span class="hl-2">server</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">clientId</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-0">URL</span><span class="hl-1">(</span><span class="hl-2">req</span><span class="hl-1">.</span><span class="hl-2">url</span><span class="hl-1">).</span><span class="hl-2">searchParams</span><span class="hl-1">.</span><span class="hl-0">get</span><span class="hl-1">(</span><span class="hl-3">&quot;clientId&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-2">server</span><span class="hl-1">.</span><span class="hl-0">upgrade</span><span class="hl-1">(</span><span class="hl-2">req</span><span class="hl-1">, { </span><span class="hl-2">data:</span><span class="hl-1"> { </span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-2">session:</span><span class="hl-1"> </span><span class="hl-0">session</span><span class="hl-1">(</span><span class="hl-2">clientId</span><span class="hl-1">, </span><span class="hl-6">SUPPORT_SWARM</span><span class="hl-1">) } });</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-2">websocket:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-0">message</span><span class="hl-1">(</span><span class="hl-2">ws</span><span class="hl-1">, </span><span class="hl-2">message</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-6">answer</span><span class="hl-1"> = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-2">session</span><span class="hl-1">.</span><span class="hl-0">complete</span><span class="hl-1">(</span><span class="hl-2">message</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-0">send</span><span class="hl-1">(</span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">({ </span><span class="hl-2">data:</span><span class="hl-1"> </span><span class="hl-2">answer</span><span class="hl-1">, </span><span class="hl-2">agentName:</span><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-0">getAgentName</span><span class="hl-1">(</span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-2">clientId</span><span class="hl-1">) }));</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-0">close</span><span class="hl-1">(</span><span class="hl-2">ws</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-2">ws</span><span class="hl-1">.</span><span class="hl-2">data</span><span class="hl-1">.</span><span class="hl-2">session</span><span class="hl-1">.</span><span class="hl-0">dispose</span><span class="hl-1">();</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-2">port:</span><span class="hl-1"> </span><span class="hl-8">1337</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
</code><button type="button">Copy</button></pre>
</li>
</ol>
<p>This setup provides a WebSocket-based support chatbot with a greeting tool, demonstrating key functions.</p>
<hr>
<a id="conclusion" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Conclusion<a href="#conclusion" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p><code>agent-swarm-kit</code> offers a robust framework for building agent-based systems. By mastering storages, completors, embedders, agents, swarms, tools, swarm connections, operational functions like <code>commitToolOutput</code> and <code>changeToAgent</code>, and leveraging the <code>demo</code> folder from a forked repository, you can create tailored applications for various use cases. Start small, explore the demos, and scale up as needed.</p>
<p>Happy coding!</p>
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#getting-started"><span>Getting <wbr/>Started</span></a><a href="#ask-ai"><span>Ask AI</span></a><ul><li><a href="#core-components"><span>Core <wbr/>Components</span></a></li><li><ul><li><a href="#1-storages"><span>1. <wbr/>Storages</span></a></li><li><a href="#2-completors-completions"><span>2. <wbr/>Completors (<wbr/>Completions)</span></a></li><li><a href="#3-embedders"><span>3. <wbr/>Embedders</span></a></li><li><a href="#4-agents"><span>4. <wbr/>Agents</span></a></li><li><a href="#5-swarms"><span>5. <wbr/>Swarms</span></a></li><li><a href="#6-tools"><span>6. <wbr/>Tools</span></a></li><li><a href="#7-connecting-to-a-swarm"><span>7. <wbr/>Connecting to a <wbr/>Swarm</span></a></li><li><a href="#8-why-developers-should-fork-the-repo-and-use-the-demo-folder"><span>8. <wbr/>Why <wbr/>Developers <wbr/>Should <wbr/>Fork the <wbr/>Repo and <wbr/>Use the <wbr/>Demo <wbr/>Folder</span></a></li></ul></li><li><a href="#putting-it-all-together-a-simple-example"><span>Putting <wbr/>It <wbr/>All <wbr/>Together: <wbr/>A <wbr/>Simple <wbr/>Example</span></a></li><li><a href="#conclusion"><span>Conclusion</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">agent-swarm-kit</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(100273846, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true,
ecommerce:"dataLayer"
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/100273846" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-85RYYZDT35"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-85RYYZDT35');
</script>