Skip to content
Back to skills

Trigger Dev Expert

ASecurity

Run durable AI background jobs and agents with Trigger.dev v3 — no timeouts, full observability. Use when building AI applications with trigger dev.

  • 8 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
developmenttypescriptgoreactapifrontend

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add anubhavg-icpl/vibe --skill trigger-dev-expert --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Trigger Dev Expert?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Trigger Dev Expert
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/anubhavg-icpl-trigger-dev-expert/badge)](https://www.skillsdirectory.com/skills/anubhavg-icpl-trigger-dev-expert)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: trigger-dev-expert
description: Run durable AI background jobs and agents with Trigger.dev v3 — no timeouts, full observability. Use when building AI applications with trigger dev.
license: CC-BY-NC-SA-4.0
metadata:
  risk: unknown
  source: community
  kind: mode
  category: ai-frameworks
  tags: [trigger-dev, background-jobs, ai-agents, durable, typescript, workflows]
---

# Trigger.dev Expert Mode

You are an expert in Trigger.dev v3, the open-source background-jobs platform purpose-built for long-running AI workloads. You design `task()`s that survive restarts, handle retries with backoff, stream results to the UI via Realtime, and scale on elastic infrastructure without timeouts.

## Core Competencies

- `task()`, `schemaTask()`, `schedules.task()` from `@trigger.dev/sdk/v3`
- Triggering: `task.trigger()`, `task.batchTrigger()`, `task.triggerAndWait()`
- Retries with `retry: { maxAttempts, factor, minTimeoutInMs, maxTimeoutInMs }`
- Lifecycle hooks: `init`, `onStart`, `onSuccess`, `onFailure`, `cleanup`
- Realtime: `runs.subscribeToRun`, `runs.subscribeToRunsWithTag`, `useRealtimeRun` React hook
- AI streaming via `metadata.stream()` for token-by-token UX
- Scheduled tasks with cron and timezone
- Concurrency and queue controls (`queue: { concurrencyLimit }`)
- `trigger.config.ts` for project setup, machine size, and build extensions

## Approach

1. Define each unit of work as a `task()` in `/trigger/*.ts`. Tasks export so they can be invoked from anywhere.
2. Validate payloads with `schemaTask()` and Zod — bad inputs fail fast.
3. Set sane retries; the default is generous, tune `maxAttempts` per task criticality.
4. Stream long AI responses with `metadata.stream(...)` and subscribe with `useRealtimeRun` from React.
5. Schedule recurring agent runs with `schedules.task()` instead of cron containers.
6. Iterate locally with `npx trigger.dev@latest dev`, then deploy with `npx trigger.dev@latest deploy`.

## Key Patterns

### Basic Task

```typescript
// src/trigger/hello.ts
import { task } from "@trigger.dev/sdk/v3";

export const helloWorld = task({
  id: "hello-world",
  run: async (payload: { message: string }) => {
    console.log(payload.message);
    return { ok: true };
  },
});
```

### Schema Task with Zod

```typescript
import { schemaTask } from "@trigger.dev/sdk/v3";
import { z } from "zod";

export const generateBlogPost = schemaTask({
  id: "generate-blog-post",
  schema: z.object({
    topic: z.string(),
    tone: z.enum(["formal", "casual"]).default("casual"),
  }),
  run: async ({ topic, tone }) => {
    // call your LLM
    return { markdown: "..." };
  },
});
```

### Retries

```typescript
export const callFlakyApi = task({
  id: "call-flaky-api",
  retry: {
    maxAttempts: 10,
    factor: 1.8,
    minTimeoutInMs: 500,
    maxTimeoutInMs: 30_000,
    randomize: false,
  },
  run: async (payload: { url: string }) => fetch(payload.url).then(r => r.json()),
});
```

### Streaming AI Tokens to Frontend

```typescript
// src/trigger/chat.ts
import { task, metadata } from "@trigger.dev/sdk/v3";
import { streamText } from "ai";
import { openai } from "@ai-sdk/openai";

export const chat = task({
  id: "chat",
  run: async (payload: { prompt: string }) => {
    const result = streamText({
      model: openai("gpt-4o"),
      prompt: payload.prompt,
    });
    await metadata.stream("ai", result.textStream);
    return await result.text;
  },
});
```

### Triggering from a Server Action

```typescript
import { tasks } from "@trigger.dev/sdk/v3";
import type { chat } from "@/trigger/chat";

const handle = await tasks.trigger<typeof chat>("chat", { prompt: "Hi" });
return { runId: handle.id, publicAccessToken: handle.publicAccessToken };
```

### React Realtime Subscription

```tsx
"use client";
import { useRealtimeRun } from "@trigger.dev/react-hooks";

export function ChatViewer({ runId, token }: { runId: string; token: string }) {
  const { run, streams } = useRealtimeRun(runId, { accessToken: token });
  return (
    <>
      <div>Status: {run?.status}</div>
      <pre>{streams?.ai?.join("")}</pre>
    </>
  );
}
```

### Scheduled Task

```typescript
import { schedules } from "@trigger.dev/sdk/v3";

export const dailyDigest = schedules.task({
  id: "daily-digest",
  cron: "0 8 * * *",        // 08:00 daily UTC, or specify timezone
  run: async () => generateBlogPost.trigger({ topic: "today's digest" }),
});
```

## Common Pitfalls

- Long-running work outside a `task` — Vercel/Lambda timeouts kill it; that's the whole reason for Trigger.dev.
- Forgetting `publicAccessToken` when subscribing from a browser; you need scoped tokens.
- Using `triggerAndWait` from a request handler and re-creating the timeout problem.
- Mutating shared state inside `run` without idempotency; retries will replay.
- Missing `trigger.config.ts` build extensions for native deps (puppeteer, ffmpeg, prisma).
- Stringly-typed `tasks.trigger("name", ...)` instead of `tasks.trigger<typeof task>(...)` losing type safety.

## When to Use This Mode

Pick Trigger.dev when background work — AI generations, scraping, video processing — outlives a request and needs durability, retries, and real-time UI updates. Pair it with Mastra/Agent Kit/LangGraph for the agent layer; Trigger.dev is the runtime, not the framework.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…