Trigger.dev v4.4.4

Task-level TTL defaults, 11 new MCP server tools, and major MCP improvements.

2 new features, 11 new MCP tools, 6 bug fixes, and 15 server changes.

Highlights

Task-level and global TTL defaults

You can now set TTL (time-to-live) defaults at the task level in your task definition and globally in trigger.config.ts. If a run isn't dequeued within the configured window, it expires and never executes. Per-trigger overrides still take precedence over both.


// trigger.config.ts — set a project-wide default
import { defineConfig } from "@trigger.dev/sdk";
export default defineConfig({
project: "<project ref>",
ttl: "1h", // runs expire after 1 hour if not dequeued
});


// task — override the global default for this task
export const myTask = task({
id: "my-task",
ttl: "30m", // this task's runs expire after 30 minutes
run: async (payload) => {
// ...
},
});

Set ttl: 0 on a task to opt out of the global default entirely. See trigger.config.ts for all configuration options. (#3196)

Multi-provider object storage for large run outputs

Large run outputs now use a new storage API that supports switching object storage providers with zero-downtime migration via protocol-based routing. IAM role-based authentication is also supported, so no access keys are required. (#3275)

CLI improvements

  • Platform notifications: the trigger dev and trigger login commands now fetch and display notifications (info, warn, error, success) from the server with color markup rendering. Discovery-based filtering shows notifications based on your project file patterns. Use --skip-platform-notifications to disable. (#3254)

MCP server improvements

New tools

  • get_span_details — inspect individual spans within a run trace, including attributes, timing, events, and AI enrichment (model, tokens, cost). Span IDs are now shown in get_run_details trace output for easy discovery. (#3255)
  • get_query_schema — discover available TRQL tables and columns
  • query — execute TRQL queries against your data
  • list_dashboards — list built-in dashboards and their widgets
  • run_dashboard_query — execute a single dashboard widget query
  • whoami — show current profile, user, and API URL
  • list_profiles — list all configured CLI profiles
  • switch_profile — switch the active profile for the MCP session
  • start_dev_server — start trigger dev in the background and stream output
  • stop_dev_server — stop the running dev server
  • dev_server_status — check dev server status and view recent logs

Improvements

  • --readonly flag hides write tools (deploy, trigger_task, cancel_run) so the AI cannot make changes
  • get_run_details trace output is now paginated with cursor support
  • get_query_schema now requires a table name and returns only that table's schema
  • get_current_worker no longer inlines payload schemas — use the new get_task_schema tool instead
  • Query results formatted as text tables instead of JSON (~50% fewer tokens)
  • cancel_run, list_deploys, list_preview_branches formatted as text instead of raw JSON
  • Schema and dashboard API responses cached to avoid redundant fetches
  • MCP tool annotations (readOnlyHint, destructiveHint) added to all tools
  • read:query JWT scope added for query endpoint authorization
  • CLI API client now propagates the trigger source via HTTP headers (#3241)

Bug fixes

  • Fix dev CLI leaking build directories on rebuild. Deprecated workers are now pruned (capped at 2 retained) when no active runs reference them, and the watchdog cleans up .trigger/tmp/ when killed ungracefully (e.g. SIGKILL from pnpm). (#3224)
  • Fix --load flag being silently ignored on local and self-hosted builds. (#3114)
  • Fixed search_docs MCP tool failing due to a renamed upstream Mintlify tool (SearchTriggerDevsearch_trigger_dev).
  • Fixed list_deploys MCP tool failing when deployments have null runtime or runtimeVersion fields. (#3139)
  • Fixed list_preview_branches MCP tool crashing due to incorrect response shape access.
  • Fixed metrics TRQL table column documented as value instead of metric_value.

Server changes

These changes are included in the v4.4.4 Docker image and are already live on Trigger.dev Cloud:

  • Add admin UI for viewing and editing feature flags with org-level overrides and global defaults. (#3291)
  • Add allowRollbacks query param to the promote deployment API to support version downgrades. (#3214)
  • Automatic LLM cost calculation for spans with GenAI semantic conventions. Costs are calculated from an in-memory pricing registry and written to span attributes (trigger.llm.*) and a new llm_metrics_v1 ClickHouse table capturing usage, cost, latency, and finish reason. (#3213)
  • New GET /api/v1/runs/:runId/spans/:spanId endpoint returning span properties, events, AI enrichment, and triggered child runs. (#3255)
  • Multi-provider object storage with protocol-based routing for zero-downtime migration. Adds IAM role-based auth for object stores (no access keys required). (#3275)
  • Platform notifications for informing users about new features and platform events directly in the CLI and dashboard. (#3254)
  • Private networking support via AWS PrivateLink. Includes BillingClient methods for managing connections, org settings UI for connection management, and supervisor pod labels for CiliumNetworkPolicy matching. (#3264)
  • Reduce run start latency by skipping the intermediate queue when concurrency is available, rolled out per-region and enabled automatically for development environments. (#3299)
  • Environment variable page search now matches on environment type (production, staging, development, preview) and branch name, not just variable name and value. (#3302)
  • Set application_name on Prisma connections from SERVICE_NAME for DB load attribution by service. (#3348)
  • Add p-retry (3 attempts, 500ms–2s exponential backoff) around object store uploads in BatchPayloadProcessor and remove x-should-retry: false from batch 500 responses so the SDK's existing retry path can recover. (#3331)
  • Concurrency-keyed queues now use a single master queue entry per base queue instead of one per key, preventing high-CK-count tenants from starving others on the same shard. (#3219)
  • Reduce lock contention when processing large batchTriggerAndWait batches by removing the per-item Redis lock acquisition. (#3232)
  • Strip secure query parameter from QUERY_CLICKHOUSE_URL before passing to the ClickHouse client, fixing a startup crash with Error: Unknown URL parameters: secure. (#3204)
  • Fix dev environment selection for teams with multiple members: now filters DEVELOPMENT environments by orgMember.userId to ensure the logged-in user's dev environment is returned. (#3273)

How to upgrade

Update the trigger.dev/* packages to v4.4.4 using your package manager:


npx trigger.dev@latest update # npm
pnpm dlx trigger.dev@latest update # pnpm
yarn dlx trigger.dev@latest update # yarn
bunx trigger.dev@latest update # bun

Self-hosted users: update your Docker image to ghcr.io/triggerdotdev/trigger.dev:v4.4.4.

Ready to start building?

Build and deploy your first task in 3 minutes.

Get started now