Agent skill

Inngest V3 V4 Migration

by Asymmetric-al in Asymmetric-al/core

A skill your agent uses when upgrading an existing TypeScript codebase from Inngest SDK v3 to v4, or when fixing mixed v3/v4 API usage.

AGPL-3.0Auto-check passedBackend & APIs

Install Inngest V3 V4 Migration

skills CLI
$ npx skills add Asymmetric-al/core --skill inngest-v3-v4-migration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Asymmetric-al/core inngest-v3-v4-migration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Asymmetric-al/core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/inngest-v3-v4-migration .claude/skills/inngest-v3-v4-migration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
inngest-v3-v4-migration
GitHub stars
381
Token cost
~2.8k tokens
SKILL.md length
990 words
Files
1
Skills in repo
43
Repo updated
First seen
Licence
AGPL-3.0

At a glance

A skill your agent uses when upgrading an existing TypeScript codebase from Inngest SDK v3 to v4, or when fixing mixed v3/v4 API usage.

  • Works in 10 steps: Update package versions. → Fix client construction and local/prod… → Move serve options to the client. → …
  • Upgrading an existing TypeScript codebase from Inngest SDK v3 to v4
  • SKILL.md covers When to Trigger, Migration Scan, Upgrade Order and Package and Environment, plus 14 more sections
  • Calls rg, npm and npx; needs INNGEST_SIGNING_KEY

What it does

Inngest V3 V4 Migration is an agent skill from Asymmetric-al/core. Use when upgrading an existing TypeScript codebase from Inngest SDK v3 to v4, or when fixing mixed v3/v4 API usage. Covers detecting current SDK usage, moving triggers into createFunction options, replacing EventSchemas with eventType/staticSchema, moving serve options to the client, updating realtime imports, rewriting step.invoke string IDs, checkpointing/serverless runtime settings, Connect option changes, and verification.

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering Serverless. It works with TypeScript. The repository describes itself as: A high-performance, enterprise-grade Next.js 16 application for mission-focused non-profit organizations. Built for high impact teams. The licence is AGPL-3.0.

When your agent uses it

  • Upgrading an existing TypeScript codebase from Inngest SDK v3 to v4
  • Fixing mixed v3/v4 API usage
  • Into createFunction options
  • Replacing EventSchemas with eventType/staticSchema

Example prompts

  • “/inngest-v3-v4-migration”

Requirements

  • Node.js
  • A credential in INNGEST_SIGNING_KEY

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Update package versions.
  2. Fix client construction and local/prod mode.
  3. Move serve options to the client.
  4. Move triggers into createFunction options.
  5. Replace EventSchemas with eventType() / staticSchema().
  6. Rewrite step.invoke() string IDs.
  7. Migrate realtime from @inngest/realtime to v4 native APIs.
  8. Update middleware and logging.
  9. Configure checkpointing/serverless runtime.
  10. Typecheck, run tests, and optionally sync with the dev server.

What it can do on your machine

Read from SKILL.md and the folder at commit c30c8ff. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • rg
    • npm
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • inngest.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • INNGEST_SIGNING_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Inngest V3 V4 Migration loads about 2.8k tokens when it runs. Until then it costs about 114 tokens; SKILL.md has 990 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~114
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Asymmetric-al/core at commit c30c8ff, republished under its AGPL-3.0 licence (© Asymmetric-al). 990 words, ~2,810 tokens.

Download SKILL.mdSave it as .claude/skills/inngest-v3-v4-migration/SKILL.md (or your agent's skills folder).
name
inngest-v3-v4-migration
description
Use when upgrading an existing TypeScript codebase from Inngest SDK v3 to v4, or when fixing mixed v3/v4 API usage. Covers detecting current SDK usage, moving triggers into createFunction options, replacing EventSchemas with eventType/staticSchema, moving serve options to the client, updating realtime imports, rewriting step.invoke string IDs, checkpointing/serverless runtime settings, Connect option changes, and verification.

Inngest v3 to v4 Migration

Use this skill when the user asks to upgrade Inngest, fix v3/v4 errors, migrate realtime, or clean up a codebase that has mixed SDK patterns.

Primary reference: https://www.inngest.com/docs/reference/typescript/v4/migrations/v3-to-v4

This skill is agent-first: detect actual usage first, make mechanical API changes in a controlled order, then typecheck and run focused tests.

When to Trigger

Use this skill for requests like:

  • "Upgrade Inngest from v3 to v4"
  • "Fix our Inngest v4 migration"
  • "We're getting signing key required / cloud mode errors after upgrading"
  • "step.invoke with a string function ID stopped working"
  • "@inngest/realtime broke after installing inngest@4"
  • "Move from EventSchemas to eventType"
  • "Make this existing Inngest repo v4-compatible"

If the user asks for a broad codebase reliability audit first, use inngest-brownfield-audit to choose scope, then return here for the v4 changes.

Migration Scan

Start by locating all Inngest surfaces:

bash
rg -n '"inngest"|"@inngest/realtime"|"@inngest/agent-kit"' package.json **/package.json
rg -n 'new Inngest|EventSchemas|eventType|staticSchema|createFunction\\(|serve\\(|connect\\(|step\\.invoke|referenceFunction|@inngest/realtime|realtimeMiddleware|useInngestSubscription|serveHost|rewriteGatewayEndpoint|logLevel|streaming:|signingKey|signingKeyFallback|baseUrl|INNGEST_DEV|INNGEST_SIGNING_KEY' .

Then classify the repo:

  • No Inngest yet: use inngest-setup, not this migration skill.
  • v3 only: migrate the SDK and all breaking changes together.
  • mixed v3/v4: prioritize removing broken v3 APIs from v4 code.
  • v4 mostly done: focus on missed runtime gotchas like local dev mode, serverless maxRuntime, realtime package imports, and string step.invoke.

Before editing, record:

text
Inngest migration scan:
- Current package versions:
- Client files:
- Serve/connect entrypoints:
- Functions using old trigger syntax:
- EventSchemas usage:
- Realtime v3 package usage:
- step.invoke string IDs:
- Serverless runtime constraints:
- Tests/checks available:

Upgrade Order

  1. Update package versions.
  2. Fix client construction and local/prod mode.
  3. Move serve options to the client.
  4. Move triggers into createFunction options.
  5. Replace EventSchemas with eventType() / staticSchema().
  6. Rewrite step.invoke() string IDs.
  7. Migrate realtime from @inngest/realtime to v4 native APIs.
  8. Update middleware and logging.
  9. Configure checkpointing/serverless runtime.
  10. Typecheck, run tests, and optionally sync with the dev server.

Package and Environment

Install the latest v4 SDK:

bash
npm install inngest@latest
# or pnpm add inngest@latest
# or yarn add inngest@latest

If the repo uses v3 realtime, remove @inngest/realtime; v4 realtime lives in the inngest package and subpaths such as inngest/realtime, inngest/react, and native step.realtime / inngest.realtime.

v4 defaults to Cloud mode. For local development, use an env var:

bash
INNGEST_DEV=1 npm run dev

Do not hardcode isDev: true in source unless the repo's existing environment pattern clearly scopes it to local-only code. Production should use INNGEST_SIGNING_KEY.

Client and Serve Options

In v4, options such as signingKey, signingKeyFallback, and baseUrl belong on new Inngest(...), not on serve(...).

typescript
// Old v3
app.use(
  "/api/inngest",
  serve({
    client: inngest,
    functions,
    signingKey: process.env.INNGEST_SIGNING_KEY,
    baseUrl: process.env.INNGEST_BASE_URL,
  }),
);

// New v4
export const inngest = new Inngest({
  id: "my-app",
  signingKey: process.env.INNGEST_SIGNING_KEY,
  baseUrl: process.env.INNGEST_BASE_URL,
});

app.use("/api/inngest", serve({ client: inngest, functions }));

If the repo already relies on supported environment variables and does not pass serve options explicitly, no code change may be required for those keys.

Other renames:

  • serveHost -> serveOrigin
  • streaming: "force" -> streaming: true
  • streaming: "allow" -> streaming: true
  • streaming: false stays false
  • logLevel is removed; pass a logger such as new ConsoleLogger({ level })

createFunction Triggers

Triggers move into the first argument's options object.

typescript
// Old v3
inngest.createFunction(
  { id: "send-welcome" },
  { event: "user/created" },
  async ({ event, step }) => {},
);

// New v4
inngest.createFunction(
  { id: "send-welcome", triggers: [{ event: "user/created" }] },
  async ({ event, step }) => {},
);

Cron triggers move the same way:

typescript
inngest.createFunction(
  { id: "nightly-sync", triggers: [{ cron: "0 2 * * *" }] },
  async ({ step }) => {},
);

If a function is invoked only via step.invoke, it may be triggerless.

EventSchemas to eventType/staticSchema

Replace centralized EventSchemas with event-specific definitions.

typescript
import { Inngest, eventType, staticSchema } from "inngest";
import { z } from "zod";

export const userCreated = eventType("user/created", {
  schema: z.object({
    userId: z.string(),
    email: z.string().email(),
  }),
});

type InvoicePaid = {
  invoiceId: string;
  customerId: string;
};

export const invoicePaid = eventType("billing/invoice.paid", {
  schema: staticSchema<InvoicePaid>(),
});

Use event types consistently:

typescript
await inngest.send(userCreated.create({ userId, email }));

inngest.createFunction(
  { id: "on-user-created", triggers: [userCreated] },
  async ({ event }) => {},
);

await step.waitForEvent("wait-for-invoice", {
  event: invoicePaid,
  timeout: "7d",
});

Important: staticSchema expects a type, not an interface. Convert interfaces to type aliases when needed.

step.invoke

v4 no longer accepts raw string function IDs. Use an imported function reference or referenceFunction().

typescript
import { referenceFunction } from "inngest";

await step.invoke("run-report", {
  function: referenceFunction({
    appId: "analytics-app",
    functionId: "generate-report",
  }),
  data: { reportId },
});

If the target function is in the same codebase, prefer passing the imported function itself:

typescript
await step.invoke("run-report", {
  function: generateReport,
  data: { reportId },
});

Realtime Migration

v3 realtime used @inngest/realtime and middleware-injected publish. v4 realtime is native.

Replace:

  • @inngest/realtime package
  • realtimeMiddleware()
  • handler args such as { publish }
  • v3 React hooks such as useInngestSubscription()

With:

  • channel definitions from inngest/realtime
  • step.realtime.publish between steps
  • inngest.realtime.publish inside an existing step.run
  • subscription helpers/hooks from current v4 APIs

Use inngest-realtime for detailed patterns. Do not call step.realtime.publish from inside step.run; use inngest.realtime.publish there to avoid step-in-step behavior.

Parallelism and Checkpointing

v4 enables optimized parallelism and checkpointing by default.

Watch for Promise.race over steps. With optimized parallelism, Promise.race waits for all step promises to settle. If the repo relies on first-winner behavior, use group.parallel().

For serverless platforms, configure checkpointing maxRuntime slightly below the platform limit:

typescript
export const inngest = new Inngest({
  id: "my-app",
  checkpointing: {
    maxRuntime: "50s",
  },
});

On Vercel or similar frameworks, also set the route handler's max duration where the platform supports it.

Show full SKILL.md (371 more words)Show less

Connect Changes

If the repo uses Connect:

  • rewriteGatewayEndpoint is replaced by gatewayUrl.
  • Connect may use worker-thread isolation. If integration issues appear, check isolateExecution: false or INNGEST_CONNECT_ISOLATE_EXECUTION=false.
  • Keep target URLs and signing/event keys in env vars.

Verification

Run checks in increasing confidence:

  1. Package manager install/update.
  2. Typecheck.
  3. Unit/integration tests around migrated functions.
  4. Start the app with INNGEST_DEV=1.
  5. Run npx inngest-cli@latest dev and confirm function discovery.
  6. Send one representative event and inspect the run.

If local dev-server verification is not possible, state exactly which static checks passed and what runtime verification remains.

Common Failure Messages

  • "A signing key is required to run in Cloud mode": set INNGEST_DEV=1 for local development or configure INNGEST_SIGNING_KEY for production.
  • Cls is not a constructor on /api/inngest: likely v3 @inngest/realtime middleware in a v4 app. Remove the package and migrate to native realtime.
  • step.invoke fails with string function ID: replace strings with imported function references or referenceFunction().
  • Type errors around schemas: replace EventSchemas with eventType() and staticSchema().
  • Unexpected Promise.race behavior: use group.parallel() for first-winner step races or disable optimized parallelism only when necessary.

Anti-Patterns

  • Mixing v3 realtime middleware with inngest@4.
  • Passing signingKey, baseUrl, or signingKeyFallback to serve().
  • Moving event trigger syntax but forgetting cron/invoke-triggered functions.
  • Replacing EventSchemas with untyped string events everywhere.
  • Hardcoding isDev: true in production-bound source.
  • Leaving string IDs in step.invoke.
  • Skipping typecheck after mechanical migration.

This Repository

These upstream Inngest instructions are vendored for agent tooling and integration work in this monorepo.

Repository Triggers

Use this skill when inngest-v3-v4-migration matches the current Inngest task. If the right skill is unclear, start with docs/ai/skills/inngest/SKILL.md.

Repository Workflow

  1. Confirm whether the request is agent-tooling guidance or product runtime integration.
  2. Use inngest-brownfield-audit before changing existing app workflows or fragile background work.
  3. Follow this upstream guidance under OpenSpec, root AGENTS.md, repo rulebooks, framework docs, and runtime evidence.
  4. Keep runtime packages, app code, migrations, and INNGEST_* env requirements out of agent-tooling-only changes.

Repository Checklist

  • The task has explicit product-runtime scope before adding Inngest app code or dependencies.
  • Existing workflows were audited before introducing or changing durable workflow behavior.
  • Any MCP usage is backed by a running Inngest dev server on the configured port.
  • Upstream source and license attribution remain documented in docs/ai/skills/inngest/references/upstream.md.

© Asymmetric-al, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/inngest-v3-v4-migration of Asymmetric-al/core.

Open the folder on GitHubat commit c30c8ff

Compare with similar skills

Inngest V3 V4 Migration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Inngest V3 V4 Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Inngest V3 V4 Migration this skillAsymmetric-al/core381—~2.8kAutomated safety check: PassAGPL-3.0
AWS Serverless Edazxkane/aws-skills3674 repos~3.2kAutomated safety check: PassMIT
Qstash JSupstash/qstash-js269—~746Automated safety check: PassMIT
Dce Edgevercel/next.js143k—~1kAutomated safety check: PassMIT
AWS Lambda Durable Functionsawslabs/agent-plugins916—~2.3kAutomated safety check: PassApache-2.0
Twelve Factorcitypaul/.dotfiles740—~4.4kAutomated safety check: NotesCustom licence

Similar skills

  • AWS Serverless Eda

    zxkane/aws-skills

    AWS serverless and event-driven architecture expert based on Well-Architected Framework.

    367 GitHub starsUsed in 4 repos~3.2k tokens
    Backend & APIsAuto-check passed
  • Qstash JS

    upstash/qstash-js

    Official

    Work with the QStash JavaScript/TypeScript SDK for serverless messaging, scheduling.

    269 GitHub stars~746 tokensUpdated 5 days ago
    Backend & APIsAuto-check passed
  • Dce Edge

    vercel/next.js

    Official

    DCE-safe require() patterns and edge runtime constraints. An agent skill from vercel/next.js.

    143k GitHub stars~1k tokensUpdated today
    Backend & APIsAuto-check passed
  • AWS Lambda Durable Functions

    awslabs/agent-plugins

    Official

    Build resilient, long-running, multi-step applications with AWS Lambda durable functions with automatic state persistence, retry logic, and orchestration for long-running executions.

    916 GitHub stars~2.3k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Twelve Factor

    citypaul/.dotfiles

    Twelve-Factor App patterns for software-as-a-service and long-running process applications.

    740 GitHub stars~4.4k tokensUpdated 2 days ago
    Backend & APIsAuto-check: notes
  • AWS Lambda Typescript Integration

    giuseppe-trisciuoglio/developer-kit

    Provides AWS Lambda integration patterns for TypeScript with cold start optimization.

    357 GitHub stars~2.9k tokensUpdated 1 mo ago
    Backend & APIsAuto-check: notes

More from Asymmetric-al/core

All 43 skills in this repo
  • Idempotency Handling

    Asymmetric-al/core

    Implement idempotency keys and handling to ensure operations can be safely retried without duplicate effects.

    381 GitHub stars~867 tokensUpdated today
    Auto-check passed
  • Accessibility Review

    Asymmetric-al/core

    Audit and fix accessibility in Core UI. An agent skill from Asymmetric-al/core.

    381 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Email Inbox

    Asymmetric-al/core

    A skill your agent uses when building any system where email content triggers actions — AI agent inboxes, automated support handlers, email-to-task pipelines, or any workflow processing untrusted…

    381 GitHub stars~4.1k tokensUpdated today
    Auto-check: notes
  • Components Build

    Asymmetric-al/core

    Build modern, composable, and accessible React UI components following the components.build specification.

    381 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Create Agent

    Asymmetric-al/core

    Guides a one-question-at-a-time design interview, captures alignment in agent/EVE-BRIEF.md, then scaffolds and implements a runnable eve agent with verbose teaching comments.

    381 GitHub stars~2.6k tokensUpdated today
    Auto-check: notes
  • Emil Design Engineering

    Asymmetric-al/core

    Design engineering principles and patterns for building polished, accessible web interfaces.

    381 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Inngest V3 V4 Migration

What does Inngest V3 V4 Migration do?

A skill your agent uses when upgrading an existing TypeScript codebase from Inngest SDK v3 to v4, or when fixing mixed v3/v4 API usage. Inngest V3 V4 Migration is an agent skill from Asymmetric-al/core. Use when upgrading an existing TypeScript codebase from Inngest SDK v3 to v4, or when fixing mixed v3/v4 API usage.

When should I use Inngest V3 V4 Migration?

Inngest V3 V4 Migration fits situations like: upgrading an existing TypeScript codebase from Inngest SDK v3 to v4; fixing mixed v3/v4 API usage; into createFunction options; replacing EventSchemas with eventType/staticSchema.

How do I install Inngest V3 V4 Migration in Claude Code?

Run `npx skills add Asymmetric-al/core --skill inngest-v3-v4-migration -a claude-code`. Or copy the skill folder (.agents/skills/inngest-v3-v4-migration in Asymmetric-al/core) into .claude/skills/inngest-v3-v4-migration in your project. Claude Code loads it when a task matches its description.

How do I install Inngest V3 V4 Migration in Codex?

Run `npx skills add Asymmetric-al/core --skill inngest-v3-v4-migration -a codex`. Or copy the skill folder (.agents/skills/inngest-v3-v4-migration in Asymmetric-al/core) into .agents/skills/inngest-v3-v4-migration in your project. Codex loads it when a task matches its description.

Can I use Inngest V3 V4 Migration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Asymmetric-al/core --skill inngest-v3-v4-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/inngest-v3-v4-migration, .gemini/skills/inngest-v3-v4-migration, .github/skills/inngest-v3-v4-migration and .opencode/skills/inngest-v3-v4-migration in your project.

What does Inngest V3 V4 Migration need to run?

Going by SKILL.md and its folder, Inngest V3 V4 Migration needs the command-line tools its instructions call (rg, npm and npx) and credentials named INNGEST_SIGNING_KEY. Our summary lists: Node.js; A credential in INNGEST_SIGNING_KEY.

Does Inngest V3 V4 Migration access the network?

SKILL.md names 1 domain. As links in the text: inngest.com. This is read from the text; nothing was executed.

Is Inngest V3 V4 Migration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Inngest V3 V4 Migration use?

Inngest V3 V4 Migration is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Inngest V3 V4 Migration use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Inngest V3 V4 Migration?

Skills that share tags, products or a category with Inngest V3 V4 Migration: AWS Serverless Eda (zxkane/aws-skills, 367 stars), Qstash JS (upstash/qstash-js, 269 stars), Dce Edge (vercel/next.js, 143k stars) and AWS Lambda Durable Functions (awslabs/agent-plugins, 916 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Inngest V3 V4 Migration?

Asymmetric-al (a GitHub organization) maintains it in Asymmetric-al/core, which has 381 GitHub stars. The repository holds 43 skills in this directory. The repository was last updated on October 9, 2026.

Source: Asymmetric-al/core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.