> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cogniagent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Capabilities

> Give your agents access to knowledge bases, integration actions, and custom tools.

Out of the box, an actor can have a conversation — but it can't *do* much. Capabilities are how you give each actor superpowers: search your knowledge, send a Slack message, run a refund calculation, kick off a workflow.

There are three capability families:

<CardGroup cols={3}>
  <Card title="Knowledge bases" icon="database">
    Search your indexed documents — product docs, policy PDFs, FAQs.
  </Card>

  <Card title="Integrations" icon="plug">
    Call actions on connected apps — Gmail, Slack, Salesforce, Shopify, 2,700+ more.
  </Card>

  <Card title="Custom tools" icon="wrench">
    Run a Python snippet, hit an HTTP endpoint, or trigger a CogniAgent workflow.
  </Card>
</CardGroup>

Each capability becomes a **tool** the actor can call during its turn. The LLM decides when to use it.

## Opening the capabilities drawer

In an actor's config panel, click **Configure Capabilities**.

<Frame caption="The capabilities drawer with three tabs.">
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-drawer.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=67750ed389553dcb5f25ac8f491a2447" alt="Capabilities drawer Knowledge tab" width="1471" height="1225" data-path="images/conversation-flows/capabilities-drawer.png" />
</Frame>

## Knowledge bases

Pick a knowledge base from your workspace's [Knowledge Base](/features/knowledge-base) library. The actor gets a `search_knowledge_base` tool it can call whenever it needs to look something up.

Fields when you add a KB:

| Field               | What it does                                                                       |
| ------------------- | ---------------------------------------------------------------------------------- |
| **Knowledge Base**  | Pick from the dropdown.                                                            |
| **Description**     | One-line note about *when* this actor should search it. The LLM uses it to decide. |
| **Active**          | Toggle to enable / disable without removing.                                       |
| **Apply Reranking** | More accurate but slightly slower searches. Default on.                            |

<Tip>
  Add **multiple** knowledge bases per actor when they serve different purposes. The LLM sees them as separate tools (e.g. `search_product_docs` and `search_policy_documents`) and picks the right one.
</Tip>

## Integrations

Integrations give an actor the ability to *act* on connected apps.

<Frame>
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-integrations.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=8c32c094072e8c7f9948ba3f696584f9" alt="Capabilities Integrations tab" width="1471" height="1225" data-path="images/conversation-flows/capabilities-integrations.png" />
</Frame>

Three-step flow:

<Steps>
  <Step title="Pick an app">
    Browse the catalog (2,700+ apps). Search by name — Gmail, Slack, Salesforce, etc.

    <Frame caption="Browse or search the integrations catalog. Each tile shows how many actions the app exposes.">
      <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-integrations-app-picker.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=e3146bfceace5ae129458a30d94befa5" alt="Integration app picker" width="1440" height="1200" data-path="images/conversation-flows/capabilities-integrations-app-picker.png" />
    </Frame>

    <Frame caption="Narrow the catalog by typing a name — e.g. 'gmail'.">
      <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-integrations-app-search.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=9472d2d8ee720cd0e9b52524a93fe281" alt="Integration app picker filtered to Gmail" width="1440" height="1200" data-path="images/conversation-flows/capabilities-integrations-app-search.png" />
    </Frame>
  </Step>

  <Step title="Pick a connection">
    Choose an existing connection or set up a new one. Connections live in the [Integrations](/features/integrations) page of your workspace.
  </Step>

  <Step title="Pick which actions to expose">
    Each app has many actions. You choose which ones this actor can call.

    For example, Gmail has `send-email`, `list-messages`, `search-threads`, etc. If this actor only ever needs to send emails, give it only `send-email`. Narrow scope = safer behaviour.

    <Frame caption="Toggle individual actions on or off — only checked actions are exposed to the actor as tools.">
      <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-integrations-gmail-actions.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=19d0f9cb2e09cdf787c9438e93b0f094" alt="Gmail actions selector" width="1440" height="1200" data-path="images/conversation-flows/capabilities-integrations-gmail-actions.png" />
    </Frame>
  </Step>
</Steps>

Each chosen action becomes a named tool the actor can call (e.g. `send-email`). The LLM picks the tool's arguments — `to`, `subject`, `body` — based on the actor's instructions and the conversation context.

### A worked example

A "Send confirmation email" actor:

* **Capability:** Gmail → connection `Acme Gmail` → action `send-email`.
* **Instructions:** *"After collecting the user's name, email, and request, send them a confirmation email summarizing what we've captured. Use the send-email tool."*

When the user has provided their details, the actor calls `send-email` with `to=<user's email>`, `subject="We received your request"`, and a body containing the summary. The email lands in the user's inbox; the actor confirms in chat.

## Custom tools

Three types:

<Frame>
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-customtools.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=0b35b18dc76aa49121b33a8a3a0d91bf" alt="Capabilities Custom Tools tab" width="1471" height="1225" data-path="images/conversation-flows/capabilities-customtools.png" />
</Frame>

Click **Add** to pick which kind of custom tool to add:

<Frame caption="The Add menu in the Custom Tools tab — pick Execute Workflow, Execute Code, or HTTP Request.">
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-customtools-add-menu.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=1c679050a6494adeef320bcc8b4a6bbc" alt="Custom tools Add menu" width="1440" height="1200" data-path="images/conversation-flows/capabilities-customtools-add-menu.png" />
</Frame>

### Execute Code

A Python snippet the actor can run. Sandboxed; preinstalled with common libraries.

```python theme={null}
output_data({
    'refund_amount': args['monthly_price'] * args['months_remaining']
})
```

The LLM provides the `args` based on the conversation; the snippet returns structured data back.

**Best for:** calculations, formatting, data transformations.

<Frame caption="Execute Code form — name, description, parameters, and a Python editor. The LLM fills `args`; you write what to return via `output_data(...)`.">
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-customtool-execute-code-form.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=824c9dfa450abe35027f1a49dca7b468" alt="Execute Code custom tool form" width="1440" height="1200" data-path="images/conversation-flows/capabilities-customtool-execute-code-form.png" />
</Frame>

### Execute Workflow

Kicks off another CogniAgent [workflow](/features/applications) by id. Optionally waits for it to finish and returns the result.

**Best for:** deterministic multi-step processes you've already built as workflows — refund processing, lead scoring, report generation.

<Frame caption="Execute Workflow form — pick the deployed workflow and map the LLM's arguments to its inputs.">
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-customtool-execute-workflow-form.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=b9101ba3030d262c8942c4d521bd7b70" alt="Execute Workflow custom tool form" width="1440" height="1200" data-path="images/conversation-flows/capabilities-customtool-execute-workflow-form.png" />
</Frame>

### HTTP Request

Make an HTTP call to an internal API or third-party endpoint. Configure method, URL, headers, body schema; parse the response.

**Best for:** lightweight integrations to APIs you control, or one-off endpoints that don't justify a full integration.

<Frame caption="HTTP Request form — method, URL, headers, parameters, and an optional response parser.">
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-customtool-http-request-form.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=6c281f052ede703b1f636562e6778202" alt="HTTP Request custom tool form" width="1440" height="1200" data-path="images/conversation-flows/capabilities-customtool-http-request-form.png" />
</Frame>

## Built-in tools every actor has

Independent of what you configure, every actor automatically has the routing tools its focus mode allows: `done` (signal completion), `hand off to a sibling`, `escalate to global`, `ask user to clarify`. You don't see these in the capabilities drawer — they're managed by the platform.

## Global vs per-actor capabilities

You can also configure capabilities at the **flow level** — every actor inherits them.

<Frame>
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/conversation-flows/capabilities-tab.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=7fb7c61d9d28f2a0205e5596091f7fa1" alt="Flow settings Capabilities tab" width="1471" height="1225" data-path="images/conversation-flows/capabilities-tab.png" />
</Frame>

Use the flow-level **Capabilities** tab in Flow settings when:

* Every actor needs the same knowledge base (e.g. company FAQ).
* You're configuring an integration once that multiple actors will use (e.g. Slack notifier).

Use per-actor capabilities when:

* Only one actor needs the capability (e.g. only Returns Specialist needs Shopify access).
* Access should be restricted for privacy / scope reasons.

## Anti-patterns

<Warning>
  **Don't expose every action from an app.** If you give an actor "all of Gmail", the LLM will call `delete-thread` when "delete this conversation" comes up in chat. Narrow scope to the actions the actor genuinely needs.
</Warning>

<Warning>
  **Don't put behaviour into tool names.** Tool names should describe what they *do*, not when to use them — "when to use" goes in the actor's instructions. The LLM reads instructions, then picks tools.
</Warning>

## Next

<CardGroup cols={2}>
  <Card title="Step builder" icon="list-check" href="/conversation-flows/build/step-builder">
    Script an actor's behaviour step-by-step.
  </Card>

  <Card title="Flow settings" icon="gear" href="/conversation-flows/build/flow-settings">
    Flow-level context, knowledge, and integrations.
  </Card>
</CardGroup>
