Install any skill in seconds. Free to start, no credit card required.
Get Started Free →asymmetric-al/inngest-flow-control
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.
Passed 23 of 23 test cases with the skill, and 17 of 23 without it.
and 6 more in the full report
6 fixed17 passed either way0 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 6 test cases the skill fixed. Same model, same prompt, with and without the skill.
We are receiving repeated webhook spam events for the same webhook ID in rapid succession. We want an Inngest TypeScript function to process at most 1 execution per 4-hour window per webhook ID, discarding any extra events arriving in that window rather than queuing them up to run later. How should this function be configured?
| Checked | Without skill | With skill |
|---|---|---|
| Configures rateLimit in the Inngest function options. | Missed | Passed |
| Sets key in rateLimit to reference the webhook ID field. | Missed | Passed |
The instructions your model reads when the skill loads.
Master Inngest flow control mechanisms to manage resources, prevent overloading systems, and ensure application reliability. This skill covers all flow control options with prescriptive guidance on when and how to use each.
These skills are focused on TypeScript. For Python or Go, refer to the Inngest documentation for language-specific guidance. Core concepts apply across all languages.
When to use: Limit the number of executing steps (not function runs) to manage computing resources and prevent system overwhelm.
Key insight: Concurrency limits active code execution, not function runs. A function waiting on step.sleep() or step.waitForEvent() doesn't count against the limit.
inngest.createFunction(
{
id: "process-images",
concurrency: 5,
triggers: [{ event: "media/image.uploaded" }],
},
async ({ event, step }) => {
// Only 5 steps can execute simultaneously
await step.run("resize", () => resizeImage(event.data.imageUrl));
},
);
test cases passed, vs 17 / 23 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.