本文へ移動
cccskills
無料GitHub で公開

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.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md12.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Inngest Brownfield Audit

Use this skill when the user asks Codex 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.run one 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 shapeInngest fitPrimary primitives
HTTP handler does slow side effects before respondingEmit event, return fastinngest.send, event trigger, step.run
Webhook must acknowledge quickly but process reliablyVerify signature, emit idempotent eventEvent ID, step.run, retries
Cron job loses progress midwayCron-triggered durable functionCron trigger, page-level step.run, flow control
Polling loop waits for external async workDurable wait or durable pollstep.waitForEvent, step.sleep, step.run
Large fan-out exceeds request/serverless limitsSplit orchestration and item workstep.sendEvent, per-item function, concurrency
External API hits 429sMove limits to function configthrottle, rateLimit, concurrency
Human review can take daysPersist the wait in Inngeststep.waitForEvent, timeout, realtime
AI agent/tool loop needs retry-safe progressOne step per tool/model boundarystep.ai, step.run, step.sleep, realtime
AI workflow needs production evalsAttach outcome signals to durable runsmeta.sessions, step.score, createScorer, defer, group.experiment
Existing queue only hides fragile workReplace queue boundary graduallyEvent 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 id is a stable slug and is not derived from deploy-specific data.
  • v4 local development uses INNGEST_DEV=1; production uses INNGEST_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/realtime package.

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:

  1. HTTP/UI request stores the user intent and emits an event with a stable id.
  2. Inngest function loads state inside step.run.
  3. Each model call, tool call, vector search, and external side effect lives in its own step.ai or step.run boundary.
  4. Human pauses use step.waitForEvent or step.waitForSignal with a timeout.
  5. Progress updates use step.realtime.publish between steps, or inngest.realtime.publish inside an existing step.run.
  6. Provider rate limits use concurrency, throttle, or rateLimit, 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 setTimeout or 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.

This Repository

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

Repository Triggers

Use this skill when inngest-brownfield-audit 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.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Audit and fix accessibility in Core UI. Use when changing or reviewing buttons, links, forms, validation, dialogs, menus, tabs, tables, keyboard interactions, focus management, accessible names, announcements, contrast, touch targets, reduced motion, or WCAG/a11y behavior.

日本語の概要は準備中です。原文の説明を表示しています。

Asymmetric-al/core3812026年10月12日 更新

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.

日本語の概要は準備中です。原文の説明を表示しています。

Asymmetric-al/core3812026年10月12日 更新

Use when building any system where email content triggers actions — AI agent inboxes, automated support handlers, email-to-task pipelines, or any workflow processing untrusted inbound email. Always use this skill when the user wants to receive emails and act on them programmatically, even if they don't mention "agent" — the skill contains critical security patterns (sender allowlists, content filtering, sandboxed processing) that prevent untrusted email from controlling your system.

日本語の概要は準備中です。原文の説明を表示しています。

Asymmetric-al/core3812026年10月12日 更新

anim

無料

Tasteful, subtle web UI animation following Emil Kowalski / animations.dev principles. Use when adding or reviewing interface motion — hover and press feedback, entrances and exits, modals, toasts, menus, loading and skeleton states, staggered reveals, page or view transitions — so motion stays refined and purposeful, not decorative. Covers CSS, Web Animations, and React timing/easing. Pair with the motion skill for motion/react API specifics.

日本語の概要は準備中です。原文の説明を表示しています。

Asymmetric-al/core3812026年10月12日 更新

animate

無料

Build an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked to animate something, add motion, make a component feel alive, or build a transition. For critiquing existing motion use review-animations; for auditing a whole codebase use improve-animations. Only runs when explicitly invoked; it does not trigger on its own.

日本語の概要は準備中です。原文の説明を表示しています。

Asymmetric-al/core3812026年10月12日 更新

Build animations for Expo and React Native only, using Reanimated, Gesture Handler, Expo Router, and expo-haptics. Use when the target runtime is an Expo or React Native app. Do not use it for Core Next.js web motion; use `animate` for web. Only runs when explicitly invoked; it does not trigger on its own.

日本語の概要は準備中です。原文の説明を表示しています。

Asymmetric-al/core3812026年10月12日 更新

Asymmetric-al のスキルをすべて見る

このスキルの問題を報告する