{"id":"e6ed4051-ae38-4e1a-b50c-44c37506354c","shortId":"uRZ9D6","kind":"skill","title":"trigger-dev","tagline":"Trigger.dev expert for background jobs, AI workflows, and reliable","description":"# Trigger.dev Integration\n\nTrigger.dev expert for background jobs, AI workflows, and reliable async\nexecution with excellent developer experience and TypeScript-first design.\n\n## Principles\n\n- Tasks are the building blocks - each task is independently retryable\n- Runs are durable - state survives crashes and restarts\n- Integrations are first-class - use built-in API wrappers for reliability\n- Logs are your debugging lifeline - log liberally in tasks\n- Concurrency protects your resources - always set limits\n- Delays and schedules are built-in - no external cron needed\n- AI-ready by design - long-running AI tasks just work\n- Local development matches production - use the CLI\n\n## Capabilities\n\n- trigger-dev-tasks\n- ai-background-jobs\n- integration-tasks\n- scheduled-triggers\n- webhook-handlers\n- long-running-tasks\n- task-queues\n- batch-processing\n\n## Scope\n\n- redis-queues -> bullmq-specialist\n- pure-event-driven -> inngest\n- workflow-orchestration -> temporal-craftsman\n- infrastructure -> infra-architect\n\n## Tooling\n\n### Core\n\n- trigger-dev-sdk\n- trigger-cli\n\n### Frameworks\n\n- nextjs\n- remix\n- express\n- hono\n\n### Integrations\n\n- openai\n- anthropic\n- resend\n- stripe\n- slack\n- supabase\n\n### Deployment\n\n- trigger-cloud\n- self-hosted\n- docker\n\n## Patterns\n\n### Basic Task Setup\n\nSetting up Trigger.dev in a Next.js project\n\n**When to use**: Starting with Trigger.dev in any project\n\n// trigger.config.ts\nimport { defineConfig } from '@trigger.dev/sdk/v3';\n\nexport default defineConfig({\n  project: 'my-project',\n  runtime: 'node',\n  logLevel: 'log',\n  retries: {\n    enabledInDev: true,\n    default: {\n      maxAttempts: 3,\n      minTimeoutInMs: 1000,\n      maxTimeoutInMs: 10000,\n      factor: 2,\n    },\n  },\n});\n\n// src/trigger/tasks.ts\nimport { task, logger } from '@trigger.dev/sdk/v3';\n\nexport const helloWorld = task({\n  id: 'hello-world',\n  run: async (payload: { name: string }) => {\n    logger.log('Processing hello world', { payload });\n\n    // Simulate work\n    await new Promise(resolve => setTimeout(resolve, 1000));\n\n    return { message: `Hello, ${payload.name}!` };\n  },\n});\n\n// Triggering from your app\nimport { helloWorld } from '@/trigger/tasks';\n\n// Fire and forget\nawait helloWorld.trigger({ name: 'World' });\n\n// Wait for result\nconst handle = await helloWorld.trigger({ name: 'World' });\nconst result = await handle.wait();\n\n### AI Task with OpenAI Integration\n\nUsing built-in OpenAI integration with automatic retries\n\n**When to use**: Building AI-powered background tasks\n\nimport { task, logger } from '@trigger.dev/sdk/v3';\nimport { openai } from '@trigger.dev/openai';\n\n// Configure OpenAI with Trigger.dev\nconst openaiClient = openai.configure({\n  id: 'openai',\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nexport const generateContent = task({\n  id: 'generate-content',\n  retry: {\n    maxAttempts: 3,\n  },\n  run: async (payload: { topic: string; style: string }) => {\n    logger.log('Generating content', { topic: payload.topic });\n\n    // Uses Trigger.dev's OpenAI integration - handles retries automatically\n    const completion = await openaiClient.chat.completions.create({\n      model: 'gpt-4-turbo-preview',\n      messages: [\n        {\n          role: 'system',\n          content: `You are a ${payload.style} writer.`,\n        },\n        {\n          role: 'user',\n          content: `Write about: ${payload.topic}`,\n        },\n      ],\n    });\n\n    const content = completion.choices[0].message.content;\n    logger.log('Generated content', { length: content?.length });\n\n    return { content, tokens: completion.usage?.total_tokens };\n  },\n});\n\n### Scheduled Task with Cron\n\nTasks that run on a schedule\n\n**When to use**: Periodic jobs like reports, cleanup, or syncs\n\nimport { schedules, task, logger } from '@trigger.dev/sdk/v3';\n\nexport const dailyCleanup = schedules.task({\n  id: 'daily-cleanup',\n  cron: '0 2 * * *',  // 2 AM daily\n  run: async () => {\n    logger.log('Starting daily cleanup');\n\n    // Clean up old records\n    const deleted = await db.logs.deleteMany({\n      where: {\n        createdAt: { lt: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000) },\n      },\n    });\n\n    logger.log('Cleanup complete', { deletedCount: deleted.count });\n\n    return { deleted: deleted.count };\n  },\n});\n\n// Weekly report\nexport const weeklyReport = schedules.task({\n  id: 'weekly-report',\n  cron: '0 9 * * 1',  // Monday 9 AM\n  run: async () => {\n    const stats = await generateWeeklyStats();\n    await sendReportEmail(stats);\n    return stats;\n  },\n});\n\n### Batch Processing\n\nProcessing large datasets in batches\n\n**When to use**: Need to process many items with rate limiting\n\nimport { task, logger, wait } from '@trigger.dev/sdk/v3';\n\nexport const processBatch = task({\n  id: 'process-batch',\n  queue: {\n    concurrencyLimit: 5,  // Only 5 running at once\n  },\n  run: async (payload: { items: string[] }) => {\n    const results = [];\n\n    for (const item of payload.items) {\n      logger.log('Processing item', { item });\n\n      const result = await processItem(item);\n      results.push(result);\n\n      // Respect rate limits\n      await wait.for({ seconds: 1 });\n    }\n\n    return { processed: results.length, results };\n  },\n});\n\n// Trigger batch processing\nexport const startBatchJob = task({\n  id: 'start-batch',\n  run: async (payload: { datasetId: string }) => {\n    const items = await fetchDataset(payload.datasetId);\n\n    // Split into chunks of 100\n    const chunks = chunkArray(items, 100);\n\n    // Trigger parallel batch tasks\n    const handles = await Promise.all(\n      chunks.map(chunk => processBatch.trigger({ items: chunk }))\n    );\n\n    logger.log('Started batch processing', {\n      totalItems: items.length,\n      batches: chunks.length,\n    });\n\n    return { batches: handles.length };\n  },\n});\n\n### Webhook Handler\n\nProcessing webhooks reliably with deduplication\n\n**When to use**: Handling webhooks from Stripe, GitHub, etc.\n\nimport { task, logger, idempotencyKeys } from '@trigger.dev/sdk/v3';\n\nexport const handleStripeEvent = task({\n  id: 'handle-stripe-event',\n  run: async (payload: {\n    eventId: string;\n    type: string;\n    data: any;\n  }) => {\n    // Idempotency based on Stripe event ID\n    const idempotencyKey = await idempotencyKeys.create(payload.eventId);\n\n    if (idempotencyKey.isNew === false) {\n      logger.log('Duplicate event, skipping', { eventId: payload.eventId });\n      return { skipped: true };\n    }\n\n    logger.log('Processing Stripe event', {\n      type: payload.type,\n      eventId: payload.eventId,\n    });\n\n    switch (payload.type) {\n      case 'checkout.session.completed':\n        await handleCheckoutComplete(payload.data);\n        break;\n      case 'customer.subscription.updated':\n        await handleSubscriptionUpdate(payload.data);\n        break;\n    }\n\n    return { processed: true, type: payload.type };\n  },\n});\n\n## Sharp Edges\n\n### Task timeout kills execution without clear error\n\nSeverity: CRITICAL\n\nSituation: Long-running AI task or batch process suddenly stops. No error in logs.\nTask shows as failed in dashboard but no stack trace. Data partially processed.\n\nSymptoms:\n- Task fails with no error message\n- Partial data processing\n- Works locally, fails in production\n- \"Task timed out\" in dashboard\n\nWhy this breaks:\nTrigger.dev has execution timeouts (defaults vary by plan). When exceeded, the\ntask is killed mid-execution. If you're not logging progress, you won't know\nwhere it stopped. This is especially common with AI tasks that can take minutes.\n\nRecommended fix:\n\n# Configure explicit timeouts:\n```typescript\nexport const processDocument = task({\n  id: 'process-document',\n  machine: {\n    preset: 'large-2x',  // More resources = longer allowed time\n  },\n  run: async (payload) => {\n    logger.log('Starting document processing', { docId: payload.id });\n\n    // Log progress at each step\n    logger.log('Step 1: Extracting text');\n    const text = await extractText(payload.fileUrl);\n\n    logger.log('Step 2: Generating embeddings', { textLength: text.length });\n    const embeddings = await generateEmbeddings(text);\n\n    logger.log('Step 3: Storing vectors', { count: embeddings.length });\n    await storeVectors(embeddings);\n\n    logger.log('Completed successfully');\n    return { processed: true };\n  },\n});\n```\n\n# For very long tasks, break into subtasks:\n- Use triggerAndWait for sequential steps\n- Each subtask has its own timeout\n- Progress is visible in dashboard\n\n### Non-serializable payload causes silent task failure\n\nSeverity: CRITICAL\n\nSituation: Passing Date objects, class instances, or circular references in payload.\nTask queued but never runs. Or runs with undefined/null values.\n\nSymptoms:\n- Payload values are undefined in task\n- Date objects become strings\n- Class methods not available\n- \"Converting circular structure to JSON\"\n\nWhy this breaks:\nTrigger.dev serializes payloads to JSON. Dates become strings, class instances\nlose methods, functions disappear, circular refs throw. Your task sees different\ndata than you sent.\n\nRecommended fix:\n\n# Always use plain objects:\n```typescript\n// WRONG - Date becomes string\nawait myTask.trigger({ createdAt: new Date() });\n\n// RIGHT - ISO string\nawait myTask.trigger({ createdAt: new Date().toISOString() });\n\n// WRONG - Class instance\nawait myTask.trigger({ user: new User(data) });\n\n// RIGHT - Plain object\nawait myTask.trigger({ user: { id: data.id, email: data.email } });\n\n// WRONG - Circular reference\nconst obj = { parent: null };\nobj.parent = obj;\nawait myTask.trigger(obj);  // Throws!\n```\n\n# In task, reconstitute as needed:\n```typescript\nrun: async (payload: { createdAt: string }) => {\n  const date = new Date(payload.createdAt);\n  // ...\n}\n```\n\n### Environment variables not synced to Trigger.dev cloud\n\nSeverity: CRITICAL\n\nSituation: Task works locally but fails in production. Env var that exists in Vercel\nis undefined in Trigger.dev. API calls fail, database connections fail.\n\nSymptoms:\n- \"Environment variable not found\"\n- API calls return 401 in production tasks\n- Works in dev, fails in production\n- Database connection errors in tasks\n\nWhy this breaks:\nTrigger.dev runs tasks in its own cloud, separate from your Vercel/Railway\ndeployment. Environment variables must be configured in BOTH places. They\ndon't automatically sync.\n\nRecommended fix:\n\n# Sync env vars to Trigger.dev:\n1. Go to Trigger.dev dashboard\n2. Project Settings > Environment Variables\n3. Add ALL required env vars\n\n# Or use CLI:\n```bash\n# Create .env.trigger file\nDATABASE_URL=postgres://...\nOPENAI_API_KEY=sk-...\nSTRIPE_SECRET_KEY=sk_live_...\n\n# Push to Trigger.dev\nnpx trigger.dev@latest env push\n```\n\n# Common missing vars:\n- DATABASE_URL\n- OPENAI_API_KEY / ANTHROPIC_API_KEY\n- STRIPE_SECRET_KEY\n- Service API keys\n- Internal service URLs\n\n# Test in staging:\nTrigger.dev has separate envs - configure staging too\n\n### SDK version mismatch between CLI and package\n\nSeverity: HIGH\n\nSituation: Updated @trigger.dev/sdk but forgot to update CLI. Or vice versa.\nTasks fail to register. Weird type errors. Dev server crashes.\n\nSymptoms:\n- Tasks not appearing in dashboard\n- Type errors in trigger.config.ts\n- \"Failed to register task\"\n- Dev server crashes on start\n\nWhy this breaks:\nThe Trigger.dev SDK and CLI must be on compatible versions. Breaking changes\nbetween versions cause registration failures. The CLI generates types that\nmust match the SDK.\n\nRecommended fix:\n\n# Always update together:\n```bash\n# Update both SDK and CLI\nnpm install @trigger.dev/sdk@latest\nnpx trigger.dev@latest dev\n\n# Or pin to same version\nnpm install @trigger.dev/sdk@3.3.0\nnpx trigger.dev@3.3.0 dev\n```\n\n# Check versions:\n```bash\nnpx trigger.dev@latest --version\nnpm list @trigger.dev/sdk\n```\n\n# In CI/CD:\n```yaml\n- run: npm install @trigger.dev/sdk@${{ env.TRIGGER_VERSION }}\n- run: npx trigger.dev@${{ env.TRIGGER_VERSION }} deploy\n```\n\n### Task retries cause duplicate side effects\n\nSeverity: HIGH\n\nSituation: Task sends email, then fails on next step. Retry sends email again.\nCustomer gets 3 identical emails. Or 3 Stripe charges. Or 3 Slack messages.\n\nSymptoms:\n- Duplicate emails on retry\n- Multiple charges for same order\n- Duplicate webhook deliveries\n- Data inserted multiple times\n\nWhy this breaks:\nTrigger.dev retries failed tasks from the beginning. If your task has side\neffects before the failure point, those execute again. Without idempotency,\nyou create duplicates.\n\nRecommended fix:\n\n# Use idempotency keys:\n```typescript\nimport { task, idempotencyKeys } from '@trigger.dev/sdk/v3';\n\nexport const sendOrderEmail = task({\n  id: 'send-order-email',\n  run: async (payload: { orderId: string }) => {\n    // Check if already sent\n    const key = await idempotencyKeys.create(`email-${payload.orderId}`);\n\n    if (!key.isNew) {\n      logger.log('Email already sent, skipping');\n      return { skipped: true };\n    }\n\n    await sendEmail(payload.orderId);\n    return { sent: true };\n  },\n});\n```\n\n# Alternative: Track in database\n```typescript\nconst existing = await db.emailLogs.findUnique({\n  where: { orderId_type: { orderId, type: 'order_confirmation' } }\n});\n\nif (existing) {\n  logger.log('Already sent');\n  return;\n}\n\nawait sendEmail(orderId);\nawait db.emailLogs.create({ data: { orderId, type: 'order_confirmation' } });\n```\n\n### High concurrency overwhelms downstream services\n\nSeverity: HIGH\n\nSituation: Burst of 1000 tasks triggered. All hit OpenAI API simultaneously.\nRate limited. All fail. Retry. Rate limited again. Vicious cycle.\n\nSymptoms:\n- Rate limit errors (429)\n- Database connection pool exhausted\n- API returns \"too many requests\"\n- Mass task failures\n\nWhy this breaks:\nTrigger.dev scales to handle many concurrent tasks. But your downstream\nAPIs (OpenAI, databases, external services) have rate limits. Without\nconcurrency control, you overwhelm them.\n\nRecommended fix:\n\n# Set queue concurrency limits:\n```typescript\nexport const callOpenAI = task({\n  id: 'call-openai',\n  queue: {\n    concurrencyLimit: 10,  // Only 10 running at once\n  },\n  run: async (payload) => {\n    // Protected by concurrency limit\n    return await openai.chat.completions.create(payload);\n  },\n});\n```\n\n# For rate-limited APIs:\n```typescript\nexport const callRateLimitedAPI = task({\n  id: 'call-api',\n  queue: {\n    concurrencyLimit: 5,\n  },\n  retry: {\n    maxAttempts: 5,\n    minTimeoutInMs: 5000,  // Wait before retry\n    factor: 2,  // Exponential backoff\n  },\n  run: async (payload) => {\n    // Add delay between calls\n    await wait.for({ milliseconds: 200 });\n    return await externalAPI.call(payload);\n  },\n});\n```\n\n# Start conservative:\n- 5-10 for external APIs\n- 20-50 for databases\n- Increase based on monitoring\n\n### trigger.config.ts not at project root\n\nSeverity: HIGH\n\nSituation: Running npx trigger.dev dev but CLI can't find config.\nOr config exists but in wrong location (monorepo issue).\n\nSymptoms:\n- \"Could not find trigger.config.ts\"\n- Tasks not discovered\n- Empty task list in dashboard\n- Works for one package, not another\n\nWhy this breaks:\nThe CLI looks for trigger.config.ts at the current working directory.\nIn monorepos, you must run from the package directory, not the root.\nWrong location = tasks not discovered.\n\nRecommended fix:\n\n# Config must be at package root:\n```\nmy-app/\n├── trigger.config.ts  <- Here\n├── package.json\n├── src/\n│   └── trigger/\n│       └── tasks.ts\n```\n\n# In monorepos:\n```\nmonorepo/\n├── apps/\n│   └── web/\n│       ├── trigger.config.ts  <- Here, not at monorepo root\n│       ├── package.json\n│       └── src/trigger/\n\n# Run from package directory\ncd apps/web && npx trigger.dev dev\n```\n\n# Specify config location:\n```bash\nnpx trigger.dev dev --config ./apps/web/trigger.config.ts\n```\n\n### wait.for in loops causes memory issues\n\nSeverity: MEDIUM\n\nSituation: Processing thousands of items with wait.for between each.\nTask memory grows. Eventually killed for memory.\n\nSymptoms:\n- Task killed for memory\n- Slow task execution\n- State blob too large error\n- Works for small batches, fails for large\n\nWhy this breaks:\nEach wait.for creates checkpoint state. In a loop with thousands of\niterations, this accumulates. The task's state blob grows until it\nhits memory limits.\n\nRecommended fix:\n\n# Batch instead of individual waits:\n```typescript\n// WRONG - Wait per item\nfor (const item of items) {\n  await processItem(item);\n  await wait.for({ milliseconds: 100 });  // 1000 waits = bloated state\n}\n\n// RIGHT - Batch processing\nconst chunks = chunkArray(items, 50);\nfor (const chunk of chunks) {\n  await Promise.all(chunk.map(processItem));\n  await wait.for({ milliseconds: 500 });  // Only 20 waits\n}\n```\n\n# For very large datasets, use subtasks:\n```typescript\nexport const processAll = task({\n  id: 'process-all',\n  run: async (payload: { items: string[] }) => {\n    const chunks = chunkArray(payload.items, 100);\n\n    // Each chunk is a separate task\n    await Promise.all(\n      chunks.map(chunk =>\n        processChunk.triggerAndWait({ items: chunk })\n      )\n    );\n  },\n});\n```\n\n### Using raw SDK instead of Trigger.dev integrations\n\nSeverity: MEDIUM\n\nSituation: Using OpenAI SDK directly. API call fails. No automatic retry.\nRate limits not handled. Have to implement all resilience manually.\n\nSymptoms:\n- Manual retry logic in tasks\n- Rate limit errors not handled\n- No automatic logging of API calls\n- Inconsistent error handling\n\nWhy this breaks:\nTrigger.dev integrations wrap SDKs with automatic retries, rate limit\nhandling, and proper logging. Using raw SDKs means you lose these\nfeatures and have to implement them yourself.\n\nRecommended fix:\n\n# Use integrations when available:\n```typescript\n// WRONG - Raw SDK\nimport OpenAI from 'openai';\nconst openai = new OpenAI();\n\n// RIGHT - Trigger.dev integration\nimport { openai } from '@trigger.dev/openai';\n\nconst openaiClient = openai.configure({\n  id: 'openai',\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\n// Now has automatic retries and rate limiting\nexport const generateContent = task({\n  id: 'generate-content',\n  run: async (payload) => {\n    const response = await openaiClient.chat.completions.create({\n      model: 'gpt-4-turbo-preview',\n      messages: [{ role: 'user', content: payload.prompt }],\n    });\n    return response;\n  },\n});\n```\n\n# Available integrations:\n- @trigger.dev/openai\n- @trigger.dev/anthropic\n- @trigger.dev/resend\n- @trigger.dev/slack\n- @trigger.dev/stripe\n\n### Triggering tasks without dev server running\n\nSeverity: MEDIUM\n\nSituation: Called task.trigger() but nothing happens. No errors either.\nTask just disappears into void. Dev server wasn't running.\n\nSymptoms:\n- Triggers don't run\n- No task in dashboard\n- No errors, just silence\n- Works in production, not dev\n\nWhy this breaks:\nIn development, tasks run through the local dev server (npx trigger.dev dev).\nIf it's not running, triggers queue up or fail silently depending on\nconfiguration. Production works differently.\n\nRecommended fix:\n\n# Always run dev server during development:\n```bash\n# Terminal 1: Your app\nnpm run dev\n\n# Terminal 2: Trigger.dev dev server\nnpx trigger.dev dev\n```\n\n# Check dev server is connected:\n- Should show \"Connected to Trigger.dev\"\n- Tasks should appear in console\n- Dashboard shows task registrations\n\n# In package.json:\n```json\n{\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"trigger:dev\": \"trigger.dev dev\",\n    \"dev:all\": \"concurrently \\\"npm run dev\\\" \\\"npm run trigger:dev\\\"\"\n  }\n}\n```\n\n## Validation Checks\n\n### Task without logging\n\nSeverity: WARNING\n\nMessage: Task has no logging. Add logger.log() calls for debugging in production.\n\nFix action: Import { logger } from '@trigger.dev/sdk/v3' and add log statements\n\n### Task without error handling\n\nSeverity: ERROR\n\nMessage: Task lacks explicit error handling. Unhandled errors may cause unclear failures.\n\nFix action: Wrap task logic in try/catch and log errors with context\n\n### Task without concurrency limit\n\nSeverity: WARNING\n\nMessage: Task has no concurrency limit. High load may overwhelm downstream services.\n\nFix action: Add queue: { concurrencyLimit: 10 } to protect APIs and databases\n\n### Date object in trigger payload\n\nSeverity: ERROR\n\nMessage: Date objects are serialized to strings. Use ISO string format instead.\n\nFix action: Use date.toISOString() instead of new Date()\n\n### Class instance in trigger payload\n\nSeverity: ERROR\n\nMessage: Class instances lose methods when serialized. Use plain objects.\n\nFix action: Convert class instance to plain object before triggering\n\n### Task without explicit ID\n\nSeverity: ERROR\n\nMessage: Task must have an explicit id property for registration.\n\nFix action: Add id: 'my-task-name' to task definition\n\n### Trigger.dev API key hardcoded\n\nSeverity: CRITICAL\n\nMessage: Trigger.dev API key should not be hardcoded - use TRIGGER_SECRET_KEY env var\n\nFix action: Remove hardcoded key and use process.env.TRIGGER_SECRET_KEY\n\n### Using raw OpenAI SDK instead of integration\n\nSeverity: WARNING\n\nMessage: Consider using @trigger.dev/openai for automatic retries and rate limiting\n\nFix action: Replace with: import { openai } from '@trigger.dev/openai'\n\n### Using raw Anthropic SDK instead of integration\n\nSeverity: WARNING\n\nMessage: Consider using @trigger.dev/anthropic for automatic retries and rate limiting\n\nFix action: Replace with: import { anthropic } from '@trigger.dev/anthropic'\n\n### wait.for inside loop\n\nSeverity: WARNING\n\nMessage: wait.for in loops creates many checkpoints. Consider batching instead.\n\nFix action: Batch items and use fewer waits, or split into subtasks\n\n## Collaboration\n\n### Delegation Triggers\n\n- redis|bullmq|traditional queue -> bullmq-specialist (Need Redis-backed queues instead of managed service)\n- vercel|deployment|serverless -> vercel-deployment (Trigger.dev needs deployment config)\n- database|postgres|supabase -> supabase-backend (Tasks need database access)\n- openai|anthropic|ai model|llm -> llm-architect (Tasks need AI model integration)\n- event-driven|event sourcing|fan out -> inngest (Need pure event-driven model)\n\n### AI Background Processing\n\nSkills: trigger-dev, llm-architect, nextjs-app-router, supabase-backend\n\nWorkflow:\n\n```\n1. User triggers via UI (nextjs-app-router)\n2. Task queued (trigger-dev)\n3. AI processing (llm-architect)\n4. Results stored (supabase-backend)\n```\n\n### Webhook Processing Pipeline\n\nSkills: trigger-dev, stripe-integration, email-systems, supabase-backend\n\nWorkflow:\n\n```\n1. Webhook received (stripe-integration)\n2. Task triggered (trigger-dev)\n3. Database updated (supabase-backend)\n4. Notification sent (email-systems)\n```\n\n### Batch Data Processing\n\nSkills: trigger-dev, supabase-backend, backend\n\nWorkflow:\n\n```\n1. Batch job triggered (backend)\n2. Data chunked and processed (trigger-dev)\n3. Results aggregated (supabase-backend)\n```\n\n### Scheduled Reports\n\nSkills: trigger-dev, supabase-backend, email-systems\n\nWorkflow:\n\n```\n1. Cron triggers task (trigger-dev)\n2. Data aggregated (supabase-backend)\n3. Report generated and sent (email-systems)\n```\n\n## Related Skills\n\nWorks well with: `nextjs-app-router`, `vercel-deployment`, `ai-agents-architect`, `llm-architect`, `email-systems`, `stripe-integration`\n\n## When to Use\n- User mentions or implies: trigger.dev\n- User mentions or implies: trigger dev\n- User mentions or implies: background task\n- User mentions or implies: ai background job\n- User mentions or implies: long running task\n- User mentions or implies: integration task\n- User mentions or implies: scheduled task\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["trigger","dev","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-trigger-dev","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/trigger-dev","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34460 github stars · SKILL.md body (23,653 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:52:03.151Z","embedding":null,"createdAt":"2026-04-18T21:46:32.216Z","updatedAt":"2026-04-22T06:52:03.151Z","lastSeenAt":"2026-04-22T06:52:03.151Z","tsv":"'-10':1734 '-4':395,2172 '-50':1739 '/anthropic':2190,2587 '/anthropic''':2603 '/apps/web/trigger.config.ts':1869 '/openai':2187,2556 '/openai''':2572 '/openai'';':344,2138 '/resend':2193 '/sdk':1287,1399 '/sdk/v3''':2367 '/sdk/v3'';':218,249,338,458,559,688,1508 '/sdk@$':1408 '/sdk@3.3.0':1383 '/sdk@latest':1369 '/slack':2196 '/stripe':2199 '/trigger/tasks':288 '0':417,468,517 '1':519,605,900,1202,2287,2715,2759,2795,2827 '10':1670,1672,2425 '100':635,640,1965,2018 '1000':237,276,497,1591,1966 '10000':239 '2':241,469,470,910,1207,1713,2294,2724,2765,2800,2834 '20':1738,1992 '200':1726 '24':494 '2x':878 '3':235,368,922,1212,1440,1444,1448,2730,2771,2808,2840 '3.3.0':1386 '30':493 '4':2736,2777 '401':1152 '429':1613 '5':570,572,1703,1706,1733 '50':1977 '500':1990 '5000':1708 '60':495,496 '9':518,521 'access':2669 'accumul':1930 'action':2361,2391,2421,2451,2476,2502,2533,2564,2595,2620 'add':1213,1719,2353,2369,2422,2503 'agent':2862 'aggreg':2810,2836 'ai':9,20,95,102,119,309,328,772,854,2672,2680,2697,2731,2861,2897 'ai-agents-architect':2860 'ai-background-job':118 'ai-pow':327 'ai-readi':94 'allow':882 'alreadi':1525,1537,1568 'altern':1549 'alway':80,1040,1356,2279 'anoth':1791 'anthrop':179,1252,2575,2599,2671 'api':63,356,1138,1149,1228,1250,1253,1259,1597,1618,1639,1691,1700,1737,2046,2077,2146,2428,2513,2520 'apikey':354,2144 'app':284,1832,1842,2289,2709,2722,2855 'appear':1309,2313 'apps/web':1857 'architect':162,2677,2706,2735,2863,2866 'ask':2952 'async':24,259,370,474,524,577,622,699,885,1102,1519,1677,1717,2010,2164 'automat':321,388,1193,2050,2074,2090,2150,2558,2589 'avail':1004,2117,2183 'await':270,292,301,307,391,485,527,529,594,602,628,647,715,742,748,905,917,927,1049,1057,1066,1075,1091,1529,1543,1556,1571,1574,1684,1723,1728,1959,1962,1983,1987,2025,2168 'back':2644 'backend':2665,2713,2741,2757,2776,2792,2793,2799,2813,2822,2839 'background':7,18,120,330,2698,2891,2898 'backoff':1715 'base':708,1743 'bash':1221,1359,1390,1864,2285 'basic':193 'batch':139,534,540,567,611,620,643,656,660,663,775,1910,1944,1971,2617,2621,2783,2796 'batch-process':138 'becom':999,1019,1047 'begin':1477 'bloat':1968 'blob':1903,1935 'block':40 'boundari':2960 'break':745,751,818,940,1012,1169,1327,1338,1470,1628,1794,1916,2084,2247 'build':39,326 'built':61,88,316 'built-in':60,87,315 'bullmq':146,2635,2639 'bullmq-specialist':145,2638 'burst':1589 'call':1139,1150,1666,1699,1722,2047,2078,2209,2355 'call-api':1698 'call-openai':1665 'callopenai':1662 'callratelimitedapi':1695 'capabl':113 'case':740,746 'caus':963,1342,1419,1873,2387 'cd':1856 'chang':1339 'charg':1446,1457 'check':1388,1523,2301,2342 'checkout.session.completed':741 'checkpoint':1920,2615 'chunk':633,637,650,653,1974,1980,1982,2015,2020,2028,2031,2802 'chunk.map':1985 'chunkarray':638,1975,2016 'chunks.length':661 'chunks.map':649,2027 'ci/cd':1401 'circular':976,1006,1027,1083 'clarif':2954 'class':58,973,1001,1021,1064,2458,2466,2478 'clean':479 'cleanup':448,466,478,499 'clear':764,2927 'cli':112,171,1220,1278,1292,1332,1346,1364,1759,1796 'cloud':187,1117,1176 'collabor':2631 'common':852,1244 'compat':1336 'complet':390,500,931 'completion.choices':416 'completion.usage':428 'concurr':76,1582,1634,1648,1657,1681,2333,2404,2412 'concurrencylimit':569,1669,1702,2424 'config':1763,1765,1824,1862,1868,2659 'configur':345,862,1186,1271,2273 'confirm':1564,1580 'connect':1142,1163,1615,2305,2308 'conserv':1732 'consid':2552,2583,2616 'consol':2315 'const':251,299,305,349,359,389,414,460,483,509,525,561,581,584,592,614,626,636,645,690,713,867,903,915,1085,1106,1510,1527,1554,1661,1694,1955,1973,1979,2002,2014,2126,2139,2156,2166 'content':365,378,402,410,415,421,423,426,2162,2179 'context':2401 'control':1649 'convert':1005,2477 'core':164 'could':1774 'count':925 'craftsman':158 'crash':51,1305,1322 'creat':1222,1494,1919,2613 'createdat':488,1051,1059,1104 'criteria':2963 'critic':767,968,1119,2517 'cron':92,434,467,516,2828 'current':1802 'custom':1438 'customer.subscription.updated':747 'cycl':1608 'daili':465,472,477 'daily-cleanup':464 'dailycleanup':461 'dashboard':788,815,958,1206,1311,1785,2235,2316 'data':705,793,804,1034,1071,1464,1576,2784,2801,2835 'data.email':1081 'data.id':1079 'databas':1141,1162,1225,1247,1552,1614,1641,1741,2430,2660,2668,2772 'dataset':538,1997 'datasetid':624 'date':491,971,997,1018,1046,1053,1061,1107,1109,2431,2439,2457 'date.now':492 'date.toisostring':2453 'db.emaillogs.create':1575 'db.emaillogs.findunique':1557 'db.logs.deletemany':486 'debug':70,2357 'dedupl':671 'default':220,233,823 'defineconfig':214,221 'definit':2511 'delay':83,1720 'deleg':2632 'delet':484,504 'deleted.count':502,505 'deletedcount':501 'deliveri':1463 'depend':2271 'deploy':184,1181,1416,2651,2655,2658,2859 'describ':2931 'design':34,98 'dev':3,116,167,1158,1303,1320,1373,1387,1757,1860,1867,2203,2222,2244,2255,2259,2281,2292,2296,2300,2302,2324,2326,2328,2330,2331,2336,2340,2703,2729,2748,2770,2789,2807,2819,2833,2886 'develop':28,107,2249,2284 'differ':1033,2276 'direct':2045 'directori':1804,1813,1855 'disappear':1026,2219 'discov':1780,1821 'docid':891 'docker':191 'document':873,889 'downstream':1584,1638,2418 'driven':151,2685,2695 'duplic':722,1420,1452,1461,1495 'durabl':48 'edg':758 'effect':1422,1483 'either':2216 'email':1080,1428,1436,1442,1453,1517,1531,1536,2753,2781,2824,2846,2868 'email-system':2752,2780,2823,2845,2867 'embed':912,916,929 'embeddings.length':926 'empti':1781 'enabledindev':231 'env':1128,1198,1216,1242,1270,2530 'env.trigger':1223,1409,1414 'environ':1111,1145,1182,1210,2943 'environment-specif':2942 'error':765,780,801,1164,1302,1313,1612,1906,2070,2080,2215,2237,2374,2377,2382,2385,2399,2437,2464,2490 'especi':851 'etc':680 'event':150,697,711,723,733,2684,2686,2694 'event-driven':2683,2693 'eventid':701,725,736 'eventu':1890 'exceed':828 'excel':27 'execut':25,762,821,835,1489,1901 'exhaust':1617 'exist':1131,1555,1566,1766 'experi':29 'expert':5,16,2948 'explicit':863,2381,2487,2496 'exponenti':1714 'export':219,250,358,459,508,560,613,689,866,1509,1660,1693,2001,2155 'express':175 'extern':91,1642,1736 'externalapi.call':1729 'extract':901 'extracttext':906 'factor':240,1712 'fail':786,798,808,1125,1140,1143,1159,1297,1316,1430,1473,1602,1911,2048,2269 'failur':966,1344,1486,1625,2389 'fals':720 'fan':2688 'featur':2105 'fetchdataset':629 'fewer':2625 'file':1224 'find':1762,1776 'fire':289 'first':33,57 'first-class':56 'fix':861,1039,1196,1355,1497,1654,1823,1943,2113,2278,2360,2390,2420,2450,2475,2501,2532,2563,2594,2619 'forget':291 'forgot':1289 'format':2448 'found':1148 'framework':172 'function':1025 'generat':364,377,420,911,1347,2161,2842 'generate-cont':363,2160 'generatecont':360,2157 'generateembed':918 'generateweeklystat':528 'get':1439 'github':679 'go':1203 'gpt':394,2171 'grow':1889,1936 'handl':300,386,646,675,695,1632,2055,2072,2081,2094,2375,2383 'handle-stripe-ev':694 'handle.wait':308 'handlecheckoutcomplet':743 'handler':130,666 'handles.length':664 'handlestripeev':691 'handlesubscriptionupd':749 'happen':2213 'hardcod':2515,2525,2535 'hello':256,265,279 'hello-world':255 'helloworld':252,286 'helloworld.trigger':293,302 'high':1282,1424,1581,1587,1752,2414 'hit':1595,1939 'hono':176 'host':190 'id':254,352,362,463,512,564,617,693,712,870,1078,1513,1664,1697,2005,2142,2159,2488,2497,2504 'idempot':707,1492,1499 'idempotencykey':684,714,1504 'idempotencykey.isnew':719 'idempotencykeys.create':716,1530 'ident':1441 'implement':2058,2109 'impli':2879,2884,2890,2896,2903,2910,2916 'import':213,243,285,332,339,451,552,681,1502,2122,2133,2362,2567,2598 'inconsist':2079 'increas':1742 'independ':44 'individu':1947 'infra':161 'infra-architect':160 'infrastructur':159 'inngest':152,2690 'input':2957 'insert':1465 'insid':2605 'instal':1366,1380,1405 'instanc':974,1022,1065,2459,2467,2479 'instead':1945,2035,2449,2454,2546,2577,2618,2646 'integr':14,54,123,177,313,319,385,2038,2086,2115,2132,2184,2548,2579,2682,2751,2764,2872,2911 'integration-task':122 'intern':1261 'iso':1055,2446 'issu':1772,1875 'item':548,579,585,590,591,596,627,639,652,1882,1953,1956,1958,1961,1976,2012,2030,2622 'items.length':659 'iter':1928 'job':8,19,121,445,2797,2899 'json':1009,1017,2322 'key':357,1229,1233,1251,1254,1257,1260,1500,1528,2147,2514,2521,2529,2536,2541 'key.isnew':1534 'kill':761,832,1891,1896 'know':845 'lack':2380 'larg':537,877,1905,1913,1996 'large-2x':876 'latest':1241,1372,1393 'length':422,424 'liber':73 'lifelin':71 'like':446 'limit':82,551,601,1600,1605,1611,1646,1658,1682,1690,1941,2053,2069,2093,2154,2405,2413,2562,2593,2919 'list':1396,1783 'live':1235 'llm':2674,2676,2705,2734,2865 'llm-architect':2675,2704,2733,2864 'load':2415 'local':106,807,1123,2254 'locat':1770,1818,1863 'log':67,72,229,782,840,893,2075,2097,2345,2352,2370,2398 'logger':245,334,454,554,683,2363 'logger.log':263,376,419,475,498,588,654,721,730,887,898,908,920,930,1535,1567,2354 'logic':2065,2394 'loglevel':228 'long':100,132,770,938,2904 'long-run':99,769 'long-running-task':131 'longer':881 'look':1797 'loop':1872,1924,2606,2612 'lose':1023,2103,2468 'lt':489 'machin':874 'manag':2648 'mani':547,1621,1633,2614 'manual':2061,2063 'mass':1623 'match':108,1351,2928 'maxattempt':234,367,1705 'maxtimeoutinm':238 'may':2386,2416 'mean':2101 'medium':1877,2040,2207 'memori':1874,1888,1893,1898,1940 'mention':2877,2882,2888,2894,2901,2908,2914 'messag':278,399,802,1450,2176,2348,2378,2408,2438,2465,2491,2518,2551,2582,2609 'message.content':418 'method':1002,1024,2469 'mid':834 'mid-execut':833 'millisecond':1725,1964,1989 'mintimeoutinm':236,1707 'minut':859 'mismatch':1276 'miss':1245,2965 'model':393,2170,2673,2681,2696 'monday':520 'monitor':1745 'monorepo':1771,1806,1840,1841,1848 'multipl':1456,1466 'must':1184,1333,1350,1808,1825,2493 'my-app':1830 'my-project':223 'my-task-nam':2505 'mytask.trigger':1050,1058,1067,1076,1092 'name':261,294,303,2508 'need':93,544,1099,2641,2657,2667,2679,2691 'never':983 'new':271,490,1052,1060,1069,1108,2128,2456 'next':1432,2325 'next.js':201 'nextj':173,2708,2721,2854 'nextjs-app-rout':2707,2720,2853 'node':227 'non':960 'non-serializ':959 'noth':2212 'notif':2778 'npm':1365,1379,1395,1404,2290,2334,2337 'npx':1239,1370,1384,1391,1412,1755,1858,1865,2257,2298 'null':1088 'obj':1086,1090,1093 'obj.parent':1089 'object':972,998,1043,1074,2432,2440,2474,2482 'old':481 'one':1788 'openai':178,312,318,340,346,353,384,1227,1249,1596,1640,1667,2043,2123,2125,2127,2129,2134,2143,2544,2568,2670 'openai.chat.completions.create':1685 'openai.configure':351,2141 'openaicli':350,2140 'openaiclient.chat.completions.create':392,2169 'orchestr':155 'order':1460,1516,1563,1579 'orderid':1521,1559,1561,1573,1577 'output':2937 'overwhelm':1583,1651,2417 'packag':1280,1789,1812,1828,1854 'package.json':1835,1850,2321 'parallel':642 'parent':1087 'partial':794,803 'pass':970 'pattern':192 'payload':260,267,371,578,623,700,886,962,979,991,1015,1103,1520,1678,1686,1718,1730,2011,2165,2435,2462 'payload.createdat':1110 'payload.data':744,750 'payload.datasetid':630 'payload.eventid':717,726,737 'payload.fileurl':907 'payload.id':892 'payload.items':587,2017 'payload.name':280 'payload.orderid':1532,1545 'payload.prompt':2180 'payload.style':406 'payload.topic':380,413 'payload.type':735,739,756 'per':1952 'period':444 'permiss':2958 'pin':1375 'pipelin':2744 'place':1189 'plain':1042,1073,2473,2481 'plan':826 'point':1487 'pool':1616 'postgr':2661 'power':329 'preset':875 'preview':398,2175 'principl':35 'process':140,264,535,536,546,566,589,607,612,657,667,731,753,776,795,805,872,890,934,1879,1972,2007,2699,2732,2743,2785,2804 'process-al':2006 'process-batch':565 'process-docu':871 'process.env.openai':355,2145 'process.env.trigger':2539 'processal':2003 'processbatch':562 'processbatch.trigger':651 'processchunk.triggerandwait':2029 'processdocu':868 'processitem':595,1960,1986 'product':109,810,1127,1154,1161,2242,2274,2359 'progress':841,894,954 'project':202,211,222,225,1208,1749 'promis':272 'promise.all':648,1984,2026 'proper':2096 'properti':2498 'protect':77,1679,2427 'pure':149,2692 'pure-event-driven':148 'push':1236,1243 'queu':981,2726 'queue':137,144,568,1656,1668,1701,2266,2423,2637,2645 'rate':550,600,1599,1604,1610,1645,1689,2052,2068,2092,2153,2561,2592 'rate-limit':1688 'raw':2033,2099,2120,2543,2574 're':838 'readi':96 'receiv':2761 'recommend':860,1038,1195,1354,1496,1653,1822,1942,2112,2277 'reconstitut':1097 'record':482 'redi':143,2634,2643 'redis-back':2642 'redis-queu':142 'ref':1028 'refer':977,1084 'regist':1299,1318 'registr':1343,2319,2500 'relat':2848 'reliabl':12,23,66,669 'remix':174 'remov':2534 'replac':2565,2596 'report':447,507,515,2815,2841 'request':1622 'requir':1215,2956 'resend':180 'resili':2060 'resolv':273,275 'resourc':79,880 'respect':599 'respons':2167,2182 'restart':53 'result':298,306,582,593,598,609,2737,2809 'results.length':608 'results.push':597 'retri':230,322,366,387,1418,1434,1455,1472,1603,1704,1711,2051,2064,2091,2151,2559,2590 'retryabl':45 'return':277,425,503,532,606,662,727,752,933,1151,1540,1546,1570,1619,1683,1727,2181 'review':2949 'right':1054,1072,1970,2130 'role':400,408,2177 'root':1750,1816,1829,1849 'router':2710,2723,2856 'run':46,101,133,258,369,437,473,523,573,576,621,698,771,884,984,986,1101,1171,1403,1411,1518,1673,1676,1716,1754,1809,1852,2009,2163,2205,2226,2231,2251,2264,2280,2291,2335,2338,2905 'runtim':226 'safeti':2959 'scale':1630 'schedul':85,126,431,440,452,2814,2917 'scheduled-trigg':125 'schedules.task':462,511 'scope':141,2930 'script':2323 'sdk':168,1274,1330,1353,1362,2034,2044,2121,2545,2576 'sdks':2088,2100 'second':604 'secret':1232,1256,2528,2540 'see':1032 'self':189 'self-host':188 'send':1427,1435,1515 'send-order-email':1514 'sendemail':1544,1572 'sendorderemail':1511 'sendreportemail':530 'sent':1037,1526,1538,1547,1569,2779,2844 'separ':1177,1269,2023 'sequenti':946 'serial':1014,2442,2471 'serializ':961 'server':1304,1321,2204,2223,2256,2282,2297,2303 'serverless':2652 'servic':1258,1262,1585,1643,2419,2649 'set':81,196,1209,1655 'settimeout':274 'setup':195 'sever':766,967,1118,1281,1423,1586,1751,1876,2039,2206,2346,2376,2406,2436,2463,2489,2516,2549,2580,2607 'sharp':757 'show':784,2307,2317 'side':1421,1482 'silenc':2239 'silent':964,2270 'simul':268 'simultan':1598 'situat':768,969,1120,1283,1425,1588,1753,1878,2041,2208 'sk':1230,1234 'skill':2700,2745,2786,2816,2849,2922 'skill-trigger-dev' 'skip':724,728,1539,1541 'slack':182,1449 'slow':1899 'small':1909 'sourc':2687 'source-sickn33' 'specialist':147,2640 'specif':2944 'specifi':1861 'split':631,2628 'src':1836 'src/trigger':1851 'src/trigger/tasks.ts':242 'stack':791 'stage':1266,1272 'start':206,476,619,655,888,1324,1731 'start-batch':618 'startbatchjob':615 'stat':526,531,533 'state':49,1902,1921,1934,1969 'statement':2371 'step':897,899,909,921,947,1433 'stop':778,848,2950 'store':923,2738 'storevector':928 'string':262,373,375,580,625,702,704,1000,1020,1048,1056,1105,1522,2013,2444,2447 'stripe':181,678,696,710,732,1231,1255,1445,2750,2763,2871 'stripe-integr':2749,2762,2870 'structur':1007 'style':374 'substitut':2940 'subtask':942,949,1999,2630 'success':932,2962 'sudden':777 'supabas':183,2662,2664,2712,2740,2756,2775,2791,2812,2821,2838 'supabase-backend':2663,2711,2739,2755,2774,2790,2811,2820,2837 'surviv':50 'switch':738 'symptom':796,990,1144,1306,1451,1609,1773,1894,2062,2227 'sync':450,1114,1194,1197 'system':401,2754,2782,2825,2847,2869 'take':858 'task':36,42,75,103,117,124,134,136,194,244,253,310,331,333,361,432,435,453,553,563,616,644,682,692,759,773,783,797,811,830,855,869,939,965,980,996,1031,1096,1121,1155,1166,1172,1296,1307,1319,1417,1426,1474,1480,1503,1512,1592,1624,1635,1663,1696,1778,1782,1819,1887,1895,1900,1932,2004,2024,2067,2158,2201,2217,2233,2250,2311,2318,2343,2349,2372,2379,2393,2402,2409,2485,2492,2507,2510,2666,2678,2725,2766,2830,2892,2906,2912,2918,2926 'task-queu':135 'task.trigger':2210 'tasks.ts':1838 'tempor':157 'temporal-craftsman':156 'termin':2286,2293 'test':1264,2946 'text':902,904,919 'text.length':914 'textlength':913 'thousand':1880,1926 'throw':1029,1094 'time':812,883,1467 'timeout':760,822,864,953 'togeth':1358 'toisostr':1062 'token':427,430 'tool':163 'topic':372,379 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':429 'totalitem':658 'trace':792 'track':1550 'tradit':2636 'treat':2935 'trigger':2,115,127,166,170,186,281,610,641,1593,1837,2200,2228,2265,2327,2339,2434,2461,2484,2527,2633,2702,2717,2728,2747,2767,2769,2788,2798,2806,2818,2829,2832,2885 'trigger-c':169 'trigger-cloud':185 'trigger-dev':1,2701,2727,2746,2768,2787,2805,2817,2831 'trigger-dev-sdk':165 'trigger-dev-task':114 'trigger.config.ts':212,1315,1746,1777,1799,1833,1844 'trigger.dev':4,13,15,198,208,217,248,337,343,348,382,457,558,687,819,1013,1116,1137,1170,1201,1205,1238,1240,1267,1286,1329,1368,1371,1382,1385,1392,1398,1407,1413,1471,1507,1629,1756,1859,1866,2037,2085,2131,2137,2186,2189,2192,2195,2198,2258,2295,2299,2310,2329,2366,2512,2519,2555,2571,2586,2602,2656,2880 'trigger.dev/anthropic':2188,2585 'trigger.dev/anthropic''':2601 'trigger.dev/openai':2185,2554 'trigger.dev/openai''':2570 'trigger.dev/openai'';':342,2136 'trigger.dev/resend':2191 'trigger.dev/sdk':1285,1397 'trigger.dev/sdk/v3''':2365 'trigger.dev/sdk/v3'';':216,247,336,456,557,686,1506 'trigger.dev/sdk@$':1406 'trigger.dev/sdk@3.3.0':1381 'trigger.dev/sdk@latest':1367 'trigger.dev/slack':2194 'trigger.dev/stripe':2197 'triggerandwait':944 'true':232,729,754,935,1542,1548 'try/catch':2396 'turbo':397,2174 'turbo-preview':396,2173 'type':703,734,755,1301,1312,1348,1560,1562,1578 'typescript':32,865,1044,1100,1501,1553,1659,1692,1949,2000,2118 'typescript-first':31 'ui':2719 'unclear':2388 'undefin':994,1135 'undefined/null':988 'unhandl':2384 'updat':1284,1291,1357,1360,2773 'url':1226,1248,1263 'use':59,110,205,314,325,381,443,543,674,943,1041,1219,1498,1998,2032,2042,2098,2114,2445,2452,2472,2526,2538,2542,2553,2573,2584,2624,2875,2920 'user':409,1068,1070,1077,2178,2716,2876,2881,2887,2893,2900,2907,2913 'valid':2341,2945 'valu':989,992 'var':1129,1199,1217,1246,2531 'vari':824 'variabl':1112,1146,1183,1211 'vector':924 'vercel':1133,2650,2654,2858 'vercel-deploy':2653,2857 'vercel/railway':1180 'versa':1295 'version':1275,1337,1341,1378,1389,1394,1410,1415 'via':2718 'vice':1294 'vicious':1607 'visibl':956 'void':2221 'wait':296,555,1709,1948,1951,1967,1993,2626 'wait.for':603,1724,1870,1884,1918,1963,1988,2604,2610 'warn':2347,2407,2550,2581,2608 'wasn':2224 'web':1843 'webhook':129,665,668,676,1462,2742,2760 'webhook-handl':128 'week':506,514 'weekly-report':513 'weeklyreport':510 'weird':1300 'well':2851 'without':763,1491,1647,2202,2344,2373,2403,2486 'won':843 'work':105,269,806,1122,1156,1786,1803,1907,2240,2275,2850 'workflow':10,21,154,2714,2758,2794,2826 'workflow-orchestr':153 'world':257,266,295,304 'wrap':2087,2392 'wrapper':64 'write':411 'writer':407 'wrong':1045,1063,1082,1769,1817,1950,2119 'yaml':1402","prices":[{"id":"3c3dd14a-ce59-40ce-9662-3a0dd4b4e40e","listingId":"e6ed4051-ae38-4e1a-b50c-44c37506354c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:46:32.216Z"}],"sources":[{"listingId":"e6ed4051-ae38-4e1a-b50c-44c37506354c","source":"github","sourceId":"sickn33/antigravity-awesome-skills/trigger-dev","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/trigger-dev","isPrimary":false,"firstSeenAt":"2026-04-18T21:46:32.216Z","lastSeenAt":"2026-04-22T06:52:03.151Z"}],"details":{"listingId":"e6ed4051-ae38-4e1a-b50c-44c37506354c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"trigger-dev","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34460,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"4ef0dd3e80d0971e5c3e452cd45da9499a8c7ed4","skill_md_path":"skills/trigger-dev/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/trigger-dev"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"trigger-dev","description":"Trigger.dev expert for background jobs, AI workflows, and reliable"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/trigger-dev"},"updatedAt":"2026-04-22T06:52:03.151Z"}}