inngest-steps

Implement durable workflow steps with Inngest step methods in TypeScript.

Updated Jun 22, 2026
One-click install
npx skills add https://github.com/aashahin/ai-skills --skill inngest-steps-aashahin
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: inngest-steps
Source: https://github.com/aashahin/ai-skills/tree/main/inngest-steps
Command: npx skills add https://github.com/aashahin/ai-skills --skill inngest-steps-aashahin

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires inngest.

What problem does it solve? Long-running workflows break when processes restart, and coordinating delays, external events, and retries manually is error-prone. This Skill guides you through Inngest's step methods so each unit of work is independently retried, memoized, and survives crashes. ## Core Features & Use Cases - Durable execution with step.run: Wrap non-deterministic code (API calls, DB queries) in retriable steps that memoize results across re-runs. - Delays and event coordination: Use step.sleep, step.sleepUntil, step.waitForEvent, and step.waitForSignal for scheduled follow-ups, human approval gates, and webhook callbacks with timeouts. - Composition and parallelism: Fan out with step.sendEvent, await results with step.invoke, and run parallel work with Promise.all, loops, and chunked batch processing. - Use Case: Build a cart abandonment flow that sends a welcome email, sleeps 24 hours, waits up to 7 days for a purchase event, and invokes a discount function on timeout. ## Quick Start Use the inngest-steps skill to write an Inngest function that sends a welcome email, waits 24 hours, then waits for a user approval event with a 7-day timeout.

Frequently Asked Questions about inngest-steps

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add a delay that survives restarts in an Inngest function?▼

Use step.sleep with a duration string like "24h" or "7d", or step.sleepUntil with a specific Date. The function pauses without consuming compute and resumes durably even if the process restarts.

What is the difference between step.waitForEvent and step.waitForSignal?▼

step.waitForEvent matches events by name with optional CEL expressions and suits cases where multiple functions may handle the same event. step.waitForSignal targets a unique signal string for exact 1:1 matching with a specific function run.

Why does my Inngest function log or run code multiple times?▼

Code outside steps re-executes every time a step runs because each step is a separate HTTP request. Move all non-deterministic logic like API calls, database queries, and logging inside step.run blocks.

Does step.waitForEvent catch events sent before the step runs?▼

No, waitForEvent only catches events sent after that step executes. Always handle the null return value, which indicates the timeout elapsed without a matching event arriving.

What are the step limits in an Inngest function?▼

Each function allows a maximum of 1,000 steps, 4MB per step output, and 32MB total per function run. Step IDs can be reused in loops since Inngest handles counters automatically.

How do I run Inngest steps in parallel with Promise.all?▼

Create step.run promises without awaiting, then await them together with Promise.all. In v4, parallel execution is optimized by default; use group.parallel for true Promise.race semantics since plain race waits for all promises to settle.