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

# Agno

> Run an Agno agent on Tilde with the trytilde-agno adapter.

The Agno adapter runs an Agno `Agent` on Tilde. It works with Agno 3.

<Card title="Example agent" icon="github" href="https://github.com/trytilde/tilde/tree/main/sdk/py/examples/example-agent-agno" horizontal>
  A complete Agno agent with bundled tools and skills, in the Tilde open-source repository.
</Card>

## Install

```bash theme={"system"}
pip install trytilde trytilde-agno agno openai
```

## How it works

Pass `tilde_agno(ctx, agent)` to each run. It adds the channel's tools and the agent's Tilde and bundled tools, and binds the run to the Tilde session so stopping it cancels the run.

Wrap the agent's skills with `TildeSkills`. Agno then loads your own skills and the agent's Tilde skills together.

```python agent.py theme={"system"}
from pathlib import Path

import tilde
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.skills import LocalSkills
from tilde_agno import TildeSkills, convert_to_agno_messages, tilde_agno

from bundled_tools import TOOLS

INFERENCE = tilde.inference("default")

responder = Agent(
    model=OpenAIChat(
        id="gpt-4o-mini",
        base_url=INFERENCE.base_url,
        api_key=INFERENCE.api_key,
        http_client=INFERENCE.async_client(),
    ),
    instructions="You are a support assistant. Reply with the channel tools.",
    skills=TildeSkills([LocalSkills(str(Path(__file__).parent / "skills"))]),
    tool_call_limit=8,
    telemetry=False,
)

async def respond(ctx: tilde.AgentContext) -> None:
    history = await ctx.message.history()
    messages = await convert_to_agno_messages(history.items, context=ctx)
    await responder.arun(input=messages, **await tilde_agno(ctx, responder, bundled=TOOLS))
```

## Feature compatibility

| Feature | Support | Notes |
| - | - | - |
| Inference gateway | Yes | |
| Framework trace spans | Partial | Tilde records its own spans. Set `telemetry=False` to stop Agno sending its own telemetry. |
| Tilde and channel tools | Yes | |
| Bundled tools | Yes | Pass functions or toolkits to `define_tools`. Agno tools carry no metadata, so pass summaries as options. |
| Prompt versioning | Yes | Registers an agent's `instructions`, `description`, and `system_message`, and the prompts of a `Team`. |
| Native skills | Yes | `LocalSkills` folders ship at deploy. Tilde skills load through `TildeSkills`. |
| New input during a run | Partial | See below. |

## Limitations

* **New input during a run.** Agno has no hook between model steps. Tilde adds new user input to the next Tilde tool result instead, so the model sees it only after it calls a tool. An agent-level `tool_hooks` setting replaces this behaviour.
* **History.** Leave `add_history_to_context` off. Tilde supplies the history.
* **Tool hooks.** Tilde records calls through tool hooks. Errors inside those hooks are not surfaced.
* **Toolkit instructions.** The instructions attached to an Agno toolkit are not carried over to Tilde.
