@@ -14,7 +14,7 @@ alwaysApply: false
1414
1515## Essential requirements when generating task code
1616
17- 1. You MUST use `@trigger.dev/sdk/ v3`
17+ 1. You MUST import from `@trigger.dev/sdk` (NEVER `@trigger.dev/sdk/ v3`)
18182. You MUST NEVER use `client.defineJob`
19193. YOU MUST `export` every task, including subtasks
20204. If you are able to generate an example payload for a task, do so.
@@ -53,7 +53,7 @@ Instead, you MUST ALWAYS generate ONLY this pattern:
5353```ts
5454// ✅ ALWAYS GENERATE THIS EXACT PATTERN
5555
56- import { task } from "@trigger.dev/sdk/v3 ";
56+ import { task } from "@trigger.dev/sdk";
5757
5858//1. You need to export each task, even if it's a subtask
5959export const helloWorld = task({
@@ -71,7 +71,7 @@ export const helloWorld = task({
7171A task is a function that can run for a long time with resilience to failure:
7272
7373```ts
74- import { task } from "@trigger.dev/sdk/v3 ";
74+ import { task } from "@trigger.dev/sdk";
7575
7676export const helloWorld = task({
7777 id: "hello-world",
@@ -271,7 +271,7 @@ Global lifecycle hooks can also be defined in `trigger.config.ts` to apply to al
271271## Correct Schedules task (cron) implementations
272272
273273```ts
274- import { schedules } from "@trigger.dev/sdk/v3 ";
274+ import { schedules } from "@trigger.dev/sdk";
275275
276276export const firstScheduledTask = schedules.task({
277277 id: "first-scheduled-task",
@@ -312,7 +312,7 @@ export const firstScheduledTask = schedules.task({
312312### Attach a Declarative schedule
313313
314314```ts
315- import { schedules } from "@trigger.dev/sdk/v3 ";
315+ import { schedules } from "@trigger.dev/sdk";
316316
317317// Sepcify a cron pattern (UTC)
318318export const firstScheduledTask = schedules.task({
@@ -326,7 +326,7 @@ export const firstScheduledTask = schedules.task({
326326```
327327
328328```ts
329- import { schedules } from "@trigger.dev/sdk/v3 ";
329+ import { schedules } from "@trigger.dev/sdk";
330330
331331// Specify a specific timezone like this:
332332export const secondScheduledTask = schedules.task({
@@ -375,7 +375,7 @@ const createdSchedule = await schedules.create({
375375Schema tasks validate payloads against a schema before execution:
376376
377377```ts
378- import { schemaTask } from "@trigger.dev/sdk/v3 ";
378+ import { schemaTask } from "@trigger.dev/sdk";
379379import { z } from "zod";
380380
381381const myTask = schemaTask({
@@ -400,7 +400,7 @@ When you trigger a task from your backend code, you need to set the `TRIGGER_SEC
400400Triggers a single run of a task with specified payload and options without importing the task. Use type-only imports for full type checking.
401401
402402```ts
403- import { tasks } from "@trigger.dev/sdk/v3 ";
403+ import { tasks } from "@trigger.dev/sdk";
404404import type { emailSequence } from "~/trigger/emails";
405405
406406export async function POST(request: Request) {
@@ -418,7 +418,7 @@ export async function POST(request: Request) {
418418Triggers multiple runs of a single task with different payloads without importing the task.
419419
420420```ts
421- import { tasks } from "@trigger.dev/sdk/v3 ";
421+ import { tasks } from "@trigger.dev/sdk";
422422import type { emailSequence } from "~/trigger/emails";
423423
424424export async function POST(request: Request) {
@@ -436,7 +436,7 @@ export async function POST(request: Request) {
436436Triggers multiple runs of different tasks at once, useful when you need to execute multiple tasks simultaneously.
437437
438438```ts
439- import { batch } from "@trigger.dev/sdk/v3 ";
439+ import { batch } from "@trigger.dev/sdk";
440440import type { myTask1, myTask2 } from "~/trigger/myTasks";
441441
442442export async function POST(request: Request) {
@@ -621,7 +621,7 @@ const handle = await myTask.trigger(
621621Access metadata inside a run:
622622
623623```ts
624- import { task, metadata } from "@trigger.dev/sdk/v3 ";
624+ import { task, metadata } from "@trigger.dev/sdk";
625625
626626export const myTask = task({
627627 id: "my-task",
@@ -713,7 +713,7 @@ Trigger.dev Realtime enables subscribing to runs for real-time updates on run st
713713Subscribe to a run after triggering a task:
714714
715715```ts
716- import { runs, tasks } from "@trigger.dev/sdk/v3 ";
716+ import { runs, tasks } from "@trigger.dev/sdk";
717717
718718async function myBackend() {
719719 const handle = await tasks.trigger("my-task", { some: "data" });
@@ -735,7 +735,7 @@ async function myBackend() {
735735You can infer types of run's payload and output by passing the task type:
736736
737737```ts
738- import { runs } from "@trigger.dev/sdk/v3 ";
738+ import { runs } from "@trigger.dev/sdk";
739739import type { myTask } from "./trigger/my-task";
740740
741741for await (const run of runs.subscribeToRun<typeof myTask>(handle.id)) {
@@ -752,7 +752,7 @@ for await (const run of runs.subscribeToRun<typeof myTask>(handle.id)) {
752752Stream data in realtime from inside your tasks using the metadata system:
753753
754754```ts
755- import { task, metadata } from "@trigger.dev/sdk/v3 ";
755+ import { task, metadata } from "@trigger.dev/sdk";
756756import OpenAI from "openai";
757757
758758export type STREAMS = {
@@ -947,7 +947,7 @@ For most use cases, Realtime hooks are preferred over SWR hooks with polling due
947947For client-side usage, generate a public access token with appropriate scopes:
948948
949949```ts
950- import { auth } from "@trigger.dev/sdk/v3 ";
950+ import { auth } from "@trigger.dev/sdk";
951951
952952const publicToken = await auth.createPublicToken({
953953 scopes: {
@@ -967,7 +967,7 @@ Idempotency ensures that an operation produces the same result when called multi
967967Provide an `idempotencyKey` when triggering a task to ensure it runs only once with that key:
968968
969969```ts
970- import { idempotencyKeys, task } from "@trigger.dev/sdk/v3 ";
970+ import { idempotencyKeys, task } from "@trigger.dev/sdk";
971971
972972export const myTask = task({
973973 id: "my-task",
@@ -1058,7 +1058,7 @@ function hash(payload: any): string {
10581058
10591059```ts
10601060// onFailure executes after all retries are exhausted; use for notifications, logging, or side effects on final failure:
1061- import { task, logger } from "@trigger.dev/sdk/v3 ";
1061+ import { task, logger } from "@trigger.dev/sdk";
10621062
10631063export const loggingExample = task({
10641064 id: "logging-example",
@@ -1078,7 +1078,7 @@ export const loggingExample = task({
10781078The `trigger.config.ts` file configures your Trigger.dev project, specifying task locations, retry settings, telemetry, and build options.
10791079
10801080```ts
1081- import { defineConfig } from "@trigger.dev/sdk/v3 ";
1081+ import { defineConfig } from "@trigger.dev/sdk";
10821082
10831083export default defineConfig({
10841084 project: "<project ref>",
@@ -1226,7 +1226,7 @@ await myTask.trigger({ name: "Alice", age: 30 });
12261226
12271227Before generating any code, you MUST verify:
12281228
1229- 1. Are you importing from `@trigger.dev/sdk/ v3`? If not, STOP and FIX.
1229+ 1. Are you importing from `@trigger.dev/sdk` (NOT `@trigger.dev/sdk/ v3`) ? If not, STOP and FIX.
123012302. Have you exported every task? If not, STOP and FIX.
123112313. Have you generated any DEPRECATED code patterns? If yes, STOP and FIX.
12321232
0 commit comments