These steps assume you already have a Trigger.dev project with the SDK installed and the CLI authenticated — if you don’t, follow Manual setup (orDocumentation Index
Fetch the complete documentation index at: https://trigger.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
npx trigger.dev@latest init in an existing project) first. You should be able to run pnpm exec trigger dev from your project root before continuing.
Define a chat agent
Use
chat.agent from @trigger.dev/sdk/ai to define an agent that handles chat messages. The run function receives ModelMessage[] (already converted from the frontend’s UIMessage[]) — pass them directly to streamText.If you return a StreamTextResult, it’s automatically piped to the frontend.trigger/chat.ts
Add two server actions
On your server (e.g. as Next.js server actions), expose two helpers the transport will call: one that creates the chat session, and one that mints a fresh session-scoped access token for refresh.The browser never holds your environment’s secret key — both helpers run on your server, where customer-side authorization (per-user, per-plan, etc.) lives alongside any DB writes you want to pair with session creation.
app/actions.ts
Use in the frontend
Use the
useTriggerChatTransport hook from @trigger.dev/sdk/chat/react to create a memoized transport instance, then pass it to useChat. Wire both server actions into the transport’s accessToken and startSession callbacks.The example below uses the Next.js @/* path alias for imports from @/trigger/chat and @/app/actions. If you’re not using Next.js (or haven’t configured the alias), swap them for relative imports.app/components/chat.tsx
Next steps
- Backend — Lifecycle hooks, persistence, session iterator, raw task primitives
- Frontend — Session management, client data, reconnection
- Types —
chat.withUIMessage,InferChatUIMessage, and related typing chat.local— Per-run typed state across hooks, run, tools, subtasks- Sub-agents pattern — Subtask-as-tool,
target: "root"streaming,ai.toolExecutehelpers - Background injection —
chat.inject()andchat.defer()for between-turn work

