
inngest-brownfield-audit
Use when analyzing an existing TypeScript or JavaScript codebase to decide where and how to introduce Inngest. Covers repository discovery, framework and package detection, finding durability gaps in HTTP handlers, webhooks, cron jobs, queues, long-running jobs, AI agents, Agent Evals, polling loops, eval loops, and side-effect-heavy code, then producing and implementing an incremental integration plan.
- Installs
- 665
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/inngest/inngest-skills --skill inngest-brownfield-audit- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads inngest-brownfield-audit automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Inngest Brownfield Audit
Use this skill when asked to inspect an existing codebase, add Inngest "where it makes sense", migrate fragile background work, or find durability gaps before making changes.
This is an agent-first workflow. Do the audit from evidence in the repo, name the specific files and call sites that drove each conclusion, and make small integration moves that preserve current behavior.
When to Trigger
Use this skill for requests like:
- "Audit this repo for Inngest opportunities"
- "Add Inngest to this codebase"
- "Make our webhooks / cron jobs / background tasks reliable"
- "Find places where work can be lost on deploy or process crash"
- "Replace fragile polling, delayed jobs, or fire-and-forget promises"
- "Make this AI workflow / agent durable"
If the user is starting from scratch instead of a brownfield repo, use
inngest-setup, inngest-durable-functions, inngest-events,
inngest-steps, and, for AI workflows, the agent patterns in this skill. Use
inngest-agent-evals when the request includes scoring, sessions, experiments,
deferred scorers, Insights, or outcome-based evaluation.
Audit Loop
-
Map the project shape.
- Read
package.json, workspace files, app/router structure, server entry points, deployment config, and test scripts. - Identify framework: Next.js App Router, Next.js Pages Router, Express, Hono, Fastify, Remix, SvelteKit, Astro, NestJS, worker-only service, or other.
- Detect package manager and TypeScript conventions before adding files.
- Read
-
Find existing Inngest usage.
- Search for
inngest,createFunction,serve(,/api/inngest,INNGEST_,step.run,step.sleep,step.waitForEvent,step.sendEvent,step.invoke,step.ai,inngest.send, and@inngest/realtime. - If Inngest exists, inspect version, client config, serve endpoint, registered functions, event naming, env vars, and v3/v4 API shape before changing anything.
- Search for
-
Find durability gaps.
- Search for fire-and-forget work:
void someAsync(), un-awaited promises,.then(chains,setTimeout,setInterval, detached jobs after HTTP response, and background work in route handlers. - Search for cron and schedulers:
cron,node-cron,agenda,bull,bullmq,bee-queue,qstash,sqs,temporal,trigger.dev, deployment cron config, and scheduled API routes. - Search for webhooks and at-least-once producers: Stripe, Clerk, GitHub,
Slack, Shopify, HubSpot, Linear, Svix, and generic
webhook. - Search for long-running work: PDF generation, exports, video/image processing, embeddings, bulk email, imports, ETL, sync jobs, polling loops, retries, and external API calls.
- Search for AI agent shapes: tool loops, LLM calls, streaming tokens, human approval, multi-step reasoning, vector search, eval loops, scoring, experiment assignment, user-feedback signals, and provider calls that need rate limits or retry-safe state.
- Search for fire-and-forget work:
-
Classify each candidate.
- P0: user-visible loss, duplicate charge/email/action, timeout, missed webhook, or crash-prone workflow.
- P1: fragile but recoverable background work, manual retry burden, noisy 429s, or poor observability.
- P2: cleanup, ergonomics, or future migration opportunity.
- For each candidate, record: file, current trigger, side effects, idempotency key, failure mode, recommended Inngest primitive, migration size, and confidence.
-
Choose the smallest safe integration.
- Prefer one vertical slice over a wide rewrite.
- Keep existing domain functions and data models where possible.
- Add an Inngest client and serve endpoint only once.
- Move side effects into
step.runone boundary at a time. - Make event IDs and database writes idempotent before adding retries.
- Add tests around existing behavior and the new event/function boundary.
Useful Discovery Commands
Run commands that fit the repo. Prefer rg; keep output focused.
rg -n "inngest|createFunction|step\\.|serve\\(|/api/inngest|INNGEST_" .
rg -n "setTimeout|setInterval|Promise\\.all|void [a-zA-Z0-9_]+\\(|\\.then\\(" .
rg -n "cron|node-cron|schedule|bull|bullmq|bee-queue|agenda|qstash|sqs" .
rg -n "webhook|stripe|svix|clerk|github|shopify|slack|hubspot|linear" .
rg -n "retry|backoff|poll|status|timeout|429|rate limit|rate-limit" .
rg -n "openai|anthropic|ai\\.|generateText|streamText|tool|agent|embedding" .
When the repo is large, narrow searches to app source directories and exclude generated/vendor folders.
Brownfield Decision Matrix
| Existing shape | Inngest fit | Primary primitives |
|---|---|---|
| HTTP handler does slow side effects before responding | Emit event, return fast | inngest.send, event trigger, step.run |
| Webhook must acknowledge quickly but process reliably | Verify signature, emit idempotent event | Event ID, step.run, retries |
| Cron job loses progress midway | Cron-triggered durable function | Cron trigger, page-level step.run, flow control |
| Polling loop waits for external async work | Durable wait or durable poll | step.waitForEvent, step.sleep, step.run |
| Large fan-out exceeds request/serverless limits | Split orchestration and item work | step.sendEvent, per-item function, concurrency |
| External API hits 429s | Move limits to function config | throttle, rateLimit, concurrency |
| Human review can take days | Persist the wait in Inngest | step.waitForEvent, timeout, realtime |
| AI agent/tool loop needs retry-safe progress | One step per tool/model boundary | step.ai, step.run, step.sleep, realtime |
| AI workflow needs production evals | Attach outcome signals to durable runs | meta.sessions, step.score, createScorer, defer, group.experiment |
| Existing queue only hides fragile work | Replace queue boundary gradually | Event trigger, idempotency, function-level retries |
Integration Plan Format
Before editing, summarize findings in this compact shape:
Inngest audit:
- Existing Inngest: none / partial / healthy / risky
- Framework: <framework and evidence>
- Best first slice: <file + workflow>
- Why: <loss/timeout/retry/idempotency failure>
- Proposed primitives: <event, steps, flow control, waits, realtime>
- Idempotency key: <source of truth>
- Files likely touched: <short list>
- Tests/checks: <commands or focused cases>
Then implement unless the user asked for audit-only.
Existing Inngest Checklist
If Inngest is already present, verify:
- A single shared client is exported from a stable module.
- The app
idis a stable slug and is not derived from deploy-specific data. - v4 local development uses
INNGEST_DEV=1; production usesINNGEST_SIGNING_KEY. - Serve endpoint path is discoverable, usually
/api/inngest. - The serve handler registers all functions that should sync.
- Side effects and non-deterministic work are inside steps.
- Step IDs are stable and descriptive.
- Event names follow
domain/noun.verb. - Events that may be replayed use deterministic IDs.
- Webhook handlers verify signatures before emitting events.
- Flow control is configured where external APIs have limits.
- Realtime uses v4 native
inngest/realtime, not the v3@inngest/realtimepackage.
Durable Agent Patterns
Use Inngest when an AI or agent workflow needs durable progress across model calls, tool calls, waits, approvals, or streaming UI updates.
Good candidates:
- Multi-step agent that calls tools or external APIs.
- LLM workflow that may exceed one HTTP request lifetime.
- Human-in-the-loop review, approval, correction, or escalation.
- Agent that must pause for an external event or scheduled follow-up.
- Bulk AI work that needs provider-level rate limits and cost protection.
- User-visible agent progress that should stream from durable execution.
Recommended shape:
- HTTP/UI request stores the user intent and emits an event with a stable
id. - Inngest function loads state inside
step.run. - Each model call, tool call, vector search, and external side effect lives in
its own
step.aiorstep.runboundary. - Human pauses use
step.waitForEventorstep.waitForSignalwith a timeout. - Progress updates use
step.realtime.publishbetween steps, orinngest.realtime.publishinside an existingstep.run. - Provider rate limits use
concurrency,throttle, orrateLimit, not ad hoc in-process throttlers.
Avoid:
- Keeping agent state only in memory.
- Retrying whole agent loops after a single tool failure.
- Charging for repeated successful model calls because the result was not memoized.
- Using
setTimeoutor a cron poller for follow-ups and approvals. - Streaming progress from a process-local WebSocket server when the workflow itself is durable elsewhere.
Implementation Guardrails
- Do not replace working queues, crons, or webhooks blindly. First preserve behavior with a thin Inngest slice.
- Do not create duplicate clients or serve endpoints if the repo already has them.
- Do not put database writes, API calls, random IDs, timestamps, or LLM calls outside steps in the new function.
- Do not hide missing idempotency behind retries. Retries require idempotent side effects.
- Do not hardcode secrets or dev-mode flags in source.
- Do not leave the app unable to sync: register new functions with the serve endpoint and run available type/tests.
Verification
Pick checks that prove the integration path:
- Typecheck/build/lint the touched app.
- Run existing tests around the migrated handler or workflow.
- Add focused tests for "handler emits event and returns fast" and "function calls the same domain operations in step boundaries" where the repo supports it.
- If local runtime is available, start the app and Inngest dev server, confirm the function syncs, then send a sample event.
- If only static checks are available, explicitly state that runtime sync was not verified.
FAQ
What does the inngest-brownfield-audit skill do?
Use when analyzing an existing TypeScript or JavaScript codebase to decide where and how to introduce Inngest. Covers repository discovery, framework and package detection, finding durability gaps in HTTP handlers, webhooks, cron jobs, queues, long-running jobs, AI agents, Agent Evals, polling loops, eval loops, and side-effect-heavy code, then producing and implementing an incremental integration plan.
How do I install inngest-brownfield-audit?
Run npx skills add https://github.com/inngest/inngest-skills --skill inngest-brownfield-audit in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/inngest-brownfield-audit/ (personal) or .claude/skills/inngest-brownfield-audit/ (project).
Which AI agents can use inngest-brownfield-audit?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is inngest-brownfield-audit safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains inngest-brownfield-audit?
It is published by inngest in inngest/inngest-skills. It has 665 recorded installs.
More from inngest/inngest-skills
inngest-durable-functions
inngest/inngest-skills
Use when building functions that must survive process crashes, retry automatically on failure, run on a schedule, react to events, or maintain state across infrastructure failures — e.g., webhook handlers that drop events, flaky cron jobs, background jobs that fail mid-execution, or workflows that need to resume where they left off. Covers Inngest function configuration, triggers (events, cron, invoke), step execution and memoization, idempotency, cancellation, error handling, retries, logging, and observability.
inngest-events
inngest/inngest-skills
Use when designing event-driven workflows, decoupling services, implementing fan-out patterns (one trigger, many downstream handlers), implementing idempotent event handling with IDs (24-hour dedupe window), or handling at-least-once delivery from external sources like Stripe webhooks. Covers Inngest event schema, payload format, naming conventions, IDs for idempotency, the ts param, fan-out patterns, and system events like inngest/function.failed.
inngest-steps
inngest/inngest-skills
Use when implementing delays that must survive process restarts (e.g., 24-hour cart abandonment, scheduled follow-ups), waiting for human approval or external events with timeouts (review gates, webhook callbacks, async API completion), polling external services without losing state on crashes, calling other functions and awaiting their results, memoizing expensive operations so they don't re-run on retry, or running async work in parallel inside a workflow. Covers Inngest step methods: step.run, step.sleep, step.waitForEvent, step.waitForSignal, step.sendEvent, step.invoke, step.ai, plus patterns for loops and parallel execution.
inngest-setup
inngest/inngest-skills
Use when adding durable execution to a TypeScript project — building retry-safe webhook handlers, background jobs that survive crashes, scheduled tasks, or long-running workflows that outlive a single request. Covers Inngest SDK installation, client config, environment variables, serve endpoints (Next.js, Express, Hono, Fastify), connect-as-worker mode, and the local dev server.
inngest-middleware
inngest/inngest-skills
Use when adding cross-cutting concerns to durable functions — structured logging or tracing across all functions, error tracking with Sentry, payload encryption for sensitive data, dependency injection of clients (DB, Stripe, etc.) into function handlers, custom telemetry, or behavior that should apply uniformly across many functions. Covers Inngest middleware lifecycle, creating custom middleware, dependencyInjectionMiddleware, @inngest/middleware-encryption, @inngest/middleware-sentry, and custom middleware patterns.
inngest-flow-control
inngest/inngest-skills
Use when handling external API rate limits (e.g., OpenAI 429s, HubSpot or Stripe rate limits), preventing duplicate work from rapid event bursts (debouncing user actions), spreading load over time, ensuring per-tenant fairness, processing events in batches, limiting concurrent runs of the same operation, or assigning priority to important runs. Covers Inngest flow control: concurrency limits with keys, throttling, rate limiting, debounce, priority, singleton, and event batching.
Popular security skills
azure-compliance
microsoft/azure-skills
Run Azure compliance and security audits with azqr plus Key Vault expiration checks. Covers best-practice assessment, resource review, policy/compliance validation, and security posture checks. WHEN: compliance scan, security audit, BEFORE running azqr (compliance cli tool), Azure best practices, Key Vault expiration check, expired certificates, expiring secrets, orphaned resources, compliance assessment.
minimal-run-and-audit
lllllllama/rigorpilot-skills
Rigor Run skill for README-first deep learning repo reproduction. Use when the task is specifically to capture or normalize evidence from the selected smoke test or documented inference or evaluation command and write standardized reprooutputs/ files, including patch notes when repository files changed. Do not use for training execution, initial repo intake, generic environment setup, paper lookup, target selection, hidden scientific-meaning changes, or end-to-end orchestration by itself.
seo-audit
coreyhaines31/marketingskills
When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," "indexing issues," "stuck on page 2," "striking distance keywords," "title tag rewrite," "low CTR," "local SEO," "Google Business Profile," or "map pack." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. For building pages at scale to target keywords, see programmatic-seo. For adding structured data, see schema. For AI search optimization, see ai-seo.
firebase-security-rules-auditor
firebase/agent-skills
Audits Firebase (Firestore, Cloud Storage) security rules for vulnerabilities, privilege escalation, role bypasses, create vs update inconsistencies, resource exhaustion, type safety, size limits, and hasOnly ownership checks. Use when auditing/reviewing rules, running red-team rule assessments, or scoring against auditor checklists. Don't use for Firebase CLI (login, deploy), Auth, Crashlytics, Remote Config, or database queries.
audit
pbakaus/impeccable
Run technical quality checks across accessibility, performance, theming, responsive design, and anti-patterns. Generates a scored report with P0-P3 severity ratings and actionable plan. Use when the user wants an accessibility check, performance audit, or technical quality review.
competitors
coreyhaines31/marketingskills
When the user wants to create competitor comparison or alternative pages for SEO and buyer-facing use. Also use when the user mentions 'alternative page,' 'vs page,' 'competitor comparison,' 'comparison page,' '[Product] vs [Product],' '[Product] alternative,' 'competitive landing pages,' 'how do we compare to X,' 'competitor teardown,' 'audit our competitor pages,' 'are our comparison pages out of date,' or 'competitive asset audit.' Use this for any content that positions your product against competitors. Covers four formats: singular alternative, plural alternatives, you vs competitor, and competitor vs competitor. For auditing existing claims (not researching competitors from scratch, which is competitor-profiling; not technical SEO on these pages, which is seo-audit), use the asset audit here. For internal battle cards and sales-specific competitor docs, see sales-enablement.