Files
copilotkit__copilotkit/showcase/integrations/ag2/docs/setup/frontend-tools-setup.mdx
Benjamin Taylor cf060da900 docs(showcase): state the frontend-tool requirement for the last nine frameworks (closes OSS-1036)
`generative-ui/tool-based` is the terminal page every onboarding run fetches,
and its `## How it works in code` section renders a per-framework snippet.
Nine frameworks shipped no snippet, so the section rendered nothing and the
silence meant both "no agent-side wiring is needed" and "wiring is needed and
nobody wrote it down".

Each verdict was read out of the pinned adapter rather than the docs:

- ag2: `run_stream` builds `client_tools` from `incoming.tools`.
- mastra: the adapter reduces `input.tools` into `clientTools`.
- strands, strands-typescript: a proxy tool per forwarded tool is registered
  in the agent's tool registry, and a native tool of the same name wins.
- agno: its AG-UI interface never reads `RunAgentInput.tools`, so a component
  needs an `external_execution=True` stub and a `db` for the paused run.
- deepagents: `CopilotKitMiddleware` merges `copilotkit.actions` into
  `request.tools`, so the middleware is load-bearing.
- built-in-agent: config mode forwards for you, a factory does not. It is also
  the root framework, so this is the unscoped default page.

The two .NET columns rest on their own demo agents, which render charts with
an empty tool list. No .NET SDK was available to read the NuGet hosting
package.

REQUIREMENT_NOT_ESTABLISHED is now empty. The shape test pins each snippet,
and setup-concept.test.ts no longer depends on ag2 being an open gap.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 16:22:29 -05:00

45 lines
1.4 KiB
Plaintext

<Steps>
<Step>
### Nothing to wire on the agent
AG2's AG-UI stream surfaces frontend-registered tools to the model on every
run, so the agent declares none of its own. A component registered with
`useComponent` reaches the model through the AG-UI request payload, and the
model calls it by name. Leave `functions` empty when the only tools in play
are frontend ones.
```python title="src/agents/chart_agent.py"
from autogen import ConversableAgent, LLMConfig
from autogen.ag_ui import AGUIStream
chart_agent = ConversableAgent(
name="chart_agent",
system_message=SYSTEM_PROMPT,
llm_config=LLMConfig({"model": "gpt-4o-mini", "stream": True}),
human_input_mode="NEVER",
functions=[],
)
chart_stream = AGUIStream(chart_agent)
```
</Step>
<Step>
### Tell the model when to call it
This is the part that is easy to miss. The tool arrives on every run, but a
model with no instruction about it will answer in prose and never call it.
Name the tool in `system_message` and say what it is for.
```python title="src/agents/chart_agent.py"
SYSTEM_PROMPT = (
"You are a data visualization assistant. "
"When the user asks for a chart, call `render_bar_chart` with a "
"concise title and a `data` array of `{label, value}` items. "
"Keep chat responses brief and let the chart do the talking."
)
```
</Step>
</Steps>