ai
Version:
AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.
205 lines (167 loc) • 5.58 kB
text/mdx
---
title: runAgentTUI
description: API Reference for the runAgentTUI function.
---
# `runAgentTUI()`
Runs a `ToolLoopAgent` in an interactive terminal UI. The terminal UI reads user
prompts, streams assistant responses, renders markdown, displays tool and
reasoning sections, and handles manual tool approvals.
`runAgentTUI` runs until the user exits with `Esc` or `Ctrl+C`.
```ts
import { openai } from '@ai-sdk/openai';
import { runAgentTUI } from '@ai-sdk/tui';
import { ToolLoopAgent } from 'ai';
const agent = new ToolLoopAgent({
model: openai('gpt-5'),
instructions: 'You are a helpful terminal assistant.',
});
await runAgentTUI({
title: 'Assistant',
agent,
});
```
## Import
<Snippet text={`import { runAgentTUI } from "@ai-sdk/tui"`} prompt={false} />
## API Signature
### Parameters
<PropertiesTable
content={[
{
name: 'options',
type: 'RunAgentTUIOptions',
isRequired: true,
description: 'Options for starting the terminal UI.',
properties: [
{
type: 'RunAgentTUIOptions',
parameters: [
{
name: 'agent',
type: 'AgentTUIAgent',
isRequired: true,
description:
'The agent to run. The agent must not require per-call options and must not use structured output.',
},
{
name: 'title',
type: 'string',
isOptional: true,
description:
'The title shown in the terminal UI. If omitted, no title is shown.',
},
{
name: 'tools',
type: "'full' | 'collapsed' | 'auto-collapsed' | 'hidden'",
isOptional: true,
description:
'Controls how tool call sections are displayed. Defaults to `auto-collapsed`.',
},
{
name: 'reasoning',
type: "'full' | 'collapsed' | 'auto-collapsed' | 'hidden'",
isOptional: true,
description:
'Controls how reasoning sections are displayed. Defaults to `auto-collapsed`.',
},
{
name: 'responseStatistics',
type: "'outputTokenCount' | 'outputTokensPerSecond'",
isOptional: true,
description:
'Controls which response statistic is shown in response headers. Defaults to `outputTokensPerSecond`.',
},
{
name: 'contextSize',
type: 'number',
isOptional: true,
description:
'The model context window size in tokens. When provided, the terminal UI shows total token usage as a percentage of this context window.',
},
{
name: 'sandbox',
type: 'Experimental_SandboxSession',
isOptional: true,
description:
'Sandbox session that is passed through to the agent as `experimental_sandbox` on every call.',
},
],
},
],
},
]}
/>
### Returns
<PropertiesTable
content={[
{
name: 'returns',
type: 'Promise<void>',
description: 'A promise that resolves when the terminal UI exits.',
},
]}
/>
## Types
### `AgentTUIAgent`
An agent that is compatible with the terminal UI:
```ts
type AgentTUIAgent = Agent<undefined, any, any, never>;
```
This means the agent has no per-call options and no structured output.
### `TerminalPartDisplayMode`
Controls how terminal sections are displayed:
```ts
type TerminalPartDisplayMode =
| 'full'
| 'collapsed'
| 'auto-collapsed'
| 'hidden';
```
- `"full"`: Show the section header and full content.
- `"collapsed"`: Show only the section header.
- `"auto-collapsed"`: Show the latest section expanded until another visible
section appears, then collapse it.
- `"hidden"`: Omit the section entirely.
### `ResponseStatisticsMode`
Controls which response statistic is shown:
```ts
type ResponseStatisticsMode = 'outputTokenCount' | 'outputTokensPerSecond';
```
- `"outputTokenCount"`: Show the number of output tokens in the response.
- `"outputTokensPerSecond"`: Show output token throughput for the response.
## Example with Tool Display Options
```ts
await runAgentTUI({
title: 'Assistant',
agent,
tools: 'auto-collapsed',
reasoning: 'collapsed',
responseStatistics: 'outputTokenCount',
contextSize: 200_000,
});
```
## Example with Sandbox
```ts
import { createJustBashSandbox } from '@ai-sdk/sandbox-just-bash';
const sandboxSession = await createJustBashSandbox({
cwd: '/home/user',
}).createSession();
await runAgentTUI({
title: 'Sandbox Assistant',
agent,
sandbox: sandboxSession.restricted(),
});
```
The sandbox is forwarded to every `agent.stream()` call as
`experimental_sandbox`, making it available to tool description functions and
tool `execute` functions. Include the sandbox description in the agent
instructions when the model should know sandbox-specific details such as the
working directory or exposed ports.
## Compatibility
Use `runAgentTUI` for agents that can run directly from free-form user input.
Use `agent.generate()` or `agent.stream()` directly when you need fixed prompts,
per-call options, structured output, custom result inspection, or custom stream
processing.
## Related
- [Terminal UI guide](/docs/agents/terminal-ui)
- [Building Agents](/docs/agents/building-agents)
- [ToolLoopAgent guide](/docs/agents/overview#tooloopagent-class)