-
chore: release v4.5.0 (#3998)
released this
2026-07-02 10:26:52 +00:00 | 431 commits to main since this releaseTrigger.dev v4.5.0
4.5.0 is the GA of the AI Agents platform. Everything built during the
prerelease line (durable agents, Sessions, AI Prompts) is now stable on
thelatesttag, alongside a set of SDK and runtime improvements.AI Agents (
chat.agent)Run Vercel AI SDK chat completions as durable Trigger.dev tasks instead
of fragile API routes. A conversation runs as one long-lived task keyed
onchatId, so it survives page refreshes, network blips, redeploys,
and crashes, and every turn is a span in the dashboard.import { chat } from "@trigger.dev/sdk/ai"; import { streamText, stepCountIs } from "ai"; import { anthropic } from "@ai-sdk/anthropic"; export const myChat = chat.agent({ id: "my-chat", run: async ({ messages, signal }) => { return streamText({ ...chat.toStreamTextOptions(), // system prompt, compaction, steering, telemetry model: anthropic("claude-sonnet-4-5"), messages, abortSignal: signal, stopWhen: stepCountIs(15), }); }, });Sessions
The durable primitive underneath
chat.agent, usable on its own: a
run-aware, bidirectional stream channel keyed on a stableexternalId
whose.in/.outstreams survive run boundaries (suspend, crash,
idle-timeout, redeploy). One Session spans many runs, which makes it a
good fit for agent inboxes and approval flows.import { sessions } from "@trigger.dev/sdk"; // Create the session and trigger its first run (idempotent on externalId) await sessions.start({ type: "inbox", externalId: userId, taskIdentifier: "inbox-agent", }); const session = sessions.open(userId); await session.in.send({ text: "hello" }); const stream = await session.out.read({ signal: AbortSignal.timeout(30_000) }); for await (const chunk of stream) console.log(chunk); // durable across run swapsAI Prompts
Define prompt templates as code, versioned on every deploy, and override
the text or model from the dashboard without redeploying
(environment-scoped). Each generation links back to its prompt version
for usage, cost, and latency.import { prompts } from "@trigger.dev/sdk"; import { z } from "zod"; export const supportPrompt = prompts.define({ id: "customer-support", model: "gpt-4o", variables: z.object({ customerName: z.string(), issue: z.string() }), content: `You are a support agent for Acme. Customer: {{customerName}} Issue: {{issue}}`, }); // Honors any active dashboard override, else the current deployed version const resolved = await supportPrompt.resolve({ customerName: "Alice", issue: "Can't log in" }); // resolved.text, resolved.model, resolved.versionuseChatintegrationuseTriggerChatTransportis a Vercel AI SDKChatTransportthat runs
useChatover Trigger.dev realtime with no API routes. Text, tool
calls, reasoning, anddata-*parts stream natively, and it works with
AI SDK v5, v6, and now v7.First-turn fast path (
chat.headStart)Runs the first turn in your warm server process while the agent boots in
parallel, cutting cold-start time-to-first-chunk roughly in half
(measured ~2.8s to ~1.2s). Available via the new
@trigger.dev/sdk/chat-serversubpath.Human-in-the-loop, stop, and steering
The agent control surface: tool approvals (
needsApproval+
addToolApprovalResponse), client-driven stop-generation, mid-execution
steering (pendingMessages), and between-turn context injection
(chat.inject/chat.defer), all durable across the conversation.Agent Skills
skills.define({ id, path })bundles aSKILL.mdfolder into your
deploy image. The agent gets a one-line summary up front and loads the
full instructions plus scopedbash/readFiletools on demand
(progressive disclosure), so a capability is something the model reaches
for rather than a pre-declared typed tool.trigger skillsfor coding assistantstrigger skillsinstalls version-pinned Trigger.dev skills plus a
bundled docs snapshot into Claude Code, Cursor, GitHub Copilot, and
Codex, so your assistant's Trigger.dev knowledge stays current with your
installed SDK version.trigger initnow offers to set up the MCP
server and skills too.Model library
A new Models page in the dashboard: a catalog of models grouped by
provider with context window, capabilities, and input / output pricing
per 1M tokens, plus a "Your models" tab showing per-model usage, cost,
and cache-hit sparklines from your actual traffic.Dev branches
Run multiple local
trigger devsessions in parallel (separate git
worktrees or coding agents) without runs colliding, each isolated with
its own dashboard, viatrigger dev --branch <name>.TriggerClientAn instantiable client so one process can trigger and read across
projects, environments, and preview branches, each with its own auth and
baseURL, with no shared global state.import { TriggerClient } from "@trigger.dev/sdk"; const prod = new TriggerClient({ accessToken: process.env.TRIGGER_PROD_KEY }); const preview = new TriggerClient({ accessToken: process.env.TRIGGER_PREVIEW_KEY, previewBranch: "signup-flow", }); await prod.tasks.trigger("send-email", { to: "user@example.com" }); await preview.runs.list({ status: ["COMPLETED"] });SDK and runtime
- AI SDK 7 support (v5 and v6 still supported), with OpenTelemetry
telemetry auto-wired - Large trigger-payload offload: trigger payloads at or above 128KB
upload to object storage automatically, using the same auth and baseURL
as the trigger call - Region support on the runs API: filter runs by region and read each
run's executing region (also on MCPlist_runs) - Duplicate task-id detection:
devanddeployfail with a clear
error instead of silently overwriting envvars.uploadgains anisSecretflag to import redacted secret
variables- Retry hardening:
TASK_MIDDLEWARE_ERRORnow retries under the task's
retry policy
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Downloads
- AI SDK 7 support (v5 and v6 still supported), with OpenTelemetry