promptCompare
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v182View latest version
A composable component for displaying AI agent configuration with model, instructions, tools, and output schema.
The Agent component displays an interface for showing AI agent configuration
details. It's designed to represent a configured agent from the AI SDK, showing
the agent's model, system instructions, available tools (with expandable input
schemas), and output schema.
See scripts/agent.tsx for this example.
npx ai-elements@latest add agent
Display an agent's configuration alongside your chat interface. Tools are displayed in an accordion where clicking the description expands to show the input schema.
"use client";
import { tool } from "ai";
import { z } from "zod";
import {
Agent,
AgentContent,
AgentHeader,
AgentInstructions,
AgentOutput,
AgentTool,
AgentTools,
} from "@/components/ai-elements/agent";
const webSearch = tool({
description: "Search the web for information",
inputSchema: z.object({
query: z.string().describe("The search query"),
}),
});
const readUrl = tool({
description: "Read and parse content from a URL",
inputSchema: z.object({
url: z.string().url().describe("The URL to read"),
}),
});
const outputSchema = `z.object({
sentiment: z.enum(['positive', 'negative', 'neutral']),
score: z.number(),
summary: z.string(),
})`;
export default function Page() {
return (
<Agent>
<AgentHeader
name="Sentiment Analyzer"
model="anthropic/claude-sonnet-4-5"
/>
<AgentContent>
<AgentInstructions>
Analyze the sentiment of the provided text and return a structured
analysis with sentiment classification, confidence score, and summary.
</AgentInstructions>
<AgentTools>
<AgentTool tool={webSearch} value="web_search" />
<AgentTool tool={readUrl} value="read_url" />
</AgentTools>
<AgentOutput schema={outputSchema} />
</AgentContent>
</Agent>
);
}
- Model badge in header
- Instructions rendered as markdown
- Tools displayed as accordion items with expandable input schemas
- Output schema display with syntax highlighting
- Composable structure for flexible layouts
- Works with AI SDK
Tooltype
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps< | - | Any props are spread to the root div. |
| Prop | Type | Default | Description |
|---|---|---|---|
name | string | Required | The name of the agent. |
model | string | - | The model identifier (e.g. |
...props | React.ComponentProps< | - | Any other props are spread to the container div. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps< | - | Any other props are spread to the container div. |
| Prop | Type | Default | Description |
|---|---|---|---|
children | string | Required | The instruction text. |
...props | React.ComponentProps< | - | Any other props are spread to the container div. |
| Prop | Type | Default | Description |
|---|---|---|---|
...props | React.ComponentProps<typeof Accordion> | - | Any other props are spread to the Accordion component. |
| Prop | Type | Default | Description |
|---|---|---|---|
tool | Tool | Required | The tool object from the AI SDK containing description and inputSchema. |
value | string | Required | Unique identifier for the accordion item. |
...props | React.ComponentProps<typeof AccordionItem> | - | Any other props are spread to the AccordionItem component. |
| Prop | Type | Default | Description |
|---|---|---|---|
schema | string | Required | The output schema as a string (displayed with syntax highlighting). |
...props | React.ComponentProps< | - | Any other props are spread to the container div. |