[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-inngest-inngest-agents":3,"mdc-uixz8r-key":41,"related-repo-inngest-inngest-agents":2604,"related-org-inngest-inngest-agents":2699},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":36,"sourceUrl":39,"mdContent":40},"inngest-agents","build durable AI agent workflows","Use when building durable AI agents or agentic workflows with Inngest and AgentKit, including model calls, tool calls, multi-agent networks, human approval, realtime progress, provider rate limits, crash-safe execution, and Agent Evals handoff. Covers AgentKit, `step.ai`, `step.run`, `step.waitForEvent`, native realtime, and when to use lower-level Inngest primitives instead of an in-memory agent loop. Use `inngest-agent-evals` with this skill when the user wants scoring, sessions, experiments, deferred scorers, or outcome-based evaluation for the agent.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"inngest","Inngest","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Finngest.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"LLM","llm","tag",{"name":17,"slug":18,"type":15},"Automation","automation",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Agents","agents",26,"https:\u002F\u002Fgithub.com\u002Finngest\u002Finngest-skills","2026-07-12T07:36:45.984181",null,5,[29,30,31,32,33,34,35],"agent-skill-repository","agent-skills","agentic-skills","ai-agents","claude-code-skills","cursor-skills","openclaw-skills",{"repoUrl":24,"stars":23,"forks":27,"topics":37,"description":38},[29,30,31,32,33,34,35],"Agent Skills for building with Inngest","https:\u002F\u002Fgithub.com\u002Finngest\u002Finngest-skills\u002Ftree\u002FHEAD\u002Fskills\u002Finngest-agents","---\nname: inngest-agents\ndescription: Use when building durable AI agents or agentic workflows with Inngest and AgentKit, including model calls, tool calls, multi-agent networks, human approval, realtime progress, provider rate limits, crash-safe execution, and Agent Evals handoff. Covers AgentKit, `step.ai`, `step.run`, `step.waitForEvent`, native realtime, and when to use lower-level Inngest primitives instead of an in-memory agent loop. Use `inngest-agent-evals` with this skill when the user wants scoring, sessions, experiments, deferred scorers, or outcome-based evaluation for the agent.\n---\n\n# Inngest Agents\n\nUse this skill when the user wants to build, migrate, or debug an AI agent,\nmulti-step AI workflow, tool-calling loop, support agent, research agent,\nhuman-in-the-loop review flow, or realtime agent UI.\n\nInngest's AgentKit defines agents with `createAgent`; when an AgentKit run is\nowned by an Inngest function, model calls use Inngest `step.ai` so they retry\nand cache model results durably. Use the lower-level Inngest step primitives\naround the agent for database reads\u002Fwrites, tool side effects, waits,\napprovals, realtime progress, and flow control.\n\nOfficial references:\n\n- AgentKit agents: https:\u002F\u002Fagentkit.inngest.com\u002Fconcepts\u002Fagents\n- `createAgent`: https:\u002F\u002Fagentkit.inngest.com\u002Freference\u002Fcreate-agent\n- AI inference and `step.ai`: https:\u002F\u002Fwww.inngest.com\u002Fdocs\u002Ffeatures\u002Finngest-functions\u002Fsteps-workflows\u002Fstep-ai-orchestration\n- Agent Evals: https:\u002F\u002Fwww.inngest.com\u002Fdocs\u002Flearn\u002Fagent-evals\n- AgentKit realtime hooks: https:\u002F\u002Fwww.inngest.com\u002Fchangelog\u002F2025-09-24-agentkit-use-agent\n\n## Copyable Example\n\nWhen starting a durable support or tool-calling agent from scratch, inspect the\ncompanion example at `..\u002F..\u002Fexamples\u002Fdurable-agent`. It shows the expected\nagent-first shape: quick HTTP trigger, typed events, AgentKit inside an\nInngest function, step-scoped context loading, human approval with\n`step.waitForEvent`, and durable side effects after approval.\n\n## When to Use Inngest for Agents\n\nGood fit:\n\n- Agent can take longer than one HTTP request.\n- Agent calls tools, APIs, databases, browsers, sandboxes, or MCP servers.\n- Agent needs to survive deploys, crashes, serverless timeouts, or model\u002FAPI\n  failures.\n- Agent may wait for human approval, external callbacks, scheduled follow-up,\n  or user input.\n- Agent progress should stream to a UI from the durable workflow.\n- Model\u002Fprovider calls need concurrency or throttle limits.\n- Duplicate sends, charges, writes, or model calls would be costly.\n\nNot usually worth it:\n\n- One short, read-only model call with no side effects and no need for durable\n  progress.\n- UI-only autocomplete where losing the request is acceptable.\n\n## Architecture\n\nUse this shape unless the repo already has a stronger established pattern:\n\n1. The HTTP\u002Fserver action layer validates auth, stores the user's intent if\n   needed, emits an event with a stable `id`, and returns quickly.\n2. An Inngest function owns the agent run.\n3. Load state and external context inside `step.run`.\n4. Create AgentKit agents inside the function or import agent\u002Fnetwork\n   factories.\n5. Run model inference through AgentKit \u002F `step.ai`; wrap non-model tool side\n   effects in `step.run`.\n6. Use `step.waitForEvent` or `step.waitForSignal` for human approval and\n   external callbacks.\n7. Publish durable progress with native realtime.\n8. Add sessions and scores when the agent outcome needs to be evaluated later.\n9. Apply flow control at the function level for provider and tenant limits.\n\n## Basic AgentKit Function\n\nPrefer a small, typed function first; add networks and extra tools after the\nsingle-agent path is proven.\n\n```typescript\nimport { createAgent, openai } from \"@inngest\u002Fagent-kit\";\nimport { inngest } from \"@\u002Finngest\u002Fclient\";\n\nexport const summarizeTicket = inngest.createFunction(\n  {\n    id: \"summarize-ticket\",\n    triggers: [{ event: \"support\u002Fticket.created\" }],\n    concurrency: [{ key: \"event.data.accountId\", limit: 2 }]\n  },\n  async ({ event, step }) => {\n    const ticket = await step.run(\"load-ticket\", () => {\n      return getTicket(event.data.ticketId);\n    });\n\n    const writer = createAgent({\n      name: \"support-summary-writer\",\n      system: \"Write a concise support-ticket summary with next actions.\",\n      model: openai({ model: \"gpt-4o\" })\n    });\n\n    const { output } = await writer.run(JSON.stringify(ticket));\n\n    await step.run(\"save-summary\", () => {\n      return saveTicketSummary(event.data.ticketId, output);\n    });\n\n    return { ticketId: event.data.ticketId };\n  }\n);\n```\n\n## Tool Calls\n\nTools can be defined with AgentKit, but agent-safe tools should still follow\ndurability rules:\n\n- Read-only tool calls can run as part of the agent when replaying is harmless.\n- External side effects should be isolated with stable IDs and `step.run`\n  boundaries, or implemented as tool handlers that use the provided `step`.\n- Tool outputs should be small enough for step state limits.\n- Validate tool parameters with schemas; never trust model-provided arguments.\n- Use tenant\u002Fuser IDs from authenticated event data, not only from model text.\n\nTool side-effect checklist:\n\n```text\n- What external state can this tool change?\n- What idempotency key prevents duplicate writes?\n- What should happen if the model calls the same tool twice?\n- Is the output safe to store in function run state?\n- Does the tool need provider-specific concurrency or throttle limits?\n```\n\n## Human in the Loop\n\nUse a durable wait instead of polling a database or keeping state in memory.\n\n```typescript\nconst approval = await step.waitForEvent(\"wait-for-approval\", {\n  event: \"support\u002Freply.approved\",\n  timeout: \"3d\",\n  match: \"data.ticketId\"\n});\n\nif (!approval) {\n  await step.run(\"mark-review-timeout\", () => {\n    return markTicketNeedsManualReview(event.data.ticketId);\n  });\n  return { status: \"timed_out\" };\n}\n\nawait step.run(\"send-reply\", () => {\n  return sendSupportReply({\n    ticketId: event.data.ticketId,\n    approvalId: approval.data.approvalId\n  });\n});\n```\n\n## Realtime Progress\n\nFor v4 native realtime:\n\n- Use `step.realtime.publish` between steps.\n- Use `inngest.realtime.publish` inside an existing `step.run`.\n- Do not install the v3 `@inngest\u002Frealtime` package for v4 projects.\n- Do not build a process-local WebSocket as the only source of progress for a\n  durable function.\n\nFor AgentKit-specific UI hooks, check the installed `@inngest\u002Fagent-kit`\nversion and current docs before wiring `useAgent` or `useChat`.\n\n## Agent Evals\n\nUse `inngest-agent-evals` when the user asks to score an agent, compare prompts\nor models, track user feedback, group runs by conversation\u002Fticket, or debug\nagent quality over time. In durable agent workflows, add `meta.sessions` at the\nevent that starts or connects the user flow, use direct scoring for signals\nknown during the run, and use deferred scorers for product outcomes that arrive\nlater.\n\n## Flow Control and Cost\n\nAgent workloads often need provider and tenant limits:\n\n- Use account-scoped concurrency or throttle keys for model providers.\n- Key per tenant or account where fairness matters.\n- Use deterministic event IDs so duplicate user actions do not spawn duplicate\n  expensive runs.\n- Keep successful model\u002Ftool results in steps so retrying a later failure does\n  not re-charge earlier model calls.\n\nExample:\n\n```typescript\n{\n  id: \"support-agent-run\",\n  triggers: [{ event: \"support\u002Fagent.requested\" }],\n  throttle: {\n    limit: 120,\n    period: \"1m\",\n    key: `\"openai\"`\n  },\n  concurrency: [\n    { key: \"event.data.accountId\", limit: 3 }\n  ]\n}\n```\n\n## Brownfield Migration\n\nWhen migrating an existing agent:\n\n1. Search for model calls, tool loops, in-memory state, streaming handlers,\n   approval polling, and external side effects.\n2. Keep prompt\u002Ftool behavior stable at first.\n3. Move the trigger into an event and an Inngest function.\n4. Move model calls to AgentKit \u002F `step.ai`.\n5. Move side-effecting tools into `step.run` or durable tool handlers.\n6. Replace process-local waits with `step.waitForEvent` or\n   `step.waitForSignal`.\n7. Add realtime after the durable run is working.\n\nUse `inngest-brownfield-audit` first when the repo has multiple possible\nworkflows and the user has not picked one.\n\n## Anti-Patterns\n\n- Agent loop state only in memory.\n- One giant `try\u002Fcatch` around all model and tool calls.\n- Retrying the entire agent after one tool failure.\n- Charging repeatedly for successful model calls after a later step fails.\n- `setTimeout`, cron polling, or Redis TTL as the human-review mechanism.\n- Side-effecting tools with no idempotency key.\n- Streaming progress from a server process that can die while the durable work\n  continues elsewhere.\n- Adding AgentKit without registering the surrounding Inngest function.\n\n## Verification\n\n- Typecheck the agent, tool schemas, and event payloads.\n- Unit-test tool handlers separately from model behavior.\n- Test that the HTTP entrypoint emits one deterministic event and returns fast.\n- Test that duplicate event IDs do not duplicate final side effects.\n- If possible, run the Inngest dev server and inspect the agent steps\u002Ftraces.\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,54,60,82,87,160,167,188,194,199,237,242,255,261,266,359,365,370,1364,1370,1375,1417,1422,1432,1438,1443,1982,1988,1993,2044,2070,2076,2096,2102,2107,2130,2135,2414,2420,2425,2489,2501,2507,2564,2570,2598],{"type":47,"tag":48,"props":49,"children":50},"element","h1",{"id":4},[51],{"type":52,"value":53},"text","Inngest Agents",{"type":47,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"Use this skill when the user wants to build, migrate, or debug an AI agent,\nmulti-step AI workflow, tool-calling loop, support agent, research agent,\nhuman-in-the-loop review flow, or realtime agent UI.",{"type":47,"tag":55,"props":61,"children":62},{},[63,65,72,74,80],{"type":52,"value":64},"Inngest's AgentKit defines agents with ",{"type":47,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":52,"value":71},"createAgent",{"type":52,"value":73},"; when an AgentKit run is\nowned by an Inngest function, model calls use Inngest ",{"type":47,"tag":66,"props":75,"children":77},{"className":76},[],[78],{"type":52,"value":79},"step.ai",{"type":52,"value":81}," so they retry\nand cache model results durably. Use the lower-level Inngest step primitives\naround the agent for database reads\u002Fwrites, tool side effects, waits,\napprovals, realtime progress, and flow control.",{"type":47,"tag":55,"props":83,"children":84},{},[85],{"type":52,"value":86},"Official references:",{"type":47,"tag":88,"props":89,"children":90},"ul",{},[91,105,121,138,149],{"type":47,"tag":92,"props":93,"children":94},"li",{},[95,97],{"type":52,"value":96},"AgentKit agents: ",{"type":47,"tag":98,"props":99,"children":103},"a",{"href":100,"rel":101},"https:\u002F\u002Fagentkit.inngest.com\u002Fconcepts\u002Fagents",[102],"nofollow",[104],{"type":52,"value":100},{"type":47,"tag":92,"props":106,"children":107},{},[108,113,115],{"type":47,"tag":66,"props":109,"children":111},{"className":110},[],[112],{"type":52,"value":71},{"type":52,"value":114},": ",{"type":47,"tag":98,"props":116,"children":119},{"href":117,"rel":118},"https:\u002F\u002Fagentkit.inngest.com\u002Freference\u002Fcreate-agent",[102],[120],{"type":52,"value":117},{"type":47,"tag":92,"props":122,"children":123},{},[124,126,131,132],{"type":52,"value":125},"AI inference and ",{"type":47,"tag":66,"props":127,"children":129},{"className":128},[],[130],{"type":52,"value":79},{"type":52,"value":114},{"type":47,"tag":98,"props":133,"children":136},{"href":134,"rel":135},"https:\u002F\u002Fwww.inngest.com\u002Fdocs\u002Ffeatures\u002Finngest-functions\u002Fsteps-workflows\u002Fstep-ai-orchestration",[102],[137],{"type":52,"value":134},{"type":47,"tag":92,"props":139,"children":140},{},[141,143],{"type":52,"value":142},"Agent Evals: ",{"type":47,"tag":98,"props":144,"children":147},{"href":145,"rel":146},"https:\u002F\u002Fwww.inngest.com\u002Fdocs\u002Flearn\u002Fagent-evals",[102],[148],{"type":52,"value":145},{"type":47,"tag":92,"props":150,"children":151},{},[152,154],{"type":52,"value":153},"AgentKit realtime hooks: ",{"type":47,"tag":98,"props":155,"children":158},{"href":156,"rel":157},"https:\u002F\u002Fwww.inngest.com\u002Fchangelog\u002F2025-09-24-agentkit-use-agent",[102],[159],{"type":52,"value":156},{"type":47,"tag":161,"props":162,"children":164},"h2",{"id":163},"copyable-example",[165],{"type":52,"value":166},"Copyable Example",{"type":47,"tag":55,"props":168,"children":169},{},[170,172,178,180,186],{"type":52,"value":171},"When starting a durable support or tool-calling agent from scratch, inspect the\ncompanion example at ",{"type":47,"tag":66,"props":173,"children":175},{"className":174},[],[176],{"type":52,"value":177},"..\u002F..\u002Fexamples\u002Fdurable-agent",{"type":52,"value":179},". It shows the expected\nagent-first shape: quick HTTP trigger, typed events, AgentKit inside an\nInngest function, step-scoped context loading, human approval with\n",{"type":47,"tag":66,"props":181,"children":183},{"className":182},[],[184],{"type":52,"value":185},"step.waitForEvent",{"type":52,"value":187},", and durable side effects after approval.",{"type":47,"tag":161,"props":189,"children":191},{"id":190},"when-to-use-inngest-for-agents",[192],{"type":52,"value":193},"When to Use Inngest for Agents",{"type":47,"tag":55,"props":195,"children":196},{},[197],{"type":52,"value":198},"Good fit:",{"type":47,"tag":88,"props":200,"children":201},{},[202,207,212,217,222,227,232],{"type":47,"tag":92,"props":203,"children":204},{},[205],{"type":52,"value":206},"Agent can take longer than one HTTP request.",{"type":47,"tag":92,"props":208,"children":209},{},[210],{"type":52,"value":211},"Agent calls tools, APIs, databases, browsers, sandboxes, or MCP servers.",{"type":47,"tag":92,"props":213,"children":214},{},[215],{"type":52,"value":216},"Agent needs to survive deploys, crashes, serverless timeouts, or model\u002FAPI\nfailures.",{"type":47,"tag":92,"props":218,"children":219},{},[220],{"type":52,"value":221},"Agent may wait for human approval, external callbacks, scheduled follow-up,\nor user input.",{"type":47,"tag":92,"props":223,"children":224},{},[225],{"type":52,"value":226},"Agent progress should stream to a UI from the durable workflow.",{"type":47,"tag":92,"props":228,"children":229},{},[230],{"type":52,"value":231},"Model\u002Fprovider calls need concurrency or throttle limits.",{"type":47,"tag":92,"props":233,"children":234},{},[235],{"type":52,"value":236},"Duplicate sends, charges, writes, or model calls would be costly.",{"type":47,"tag":55,"props":238,"children":239},{},[240],{"type":52,"value":241},"Not usually worth it:",{"type":47,"tag":88,"props":243,"children":244},{},[245,250],{"type":47,"tag":92,"props":246,"children":247},{},[248],{"type":52,"value":249},"One short, read-only model call with no side effects and no need for durable\nprogress.",{"type":47,"tag":92,"props":251,"children":252},{},[253],{"type":52,"value":254},"UI-only autocomplete where losing the request is acceptable.",{"type":47,"tag":161,"props":256,"children":258},{"id":257},"architecture",[259],{"type":52,"value":260},"Architecture",{"type":47,"tag":55,"props":262,"children":263},{},[264],{"type":52,"value":265},"Use this shape unless the repo already has a stronger established pattern:",{"type":47,"tag":267,"props":268,"children":269},"ol",{},[270,283,288,301,306,324,344,349,354],{"type":47,"tag":92,"props":271,"children":272},{},[273,275,281],{"type":52,"value":274},"The HTTP\u002Fserver action layer validates auth, stores the user's intent if\nneeded, emits an event with a stable ",{"type":47,"tag":66,"props":276,"children":278},{"className":277},[],[279],{"type":52,"value":280},"id",{"type":52,"value":282},", and returns quickly.",{"type":47,"tag":92,"props":284,"children":285},{},[286],{"type":52,"value":287},"An Inngest function owns the agent run.",{"type":47,"tag":92,"props":289,"children":290},{},[291,293,299],{"type":52,"value":292},"Load state and external context inside ",{"type":47,"tag":66,"props":294,"children":296},{"className":295},[],[297],{"type":52,"value":298},"step.run",{"type":52,"value":300},".",{"type":47,"tag":92,"props":302,"children":303},{},[304],{"type":52,"value":305},"Create AgentKit agents inside the function or import agent\u002Fnetwork\nfactories.",{"type":47,"tag":92,"props":307,"children":308},{},[309,311,316,318,323],{"type":52,"value":310},"Run model inference through AgentKit \u002F ",{"type":47,"tag":66,"props":312,"children":314},{"className":313},[],[315],{"type":52,"value":79},{"type":52,"value":317},"; wrap non-model tool side\neffects in ",{"type":47,"tag":66,"props":319,"children":321},{"className":320},[],[322],{"type":52,"value":298},{"type":52,"value":300},{"type":47,"tag":92,"props":325,"children":326},{},[327,329,334,336,342],{"type":52,"value":328},"Use ",{"type":47,"tag":66,"props":330,"children":332},{"className":331},[],[333],{"type":52,"value":185},{"type":52,"value":335}," or ",{"type":47,"tag":66,"props":337,"children":339},{"className":338},[],[340],{"type":52,"value":341},"step.waitForSignal",{"type":52,"value":343}," for human approval and\nexternal callbacks.",{"type":47,"tag":92,"props":345,"children":346},{},[347],{"type":52,"value":348},"Publish durable progress with native realtime.",{"type":47,"tag":92,"props":350,"children":351},{},[352],{"type":52,"value":353},"Add sessions and scores when the agent outcome needs to be evaluated later.",{"type":47,"tag":92,"props":355,"children":356},{},[357],{"type":52,"value":358},"Apply flow control at the function level for provider and tenant limits.",{"type":47,"tag":161,"props":360,"children":362},{"id":361},"basic-agentkit-function",[363],{"type":52,"value":364},"Basic AgentKit Function",{"type":47,"tag":55,"props":366,"children":367},{},[368],{"type":52,"value":369},"Prefer a small, typed function first; add networks and extra tools after the\nsingle-agent path is proven.",{"type":47,"tag":371,"props":372,"children":377},"pre",{"className":373,"code":374,"language":375,"meta":376,"style":376},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createAgent, openai } from \"@inngest\u002Fagent-kit\";\nimport { inngest } from \"@\u002Finngest\u002Fclient\";\n\nexport const summarizeTicket = inngest.createFunction(\n  {\n    id: \"summarize-ticket\",\n    triggers: [{ event: \"support\u002Fticket.created\" }],\n    concurrency: [{ key: \"event.data.accountId\", limit: 2 }]\n  },\n  async ({ event, step }) => {\n    const ticket = await step.run(\"load-ticket\", () => {\n      return getTicket(event.data.ticketId);\n    });\n\n    const writer = createAgent({\n      name: \"support-summary-writer\",\n      system: \"Write a concise support-ticket summary with next actions.\",\n      model: openai({ model: \"gpt-4o\" })\n    });\n\n    const { output } = await writer.run(JSON.stringify(ticket));\n\n    await step.run(\"save-summary\", () => {\n      return saveTicketSummary(event.data.ticketId, output);\n    });\n\n    return { ticketId: event.data.ticketId };\n  }\n);\n","typescript","",[378],{"type":47,"tag":66,"props":379,"children":380},{"__ignoreMap":376},[381,446,488,498,542,550,583,641,712,721,764,836,886,903,911,941,971,1001,1057,1073,1081,1158,1166,1220,1273,1289,1296,1343,1352],{"type":47,"tag":382,"props":383,"children":386},"span",{"class":384,"line":385},"line",1,[387,393,399,405,410,415,420,425,430,436,441],{"type":47,"tag":382,"props":388,"children":390},{"style":389},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[391],{"type":52,"value":392},"import",{"type":47,"tag":382,"props":394,"children":396},{"style":395},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[397],{"type":52,"value":398}," {",{"type":47,"tag":382,"props":400,"children":402},{"style":401},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[403],{"type":52,"value":404}," createAgent",{"type":47,"tag":382,"props":406,"children":407},{"style":395},[408],{"type":52,"value":409},",",{"type":47,"tag":382,"props":411,"children":412},{"style":401},[413],{"type":52,"value":414}," openai",{"type":47,"tag":382,"props":416,"children":417},{"style":395},[418],{"type":52,"value":419}," }",{"type":47,"tag":382,"props":421,"children":422},{"style":389},[423],{"type":52,"value":424}," from",{"type":47,"tag":382,"props":426,"children":427},{"style":395},[428],{"type":52,"value":429}," \"",{"type":47,"tag":382,"props":431,"children":433},{"style":432},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[434],{"type":52,"value":435},"@inngest\u002Fagent-kit",{"type":47,"tag":382,"props":437,"children":438},{"style":395},[439],{"type":52,"value":440},"\"",{"type":47,"tag":382,"props":442,"children":443},{"style":395},[444],{"type":52,"value":445},";\n",{"type":47,"tag":382,"props":447,"children":449},{"class":384,"line":448},2,[450,454,458,463,467,471,475,480,484],{"type":47,"tag":382,"props":451,"children":452},{"style":389},[453],{"type":52,"value":392},{"type":47,"tag":382,"props":455,"children":456},{"style":395},[457],{"type":52,"value":398},{"type":47,"tag":382,"props":459,"children":460},{"style":401},[461],{"type":52,"value":462}," inngest",{"type":47,"tag":382,"props":464,"children":465},{"style":395},[466],{"type":52,"value":419},{"type":47,"tag":382,"props":468,"children":469},{"style":389},[470],{"type":52,"value":424},{"type":47,"tag":382,"props":472,"children":473},{"style":395},[474],{"type":52,"value":429},{"type":47,"tag":382,"props":476,"children":477},{"style":432},[478],{"type":52,"value":479},"@\u002Finngest\u002Fclient",{"type":47,"tag":382,"props":481,"children":482},{"style":395},[483],{"type":52,"value":440},{"type":47,"tag":382,"props":485,"children":486},{"style":395},[487],{"type":52,"value":445},{"type":47,"tag":382,"props":489,"children":491},{"class":384,"line":490},3,[492],{"type":47,"tag":382,"props":493,"children":495},{"emptyLinePlaceholder":494},true,[496],{"type":52,"value":497},"\n",{"type":47,"tag":382,"props":499,"children":501},{"class":384,"line":500},4,[502,507,513,518,523,527,531,537],{"type":47,"tag":382,"props":503,"children":504},{"style":389},[505],{"type":52,"value":506},"export",{"type":47,"tag":382,"props":508,"children":510},{"style":509},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[511],{"type":52,"value":512}," const",{"type":47,"tag":382,"props":514,"children":515},{"style":401},[516],{"type":52,"value":517}," summarizeTicket ",{"type":47,"tag":382,"props":519,"children":520},{"style":395},[521],{"type":52,"value":522},"=",{"type":47,"tag":382,"props":524,"children":525},{"style":401},[526],{"type":52,"value":462},{"type":47,"tag":382,"props":528,"children":529},{"style":395},[530],{"type":52,"value":300},{"type":47,"tag":382,"props":532,"children":534},{"style":533},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[535],{"type":52,"value":536},"createFunction",{"type":47,"tag":382,"props":538,"children":539},{"style":401},[540],{"type":52,"value":541},"(\n",{"type":47,"tag":382,"props":543,"children":544},{"class":384,"line":27},[545],{"type":47,"tag":382,"props":546,"children":547},{"style":395},[548],{"type":52,"value":549},"  {\n",{"type":47,"tag":382,"props":551,"children":553},{"class":384,"line":552},6,[554,560,565,569,574,578],{"type":47,"tag":382,"props":555,"children":557},{"style":556},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[558],{"type":52,"value":559},"    id",{"type":47,"tag":382,"props":561,"children":562},{"style":395},[563],{"type":52,"value":564},":",{"type":47,"tag":382,"props":566,"children":567},{"style":395},[568],{"type":52,"value":429},{"type":47,"tag":382,"props":570,"children":571},{"style":432},[572],{"type":52,"value":573},"summarize-ticket",{"type":47,"tag":382,"props":575,"children":576},{"style":395},[577],{"type":52,"value":440},{"type":47,"tag":382,"props":579,"children":580},{"style":395},[581],{"type":52,"value":582},",\n",{"type":47,"tag":382,"props":584,"children":586},{"class":384,"line":585},7,[587,592,596,601,606,611,615,619,624,628,632,637],{"type":47,"tag":382,"props":588,"children":589},{"style":556},[590],{"type":52,"value":591},"    triggers",{"type":47,"tag":382,"props":593,"children":594},{"style":395},[595],{"type":52,"value":564},{"type":47,"tag":382,"props":597,"children":598},{"style":401},[599],{"type":52,"value":600}," [",{"type":47,"tag":382,"props":602,"children":603},{"style":395},[604],{"type":52,"value":605},"{",{"type":47,"tag":382,"props":607,"children":608},{"style":556},[609],{"type":52,"value":610}," event",{"type":47,"tag":382,"props":612,"children":613},{"style":395},[614],{"type":52,"value":564},{"type":47,"tag":382,"props":616,"children":617},{"style":395},[618],{"type":52,"value":429},{"type":47,"tag":382,"props":620,"children":621},{"style":432},[622],{"type":52,"value":623},"support\u002Fticket.created",{"type":47,"tag":382,"props":625,"children":626},{"style":395},[627],{"type":52,"value":440},{"type":47,"tag":382,"props":629,"children":630},{"style":395},[631],{"type":52,"value":419},{"type":47,"tag":382,"props":633,"children":634},{"style":401},[635],{"type":52,"value":636},"]",{"type":47,"tag":382,"props":638,"children":639},{"style":395},[640],{"type":52,"value":582},{"type":47,"tag":382,"props":642,"children":644},{"class":384,"line":643},8,[645,650,654,658,662,667,671,675,680,684,688,693,697,703,707],{"type":47,"tag":382,"props":646,"children":647},{"style":556},[648],{"type":52,"value":649},"    concurrency",{"type":47,"tag":382,"props":651,"children":652},{"style":395},[653],{"type":52,"value":564},{"type":47,"tag":382,"props":655,"children":656},{"style":401},[657],{"type":52,"value":600},{"type":47,"tag":382,"props":659,"children":660},{"style":395},[661],{"type":52,"value":605},{"type":47,"tag":382,"props":663,"children":664},{"style":556},[665],{"type":52,"value":666}," key",{"type":47,"tag":382,"props":668,"children":669},{"style":395},[670],{"type":52,"value":564},{"type":47,"tag":382,"props":672,"children":673},{"style":395},[674],{"type":52,"value":429},{"type":47,"tag":382,"props":676,"children":677},{"style":432},[678],{"type":52,"value":679},"event.data.accountId",{"type":47,"tag":382,"props":681,"children":682},{"style":395},[683],{"type":52,"value":440},{"type":47,"tag":382,"props":685,"children":686},{"style":395},[687],{"type":52,"value":409},{"type":47,"tag":382,"props":689,"children":690},{"style":556},[691],{"type":52,"value":692}," limit",{"type":47,"tag":382,"props":694,"children":695},{"style":395},[696],{"type":52,"value":564},{"type":47,"tag":382,"props":698,"children":700},{"style":699},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[701],{"type":52,"value":702}," 2",{"type":47,"tag":382,"props":704,"children":705},{"style":395},[706],{"type":52,"value":419},{"type":47,"tag":382,"props":708,"children":709},{"style":401},[710],{"type":52,"value":711},"]\n",{"type":47,"tag":382,"props":713,"children":715},{"class":384,"line":714},9,[716],{"type":47,"tag":382,"props":717,"children":718},{"style":395},[719],{"type":52,"value":720},"  },\n",{"type":47,"tag":382,"props":722,"children":724},{"class":384,"line":723},10,[725,730,735,740,744,749,754,759],{"type":47,"tag":382,"props":726,"children":727},{"style":509},[728],{"type":52,"value":729},"  async",{"type":47,"tag":382,"props":731,"children":732},{"style":395},[733],{"type":52,"value":734}," ({",{"type":47,"tag":382,"props":736,"children":738},{"style":737},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[739],{"type":52,"value":610},{"type":47,"tag":382,"props":741,"children":742},{"style":395},[743],{"type":52,"value":409},{"type":47,"tag":382,"props":745,"children":746},{"style":737},[747],{"type":52,"value":748}," step",{"type":47,"tag":382,"props":750,"children":751},{"style":395},[752],{"type":52,"value":753}," })",{"type":47,"tag":382,"props":755,"children":756},{"style":509},[757],{"type":52,"value":758}," =>",{"type":47,"tag":382,"props":760,"children":761},{"style":395},[762],{"type":52,"value":763}," {\n",{"type":47,"tag":382,"props":765,"children":767},{"class":384,"line":766},11,[768,773,778,783,788,792,796,801,806,810,815,819,823,828,832],{"type":47,"tag":382,"props":769,"children":770},{"style":509},[771],{"type":52,"value":772},"    const",{"type":47,"tag":382,"props":774,"children":775},{"style":401},[776],{"type":52,"value":777}," ticket",{"type":47,"tag":382,"props":779,"children":780},{"style":395},[781],{"type":52,"value":782}," =",{"type":47,"tag":382,"props":784,"children":785},{"style":389},[786],{"type":52,"value":787}," await",{"type":47,"tag":382,"props":789,"children":790},{"style":401},[791],{"type":52,"value":748},{"type":47,"tag":382,"props":793,"children":794},{"style":395},[795],{"type":52,"value":300},{"type":47,"tag":382,"props":797,"children":798},{"style":533},[799],{"type":52,"value":800},"run",{"type":47,"tag":382,"props":802,"children":803},{"style":556},[804],{"type":52,"value":805},"(",{"type":47,"tag":382,"props":807,"children":808},{"style":395},[809],{"type":52,"value":440},{"type":47,"tag":382,"props":811,"children":812},{"style":432},[813],{"type":52,"value":814},"load-ticket",{"type":47,"tag":382,"props":816,"children":817},{"style":395},[818],{"type":52,"value":440},{"type":47,"tag":382,"props":820,"children":821},{"style":395},[822],{"type":52,"value":409},{"type":47,"tag":382,"props":824,"children":825},{"style":395},[826],{"type":52,"value":827}," ()",{"type":47,"tag":382,"props":829,"children":830},{"style":509},[831],{"type":52,"value":758},{"type":47,"tag":382,"props":833,"children":834},{"style":395},[835],{"type":52,"value":763},{"type":47,"tag":382,"props":837,"children":839},{"class":384,"line":838},12,[840,845,850,854,859,863,868,872,877,882],{"type":47,"tag":382,"props":841,"children":842},{"style":389},[843],{"type":52,"value":844},"      return",{"type":47,"tag":382,"props":846,"children":847},{"style":533},[848],{"type":52,"value":849}," getTicket",{"type":47,"tag":382,"props":851,"children":852},{"style":556},[853],{"type":52,"value":805},{"type":47,"tag":382,"props":855,"children":856},{"style":401},[857],{"type":52,"value":858},"event",{"type":47,"tag":382,"props":860,"children":861},{"style":395},[862],{"type":52,"value":300},{"type":47,"tag":382,"props":864,"children":865},{"style":401},[866],{"type":52,"value":867},"data",{"type":47,"tag":382,"props":869,"children":870},{"style":395},[871],{"type":52,"value":300},{"type":47,"tag":382,"props":873,"children":874},{"style":401},[875],{"type":52,"value":876},"ticketId",{"type":47,"tag":382,"props":878,"children":879},{"style":556},[880],{"type":52,"value":881},")",{"type":47,"tag":382,"props":883,"children":884},{"style":395},[885],{"type":52,"value":445},{"type":47,"tag":382,"props":887,"children":889},{"class":384,"line":888},13,[890,895,899],{"type":47,"tag":382,"props":891,"children":892},{"style":395},[893],{"type":52,"value":894},"    }",{"type":47,"tag":382,"props":896,"children":897},{"style":556},[898],{"type":52,"value":881},{"type":47,"tag":382,"props":900,"children":901},{"style":395},[902],{"type":52,"value":445},{"type":47,"tag":382,"props":904,"children":906},{"class":384,"line":905},14,[907],{"type":47,"tag":382,"props":908,"children":909},{"emptyLinePlaceholder":494},[910],{"type":52,"value":497},{"type":47,"tag":382,"props":912,"children":914},{"class":384,"line":913},15,[915,919,924,928,932,936],{"type":47,"tag":382,"props":916,"children":917},{"style":509},[918],{"type":52,"value":772},{"type":47,"tag":382,"props":920,"children":921},{"style":401},[922],{"type":52,"value":923}," writer",{"type":47,"tag":382,"props":925,"children":926},{"style":395},[927],{"type":52,"value":782},{"type":47,"tag":382,"props":929,"children":930},{"style":533},[931],{"type":52,"value":404},{"type":47,"tag":382,"props":933,"children":934},{"style":556},[935],{"type":52,"value":805},{"type":47,"tag":382,"props":937,"children":938},{"style":395},[939],{"type":52,"value":940},"{\n",{"type":47,"tag":382,"props":942,"children":944},{"class":384,"line":943},16,[945,950,954,958,963,967],{"type":47,"tag":382,"props":946,"children":947},{"style":556},[948],{"type":52,"value":949},"      name",{"type":47,"tag":382,"props":951,"children":952},{"style":395},[953],{"type":52,"value":564},{"type":47,"tag":382,"props":955,"children":956},{"style":395},[957],{"type":52,"value":429},{"type":47,"tag":382,"props":959,"children":960},{"style":432},[961],{"type":52,"value":962},"support-summary-writer",{"type":47,"tag":382,"props":964,"children":965},{"style":395},[966],{"type":52,"value":440},{"type":47,"tag":382,"props":968,"children":969},{"style":395},[970],{"type":52,"value":582},{"type":47,"tag":382,"props":972,"children":974},{"class":384,"line":973},17,[975,980,984,988,993,997],{"type":47,"tag":382,"props":976,"children":977},{"style":556},[978],{"type":52,"value":979},"      system",{"type":47,"tag":382,"props":981,"children":982},{"style":395},[983],{"type":52,"value":564},{"type":47,"tag":382,"props":985,"children":986},{"style":395},[987],{"type":52,"value":429},{"type":47,"tag":382,"props":989,"children":990},{"style":432},[991],{"type":52,"value":992},"Write a concise support-ticket summary with next actions.",{"type":47,"tag":382,"props":994,"children":995},{"style":395},[996],{"type":52,"value":440},{"type":47,"tag":382,"props":998,"children":999},{"style":395},[1000],{"type":52,"value":582},{"type":47,"tag":382,"props":1002,"children":1004},{"class":384,"line":1003},18,[1005,1010,1014,1018,1022,1026,1031,1035,1039,1044,1048,1052],{"type":47,"tag":382,"props":1006,"children":1007},{"style":556},[1008],{"type":52,"value":1009},"      model",{"type":47,"tag":382,"props":1011,"children":1012},{"style":395},[1013],{"type":52,"value":564},{"type":47,"tag":382,"props":1015,"children":1016},{"style":533},[1017],{"type":52,"value":414},{"type":47,"tag":382,"props":1019,"children":1020},{"style":556},[1021],{"type":52,"value":805},{"type":47,"tag":382,"props":1023,"children":1024},{"style":395},[1025],{"type":52,"value":605},{"type":47,"tag":382,"props":1027,"children":1028},{"style":556},[1029],{"type":52,"value":1030}," model",{"type":47,"tag":382,"props":1032,"children":1033},{"style":395},[1034],{"type":52,"value":564},{"type":47,"tag":382,"props":1036,"children":1037},{"style":395},[1038],{"type":52,"value":429},{"type":47,"tag":382,"props":1040,"children":1041},{"style":432},[1042],{"type":52,"value":1043},"gpt-4o",{"type":47,"tag":382,"props":1045,"children":1046},{"style":395},[1047],{"type":52,"value":440},{"type":47,"tag":382,"props":1049,"children":1050},{"style":395},[1051],{"type":52,"value":419},{"type":47,"tag":382,"props":1053,"children":1054},{"style":556},[1055],{"type":52,"value":1056},")\n",{"type":47,"tag":382,"props":1058,"children":1060},{"class":384,"line":1059},19,[1061,1065,1069],{"type":47,"tag":382,"props":1062,"children":1063},{"style":395},[1064],{"type":52,"value":894},{"type":47,"tag":382,"props":1066,"children":1067},{"style":556},[1068],{"type":52,"value":881},{"type":47,"tag":382,"props":1070,"children":1071},{"style":395},[1072],{"type":52,"value":445},{"type":47,"tag":382,"props":1074,"children":1076},{"class":384,"line":1075},20,[1077],{"type":47,"tag":382,"props":1078,"children":1079},{"emptyLinePlaceholder":494},[1080],{"type":52,"value":497},{"type":47,"tag":382,"props":1082,"children":1084},{"class":384,"line":1083},21,[1085,1089,1093,1098,1102,1106,1110,1114,1118,1122,1126,1131,1135,1140,1144,1149,1154],{"type":47,"tag":382,"props":1086,"children":1087},{"style":509},[1088],{"type":52,"value":772},{"type":47,"tag":382,"props":1090,"children":1091},{"style":395},[1092],{"type":52,"value":398},{"type":47,"tag":382,"props":1094,"children":1095},{"style":401},[1096],{"type":52,"value":1097}," output",{"type":47,"tag":382,"props":1099,"children":1100},{"style":395},[1101],{"type":52,"value":419},{"type":47,"tag":382,"props":1103,"children":1104},{"style":395},[1105],{"type":52,"value":782},{"type":47,"tag":382,"props":1107,"children":1108},{"style":389},[1109],{"type":52,"value":787},{"type":47,"tag":382,"props":1111,"children":1112},{"style":401},[1113],{"type":52,"value":923},{"type":47,"tag":382,"props":1115,"children":1116},{"style":395},[1117],{"type":52,"value":300},{"type":47,"tag":382,"props":1119,"children":1120},{"style":533},[1121],{"type":52,"value":800},{"type":47,"tag":382,"props":1123,"children":1124},{"style":556},[1125],{"type":52,"value":805},{"type":47,"tag":382,"props":1127,"children":1128},{"style":401},[1129],{"type":52,"value":1130},"JSON",{"type":47,"tag":382,"props":1132,"children":1133},{"style":395},[1134],{"type":52,"value":300},{"type":47,"tag":382,"props":1136,"children":1137},{"style":533},[1138],{"type":52,"value":1139},"stringify",{"type":47,"tag":382,"props":1141,"children":1142},{"style":556},[1143],{"type":52,"value":805},{"type":47,"tag":382,"props":1145,"children":1146},{"style":401},[1147],{"type":52,"value":1148},"ticket",{"type":47,"tag":382,"props":1150,"children":1151},{"style":556},[1152],{"type":52,"value":1153},"))",{"type":47,"tag":382,"props":1155,"children":1156},{"style":395},[1157],{"type":52,"value":445},{"type":47,"tag":382,"props":1159,"children":1161},{"class":384,"line":1160},22,[1162],{"type":47,"tag":382,"props":1163,"children":1164},{"emptyLinePlaceholder":494},[1165],{"type":52,"value":497},{"type":47,"tag":382,"props":1167,"children":1169},{"class":384,"line":1168},23,[1170,1175,1179,1183,1187,1191,1195,1200,1204,1208,1212,1216],{"type":47,"tag":382,"props":1171,"children":1172},{"style":389},[1173],{"type":52,"value":1174},"    await",{"type":47,"tag":382,"props":1176,"children":1177},{"style":401},[1178],{"type":52,"value":748},{"type":47,"tag":382,"props":1180,"children":1181},{"style":395},[1182],{"type":52,"value":300},{"type":47,"tag":382,"props":1184,"children":1185},{"style":533},[1186],{"type":52,"value":800},{"type":47,"tag":382,"props":1188,"children":1189},{"style":556},[1190],{"type":52,"value":805},{"type":47,"tag":382,"props":1192,"children":1193},{"style":395},[1194],{"type":52,"value":440},{"type":47,"tag":382,"props":1196,"children":1197},{"style":432},[1198],{"type":52,"value":1199},"save-summary",{"type":47,"tag":382,"props":1201,"children":1202},{"style":395},[1203],{"type":52,"value":440},{"type":47,"tag":382,"props":1205,"children":1206},{"style":395},[1207],{"type":52,"value":409},{"type":47,"tag":382,"props":1209,"children":1210},{"style":395},[1211],{"type":52,"value":827},{"type":47,"tag":382,"props":1213,"children":1214},{"style":509},[1215],{"type":52,"value":758},{"type":47,"tag":382,"props":1217,"children":1218},{"style":395},[1219],{"type":52,"value":763},{"type":47,"tag":382,"props":1221,"children":1223},{"class":384,"line":1222},24,[1224,1228,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269],{"type":47,"tag":382,"props":1225,"children":1226},{"style":389},[1227],{"type":52,"value":844},{"type":47,"tag":382,"props":1229,"children":1230},{"style":533},[1231],{"type":52,"value":1232}," saveTicketSummary",{"type":47,"tag":382,"props":1234,"children":1235},{"style":556},[1236],{"type":52,"value":805},{"type":47,"tag":382,"props":1238,"children":1239},{"style":401},[1240],{"type":52,"value":858},{"type":47,"tag":382,"props":1242,"children":1243},{"style":395},[1244],{"type":52,"value":300},{"type":47,"tag":382,"props":1246,"children":1247},{"style":401},[1248],{"type":52,"value":867},{"type":47,"tag":382,"props":1250,"children":1251},{"style":395},[1252],{"type":52,"value":300},{"type":47,"tag":382,"props":1254,"children":1255},{"style":401},[1256],{"type":52,"value":876},{"type":47,"tag":382,"props":1258,"children":1259},{"style":395},[1260],{"type":52,"value":409},{"type":47,"tag":382,"props":1262,"children":1263},{"style":401},[1264],{"type":52,"value":1097},{"type":47,"tag":382,"props":1266,"children":1267},{"style":556},[1268],{"type":52,"value":881},{"type":47,"tag":382,"props":1270,"children":1271},{"style":395},[1272],{"type":52,"value":445},{"type":47,"tag":382,"props":1274,"children":1276},{"class":384,"line":1275},25,[1277,1281,1285],{"type":47,"tag":382,"props":1278,"children":1279},{"style":395},[1280],{"type":52,"value":894},{"type":47,"tag":382,"props":1282,"children":1283},{"style":556},[1284],{"type":52,"value":881},{"type":47,"tag":382,"props":1286,"children":1287},{"style":395},[1288],{"type":52,"value":445},{"type":47,"tag":382,"props":1290,"children":1291},{"class":384,"line":23},[1292],{"type":47,"tag":382,"props":1293,"children":1294},{"emptyLinePlaceholder":494},[1295],{"type":52,"value":497},{"type":47,"tag":382,"props":1297,"children":1299},{"class":384,"line":1298},27,[1300,1305,1309,1314,1318,1322,1326,1330,1334,1338],{"type":47,"tag":382,"props":1301,"children":1302},{"style":389},[1303],{"type":52,"value":1304},"    return",{"type":47,"tag":382,"props":1306,"children":1307},{"style":395},[1308],{"type":52,"value":398},{"type":47,"tag":382,"props":1310,"children":1311},{"style":556},[1312],{"type":52,"value":1313}," ticketId",{"type":47,"tag":382,"props":1315,"children":1316},{"style":395},[1317],{"type":52,"value":564},{"type":47,"tag":382,"props":1319,"children":1320},{"style":401},[1321],{"type":52,"value":610},{"type":47,"tag":382,"props":1323,"children":1324},{"style":395},[1325],{"type":52,"value":300},{"type":47,"tag":382,"props":1327,"children":1328},{"style":401},[1329],{"type":52,"value":867},{"type":47,"tag":382,"props":1331,"children":1332},{"style":395},[1333],{"type":52,"value":300},{"type":47,"tag":382,"props":1335,"children":1336},{"style":401},[1337],{"type":52,"value":876},{"type":47,"tag":382,"props":1339,"children":1340},{"style":395},[1341],{"type":52,"value":1342}," };\n",{"type":47,"tag":382,"props":1344,"children":1346},{"class":384,"line":1345},28,[1347],{"type":47,"tag":382,"props":1348,"children":1349},{"style":395},[1350],{"type":52,"value":1351},"  }\n",{"type":47,"tag":382,"props":1353,"children":1355},{"class":384,"line":1354},29,[1356,1360],{"type":47,"tag":382,"props":1357,"children":1358},{"style":401},[1359],{"type":52,"value":881},{"type":47,"tag":382,"props":1361,"children":1362},{"style":395},[1363],{"type":52,"value":445},{"type":47,"tag":161,"props":1365,"children":1367},{"id":1366},"tool-calls",[1368],{"type":52,"value":1369},"Tool Calls",{"type":47,"tag":55,"props":1371,"children":1372},{},[1373],{"type":52,"value":1374},"Tools can be defined with AgentKit, but agent-safe tools should still follow\ndurability rules:",{"type":47,"tag":88,"props":1376,"children":1377},{},[1378,1383,1402,1407,1412],{"type":47,"tag":92,"props":1379,"children":1380},{},[1381],{"type":52,"value":1382},"Read-only tool calls can run as part of the agent when replaying is harmless.",{"type":47,"tag":92,"props":1384,"children":1385},{},[1386,1388,1393,1395,1401],{"type":52,"value":1387},"External side effects should be isolated with stable IDs and ",{"type":47,"tag":66,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":52,"value":298},{"type":52,"value":1394},"\nboundaries, or implemented as tool handlers that use the provided ",{"type":47,"tag":66,"props":1396,"children":1398},{"className":1397},[],[1399],{"type":52,"value":1400},"step",{"type":52,"value":300},{"type":47,"tag":92,"props":1403,"children":1404},{},[1405],{"type":52,"value":1406},"Tool outputs should be small enough for step state limits.",{"type":47,"tag":92,"props":1408,"children":1409},{},[1410],{"type":52,"value":1411},"Validate tool parameters with schemas; never trust model-provided arguments.",{"type":47,"tag":92,"props":1413,"children":1414},{},[1415],{"type":52,"value":1416},"Use tenant\u002Fuser IDs from authenticated event data, not only from model text.",{"type":47,"tag":55,"props":1418,"children":1419},{},[1420],{"type":52,"value":1421},"Tool side-effect checklist:",{"type":47,"tag":371,"props":1423,"children":1427},{"className":1424,"code":1426,"language":52,"meta":376},[1425],"language-text","- What external state can this tool change?\n- What idempotency key prevents duplicate writes?\n- What should happen if the model calls the same tool twice?\n- Is the output safe to store in function run state?\n- Does the tool need provider-specific concurrency or throttle limits?\n",[1428],{"type":47,"tag":66,"props":1429,"children":1430},{"__ignoreMap":376},[1431],{"type":52,"value":1426},{"type":47,"tag":161,"props":1433,"children":1435},{"id":1434},"human-in-the-loop",[1436],{"type":52,"value":1437},"Human in the Loop",{"type":47,"tag":55,"props":1439,"children":1440},{},[1441],{"type":52,"value":1442},"Use a durable wait instead of polling a database or keeping state in memory.",{"type":47,"tag":371,"props":1444,"children":1446},{"className":373,"code":1445,"language":375,"meta":376,"style":376},"const approval = await step.waitForEvent(\"wait-for-approval\", {\n  event: \"support\u002Freply.approved\",\n  timeout: \"3d\",\n  match: \"data.ticketId\"\n});\n\nif (!approval) {\n  await step.run(\"mark-review-timeout\", () => {\n    return markTicketNeedsManualReview(event.data.ticketId);\n  });\n  return { status: \"timed_out\" };\n}\n\nawait step.run(\"send-reply\", () => {\n  return sendSupportReply({\n    ticketId: event.data.ticketId,\n    approvalId: approval.data.approvalId\n  });\n});\n",[1447],{"type":47,"tag":66,"props":1448,"children":1449},{"__ignoreMap":376},[1450,1509,1538,1567,1593,1609,1616,1643,1696,1740,1756,1794,1802,1809,1862,1882,1918,1952,1967],{"type":47,"tag":382,"props":1451,"children":1452},{"class":384,"line":385},[1453,1458,1463,1467,1471,1475,1479,1484,1488,1492,1497,1501,1505],{"type":47,"tag":382,"props":1454,"children":1455},{"style":509},[1456],{"type":52,"value":1457},"const",{"type":47,"tag":382,"props":1459,"children":1460},{"style":401},[1461],{"type":52,"value":1462}," approval ",{"type":47,"tag":382,"props":1464,"children":1465},{"style":395},[1466],{"type":52,"value":522},{"type":47,"tag":382,"props":1468,"children":1469},{"style":389},[1470],{"type":52,"value":787},{"type":47,"tag":382,"props":1472,"children":1473},{"style":401},[1474],{"type":52,"value":748},{"type":47,"tag":382,"props":1476,"children":1477},{"style":395},[1478],{"type":52,"value":300},{"type":47,"tag":382,"props":1480,"children":1481},{"style":533},[1482],{"type":52,"value":1483},"waitForEvent",{"type":47,"tag":382,"props":1485,"children":1486},{"style":401},[1487],{"type":52,"value":805},{"type":47,"tag":382,"props":1489,"children":1490},{"style":395},[1491],{"type":52,"value":440},{"type":47,"tag":382,"props":1493,"children":1494},{"style":432},[1495],{"type":52,"value":1496},"wait-for-approval",{"type":47,"tag":382,"props":1498,"children":1499},{"style":395},[1500],{"type":52,"value":440},{"type":47,"tag":382,"props":1502,"children":1503},{"style":395},[1504],{"type":52,"value":409},{"type":47,"tag":382,"props":1506,"children":1507},{"style":395},[1508],{"type":52,"value":763},{"type":47,"tag":382,"props":1510,"children":1511},{"class":384,"line":448},[1512,1517,1521,1525,1530,1534],{"type":47,"tag":382,"props":1513,"children":1514},{"style":556},[1515],{"type":52,"value":1516},"  event",{"type":47,"tag":382,"props":1518,"children":1519},{"style":395},[1520],{"type":52,"value":564},{"type":47,"tag":382,"props":1522,"children":1523},{"style":395},[1524],{"type":52,"value":429},{"type":47,"tag":382,"props":1526,"children":1527},{"style":432},[1528],{"type":52,"value":1529},"support\u002Freply.approved",{"type":47,"tag":382,"props":1531,"children":1532},{"style":395},[1533],{"type":52,"value":440},{"type":47,"tag":382,"props":1535,"children":1536},{"style":395},[1537],{"type":52,"value":582},{"type":47,"tag":382,"props":1539,"children":1540},{"class":384,"line":490},[1541,1546,1550,1554,1559,1563],{"type":47,"tag":382,"props":1542,"children":1543},{"style":556},[1544],{"type":52,"value":1545},"  timeout",{"type":47,"tag":382,"props":1547,"children":1548},{"style":395},[1549],{"type":52,"value":564},{"type":47,"tag":382,"props":1551,"children":1552},{"style":395},[1553],{"type":52,"value":429},{"type":47,"tag":382,"props":1555,"children":1556},{"style":432},[1557],{"type":52,"value":1558},"3d",{"type":47,"tag":382,"props":1560,"children":1561},{"style":395},[1562],{"type":52,"value":440},{"type":47,"tag":382,"props":1564,"children":1565},{"style":395},[1566],{"type":52,"value":582},{"type":47,"tag":382,"props":1568,"children":1569},{"class":384,"line":500},[1570,1575,1579,1583,1588],{"type":47,"tag":382,"props":1571,"children":1572},{"style":556},[1573],{"type":52,"value":1574},"  match",{"type":47,"tag":382,"props":1576,"children":1577},{"style":395},[1578],{"type":52,"value":564},{"type":47,"tag":382,"props":1580,"children":1581},{"style":395},[1582],{"type":52,"value":429},{"type":47,"tag":382,"props":1584,"children":1585},{"style":432},[1586],{"type":52,"value":1587},"data.ticketId",{"type":47,"tag":382,"props":1589,"children":1590},{"style":395},[1591],{"type":52,"value":1592},"\"\n",{"type":47,"tag":382,"props":1594,"children":1595},{"class":384,"line":27},[1596,1601,1605],{"type":47,"tag":382,"props":1597,"children":1598},{"style":395},[1599],{"type":52,"value":1600},"}",{"type":47,"tag":382,"props":1602,"children":1603},{"style":401},[1604],{"type":52,"value":881},{"type":47,"tag":382,"props":1606,"children":1607},{"style":395},[1608],{"type":52,"value":445},{"type":47,"tag":382,"props":1610,"children":1611},{"class":384,"line":552},[1612],{"type":47,"tag":382,"props":1613,"children":1614},{"emptyLinePlaceholder":494},[1615],{"type":52,"value":497},{"type":47,"tag":382,"props":1617,"children":1618},{"class":384,"line":585},[1619,1624,1629,1634,1639],{"type":47,"tag":382,"props":1620,"children":1621},{"style":389},[1622],{"type":52,"value":1623},"if",{"type":47,"tag":382,"props":1625,"children":1626},{"style":401},[1627],{"type":52,"value":1628}," (",{"type":47,"tag":382,"props":1630,"children":1631},{"style":395},[1632],{"type":52,"value":1633},"!",{"type":47,"tag":382,"props":1635,"children":1636},{"style":401},[1637],{"type":52,"value":1638},"approval) ",{"type":47,"tag":382,"props":1640,"children":1641},{"style":395},[1642],{"type":52,"value":940},{"type":47,"tag":382,"props":1644,"children":1645},{"class":384,"line":643},[1646,1651,1655,1659,1663,1667,1671,1676,1680,1684,1688,1692],{"type":47,"tag":382,"props":1647,"children":1648},{"style":389},[1649],{"type":52,"value":1650},"  await",{"type":47,"tag":382,"props":1652,"children":1653},{"style":401},[1654],{"type":52,"value":748},{"type":47,"tag":382,"props":1656,"children":1657},{"style":395},[1658],{"type":52,"value":300},{"type":47,"tag":382,"props":1660,"children":1661},{"style":533},[1662],{"type":52,"value":800},{"type":47,"tag":382,"props":1664,"children":1665},{"style":556},[1666],{"type":52,"value":805},{"type":47,"tag":382,"props":1668,"children":1669},{"style":395},[1670],{"type":52,"value":440},{"type":47,"tag":382,"props":1672,"children":1673},{"style":432},[1674],{"type":52,"value":1675},"mark-review-timeout",{"type":47,"tag":382,"props":1677,"children":1678},{"style":395},[1679],{"type":52,"value":440},{"type":47,"tag":382,"props":1681,"children":1682},{"style":395},[1683],{"type":52,"value":409},{"type":47,"tag":382,"props":1685,"children":1686},{"style":395},[1687],{"type":52,"value":827},{"type":47,"tag":382,"props":1689,"children":1690},{"style":509},[1691],{"type":52,"value":758},{"type":47,"tag":382,"props":1693,"children":1694},{"style":395},[1695],{"type":52,"value":763},{"type":47,"tag":382,"props":1697,"children":1698},{"class":384,"line":714},[1699,1703,1708,1712,1716,1720,1724,1728,1732,1736],{"type":47,"tag":382,"props":1700,"children":1701},{"style":389},[1702],{"type":52,"value":1304},{"type":47,"tag":382,"props":1704,"children":1705},{"style":533},[1706],{"type":52,"value":1707}," markTicketNeedsManualReview",{"type":47,"tag":382,"props":1709,"children":1710},{"style":556},[1711],{"type":52,"value":805},{"type":47,"tag":382,"props":1713,"children":1714},{"style":401},[1715],{"type":52,"value":858},{"type":47,"tag":382,"props":1717,"children":1718},{"style":395},[1719],{"type":52,"value":300},{"type":47,"tag":382,"props":1721,"children":1722},{"style":401},[1723],{"type":52,"value":867},{"type":47,"tag":382,"props":1725,"children":1726},{"style":395},[1727],{"type":52,"value":300},{"type":47,"tag":382,"props":1729,"children":1730},{"style":401},[1731],{"type":52,"value":876},{"type":47,"tag":382,"props":1733,"children":1734},{"style":556},[1735],{"type":52,"value":881},{"type":47,"tag":382,"props":1737,"children":1738},{"style":395},[1739],{"type":52,"value":445},{"type":47,"tag":382,"props":1741,"children":1742},{"class":384,"line":723},[1743,1748,1752],{"type":47,"tag":382,"props":1744,"children":1745},{"style":395},[1746],{"type":52,"value":1747},"  }",{"type":47,"tag":382,"props":1749,"children":1750},{"style":556},[1751],{"type":52,"value":881},{"type":47,"tag":382,"props":1753,"children":1754},{"style":395},[1755],{"type":52,"value":445},{"type":47,"tag":382,"props":1757,"children":1758},{"class":384,"line":766},[1759,1764,1768,1773,1777,1781,1786,1790],{"type":47,"tag":382,"props":1760,"children":1761},{"style":389},[1762],{"type":52,"value":1763},"  return",{"type":47,"tag":382,"props":1765,"children":1766},{"style":395},[1767],{"type":52,"value":398},{"type":47,"tag":382,"props":1769,"children":1770},{"style":556},[1771],{"type":52,"value":1772}," status",{"type":47,"tag":382,"props":1774,"children":1775},{"style":395},[1776],{"type":52,"value":564},{"type":47,"tag":382,"props":1778,"children":1779},{"style":395},[1780],{"type":52,"value":429},{"type":47,"tag":382,"props":1782,"children":1783},{"style":432},[1784],{"type":52,"value":1785},"timed_out",{"type":47,"tag":382,"props":1787,"children":1788},{"style":395},[1789],{"type":52,"value":440},{"type":47,"tag":382,"props":1791,"children":1792},{"style":395},[1793],{"type":52,"value":1342},{"type":47,"tag":382,"props":1795,"children":1796},{"class":384,"line":838},[1797],{"type":47,"tag":382,"props":1798,"children":1799},{"style":395},[1800],{"type":52,"value":1801},"}\n",{"type":47,"tag":382,"props":1803,"children":1804},{"class":384,"line":888},[1805],{"type":47,"tag":382,"props":1806,"children":1807},{"emptyLinePlaceholder":494},[1808],{"type":52,"value":497},{"type":47,"tag":382,"props":1810,"children":1811},{"class":384,"line":905},[1812,1817,1821,1825,1829,1833,1837,1842,1846,1850,1854,1858],{"type":47,"tag":382,"props":1813,"children":1814},{"style":389},[1815],{"type":52,"value":1816},"await",{"type":47,"tag":382,"props":1818,"children":1819},{"style":401},[1820],{"type":52,"value":748},{"type":47,"tag":382,"props":1822,"children":1823},{"style":395},[1824],{"type":52,"value":300},{"type":47,"tag":382,"props":1826,"children":1827},{"style":533},[1828],{"type":52,"value":800},{"type":47,"tag":382,"props":1830,"children":1831},{"style":401},[1832],{"type":52,"value":805},{"type":47,"tag":382,"props":1834,"children":1835},{"style":395},[1836],{"type":52,"value":440},{"type":47,"tag":382,"props":1838,"children":1839},{"style":432},[1840],{"type":52,"value":1841},"send-reply",{"type":47,"tag":382,"props":1843,"children":1844},{"style":395},[1845],{"type":52,"value":440},{"type":47,"tag":382,"props":1847,"children":1848},{"style":395},[1849],{"type":52,"value":409},{"type":47,"tag":382,"props":1851,"children":1852},{"style":395},[1853],{"type":52,"value":827},{"type":47,"tag":382,"props":1855,"children":1856},{"style":509},[1857],{"type":52,"value":758},{"type":47,"tag":382,"props":1859,"children":1860},{"style":395},[1861],{"type":52,"value":763},{"type":47,"tag":382,"props":1863,"children":1864},{"class":384,"line":913},[1865,1869,1874,1878],{"type":47,"tag":382,"props":1866,"children":1867},{"style":389},[1868],{"type":52,"value":1763},{"type":47,"tag":382,"props":1870,"children":1871},{"style":533},[1872],{"type":52,"value":1873}," sendSupportReply",{"type":47,"tag":382,"props":1875,"children":1876},{"style":556},[1877],{"type":52,"value":805},{"type":47,"tag":382,"props":1879,"children":1880},{"style":395},[1881],{"type":52,"value":940},{"type":47,"tag":382,"props":1883,"children":1884},{"class":384,"line":943},[1885,1890,1894,1898,1902,1906,1910,1914],{"type":47,"tag":382,"props":1886,"children":1887},{"style":556},[1888],{"type":52,"value":1889},"    ticketId",{"type":47,"tag":382,"props":1891,"children":1892},{"style":395},[1893],{"type":52,"value":564},{"type":47,"tag":382,"props":1895,"children":1896},{"style":401},[1897],{"type":52,"value":610},{"type":47,"tag":382,"props":1899,"children":1900},{"style":395},[1901],{"type":52,"value":300},{"type":47,"tag":382,"props":1903,"children":1904},{"style":401},[1905],{"type":52,"value":867},{"type":47,"tag":382,"props":1907,"children":1908},{"style":395},[1909],{"type":52,"value":300},{"type":47,"tag":382,"props":1911,"children":1912},{"style":401},[1913],{"type":52,"value":876},{"type":47,"tag":382,"props":1915,"children":1916},{"style":395},[1917],{"type":52,"value":582},{"type":47,"tag":382,"props":1919,"children":1920},{"class":384,"line":973},[1921,1926,1930,1935,1939,1943,1947],{"type":47,"tag":382,"props":1922,"children":1923},{"style":556},[1924],{"type":52,"value":1925},"    approvalId",{"type":47,"tag":382,"props":1927,"children":1928},{"style":395},[1929],{"type":52,"value":564},{"type":47,"tag":382,"props":1931,"children":1932},{"style":401},[1933],{"type":52,"value":1934}," approval",{"type":47,"tag":382,"props":1936,"children":1937},{"style":395},[1938],{"type":52,"value":300},{"type":47,"tag":382,"props":1940,"children":1941},{"style":401},[1942],{"type":52,"value":867},{"type":47,"tag":382,"props":1944,"children":1945},{"style":395},[1946],{"type":52,"value":300},{"type":47,"tag":382,"props":1948,"children":1949},{"style":401},[1950],{"type":52,"value":1951},"approvalId\n",{"type":47,"tag":382,"props":1953,"children":1954},{"class":384,"line":1003},[1955,1959,1963],{"type":47,"tag":382,"props":1956,"children":1957},{"style":395},[1958],{"type":52,"value":1747},{"type":47,"tag":382,"props":1960,"children":1961},{"style":556},[1962],{"type":52,"value":881},{"type":47,"tag":382,"props":1964,"children":1965},{"style":395},[1966],{"type":52,"value":445},{"type":47,"tag":382,"props":1968,"children":1969},{"class":384,"line":1059},[1970,1974,1978],{"type":47,"tag":382,"props":1971,"children":1972},{"style":395},[1973],{"type":52,"value":1600},{"type":47,"tag":382,"props":1975,"children":1976},{"style":401},[1977],{"type":52,"value":881},{"type":47,"tag":382,"props":1979,"children":1980},{"style":395},[1981],{"type":52,"value":445},{"type":47,"tag":161,"props":1983,"children":1985},{"id":1984},"realtime-progress",[1986],{"type":52,"value":1987},"Realtime Progress",{"type":47,"tag":55,"props":1989,"children":1990},{},[1991],{"type":52,"value":1992},"For v4 native realtime:",{"type":47,"tag":88,"props":1994,"children":1995},{},[1996,2008,2026,2039],{"type":47,"tag":92,"props":1997,"children":1998},{},[1999,2000,2006],{"type":52,"value":328},{"type":47,"tag":66,"props":2001,"children":2003},{"className":2002},[],[2004],{"type":52,"value":2005},"step.realtime.publish",{"type":52,"value":2007}," between steps.",{"type":47,"tag":92,"props":2009,"children":2010},{},[2011,2012,2018,2020,2025],{"type":52,"value":328},{"type":47,"tag":66,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":52,"value":2017},"inngest.realtime.publish",{"type":52,"value":2019}," inside an existing ",{"type":47,"tag":66,"props":2021,"children":2023},{"className":2022},[],[2024],{"type":52,"value":298},{"type":52,"value":300},{"type":47,"tag":92,"props":2027,"children":2028},{},[2029,2031,2037],{"type":52,"value":2030},"Do not install the v3 ",{"type":47,"tag":66,"props":2032,"children":2034},{"className":2033},[],[2035],{"type":52,"value":2036},"@inngest\u002Frealtime",{"type":52,"value":2038}," package for v4 projects.",{"type":47,"tag":92,"props":2040,"children":2041},{},[2042],{"type":52,"value":2043},"Do not build a process-local WebSocket as the only source of progress for a\ndurable function.",{"type":47,"tag":55,"props":2045,"children":2046},{},[2047,2049,2054,2056,2062,2063,2069],{"type":52,"value":2048},"For AgentKit-specific UI hooks, check the installed ",{"type":47,"tag":66,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":52,"value":435},{"type":52,"value":2055},"\nversion and current docs before wiring ",{"type":47,"tag":66,"props":2057,"children":2059},{"className":2058},[],[2060],{"type":52,"value":2061},"useAgent",{"type":52,"value":335},{"type":47,"tag":66,"props":2064,"children":2066},{"className":2065},[],[2067],{"type":52,"value":2068},"useChat",{"type":52,"value":300},{"type":47,"tag":161,"props":2071,"children":2073},{"id":2072},"agent-evals",[2074],{"type":52,"value":2075},"Agent Evals",{"type":47,"tag":55,"props":2077,"children":2078},{},[2079,2080,2086,2088,2094],{"type":52,"value":328},{"type":47,"tag":66,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":52,"value":2085},"inngest-agent-evals",{"type":52,"value":2087}," when the user asks to score an agent, compare prompts\nor models, track user feedback, group runs by conversation\u002Fticket, or debug\nagent quality over time. In durable agent workflows, add ",{"type":47,"tag":66,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":52,"value":2093},"meta.sessions",{"type":52,"value":2095}," at the\nevent that starts or connects the user flow, use direct scoring for signals\nknown during the run, and use deferred scorers for product outcomes that arrive\nlater.",{"type":47,"tag":161,"props":2097,"children":2099},{"id":2098},"flow-control-and-cost",[2100],{"type":52,"value":2101},"Flow Control and Cost",{"type":47,"tag":55,"props":2103,"children":2104},{},[2105],{"type":52,"value":2106},"Agent workloads often need provider and tenant limits:",{"type":47,"tag":88,"props":2108,"children":2109},{},[2110,2115,2120,2125],{"type":47,"tag":92,"props":2111,"children":2112},{},[2113],{"type":52,"value":2114},"Use account-scoped concurrency or throttle keys for model providers.",{"type":47,"tag":92,"props":2116,"children":2117},{},[2118],{"type":52,"value":2119},"Key per tenant or account where fairness matters.",{"type":47,"tag":92,"props":2121,"children":2122},{},[2123],{"type":52,"value":2124},"Use deterministic event IDs so duplicate user actions do not spawn duplicate\nexpensive runs.",{"type":47,"tag":92,"props":2126,"children":2127},{},[2128],{"type":52,"value":2129},"Keep successful model\u002Ftool results in steps so retrying a later failure does\nnot re-charge earlier model calls.",{"type":47,"tag":55,"props":2131,"children":2132},{},[2133],{"type":52,"value":2134},"Example:",{"type":47,"tag":371,"props":2136,"children":2138},{"className":373,"code":2137,"language":375,"meta":376,"style":376},"{\n  id: \"support-agent-run\",\n  triggers: [{ event: \"support\u002Fagent.requested\" }],\n  throttle: {\n    limit: 120,\n    period: \"1m\",\n    key: `\"openai\"`\n  },\n  concurrency: [\n    { key: \"event.data.accountId\", limit: 3 }\n  ]\n}\n",[2139],{"type":47,"tag":66,"props":2140,"children":2141},{"__ignoreMap":376},[2142,2149,2179,2232,2248,2269,2298,2325,2332,2349,2399,2407],{"type":47,"tag":382,"props":2143,"children":2144},{"class":384,"line":385},[2145],{"type":47,"tag":382,"props":2146,"children":2147},{"style":395},[2148],{"type":52,"value":940},{"type":47,"tag":382,"props":2150,"children":2151},{"class":384,"line":448},[2152,2158,2162,2166,2171,2175],{"type":47,"tag":382,"props":2153,"children":2155},{"style":2154},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2156],{"type":52,"value":2157},"  id",{"type":47,"tag":382,"props":2159,"children":2160},{"style":395},[2161],{"type":52,"value":564},{"type":47,"tag":382,"props":2163,"children":2164},{"style":395},[2165],{"type":52,"value":429},{"type":47,"tag":382,"props":2167,"children":2168},{"style":432},[2169],{"type":52,"value":2170},"support-agent-run",{"type":47,"tag":382,"props":2172,"children":2173},{"style":395},[2174],{"type":52,"value":440},{"type":47,"tag":382,"props":2176,"children":2177},{"style":395},[2178],{"type":52,"value":582},{"type":47,"tag":382,"props":2180,"children":2181},{"class":384,"line":490},[2182,2187,2191,2195,2199,2203,2207,2211,2216,2220,2224,2228],{"type":47,"tag":382,"props":2183,"children":2184},{"style":2154},[2185],{"type":52,"value":2186},"  triggers",{"type":47,"tag":382,"props":2188,"children":2189},{"style":395},[2190],{"type":52,"value":564},{"type":47,"tag":382,"props":2192,"children":2193},{"style":556},[2194],{"type":52,"value":600},{"type":47,"tag":382,"props":2196,"children":2197},{"style":395},[2198],{"type":52,"value":605},{"type":47,"tag":382,"props":2200,"children":2201},{"style":556},[2202],{"type":52,"value":610},{"type":47,"tag":382,"props":2204,"children":2205},{"style":395},[2206],{"type":52,"value":564},{"type":47,"tag":382,"props":2208,"children":2209},{"style":395},[2210],{"type":52,"value":429},{"type":47,"tag":382,"props":2212,"children":2213},{"style":432},[2214],{"type":52,"value":2215},"support\u002Fagent.requested",{"type":47,"tag":382,"props":2217,"children":2218},{"style":395},[2219],{"type":52,"value":440},{"type":47,"tag":382,"props":2221,"children":2222},{"style":395},[2223],{"type":52,"value":419},{"type":47,"tag":382,"props":2225,"children":2226},{"style":556},[2227],{"type":52,"value":636},{"type":47,"tag":382,"props":2229,"children":2230},{"style":395},[2231],{"type":52,"value":582},{"type":47,"tag":382,"props":2233,"children":2234},{"class":384,"line":500},[2235,2240,2244],{"type":47,"tag":382,"props":2236,"children":2237},{"style":2154},[2238],{"type":52,"value":2239},"  throttle",{"type":47,"tag":382,"props":2241,"children":2242},{"style":395},[2243],{"type":52,"value":564},{"type":47,"tag":382,"props":2245,"children":2246},{"style":395},[2247],{"type":52,"value":763},{"type":47,"tag":382,"props":2249,"children":2250},{"class":384,"line":27},[2251,2256,2260,2265],{"type":47,"tag":382,"props":2252,"children":2253},{"style":2154},[2254],{"type":52,"value":2255},"    limit",{"type":47,"tag":382,"props":2257,"children":2258},{"style":395},[2259],{"type":52,"value":564},{"type":47,"tag":382,"props":2261,"children":2262},{"style":699},[2263],{"type":52,"value":2264}," 120",{"type":47,"tag":382,"props":2266,"children":2267},{"style":395},[2268],{"type":52,"value":582},{"type":47,"tag":382,"props":2270,"children":2271},{"class":384,"line":552},[2272,2277,2281,2285,2290,2294],{"type":47,"tag":382,"props":2273,"children":2274},{"style":2154},[2275],{"type":52,"value":2276},"    period",{"type":47,"tag":382,"props":2278,"children":2279},{"style":395},[2280],{"type":52,"value":564},{"type":47,"tag":382,"props":2282,"children":2283},{"style":395},[2284],{"type":52,"value":429},{"type":47,"tag":382,"props":2286,"children":2287},{"style":432},[2288],{"type":52,"value":2289},"1m",{"type":47,"tag":382,"props":2291,"children":2292},{"style":395},[2293],{"type":52,"value":440},{"type":47,"tag":382,"props":2295,"children":2296},{"style":395},[2297],{"type":52,"value":582},{"type":47,"tag":382,"props":2299,"children":2300},{"class":384,"line":585},[2301,2306,2310,2315,2320],{"type":47,"tag":382,"props":2302,"children":2303},{"style":2154},[2304],{"type":52,"value":2305},"    key",{"type":47,"tag":382,"props":2307,"children":2308},{"style":395},[2309],{"type":52,"value":564},{"type":47,"tag":382,"props":2311,"children":2312},{"style":395},[2313],{"type":52,"value":2314}," `",{"type":47,"tag":382,"props":2316,"children":2317},{"style":432},[2318],{"type":52,"value":2319},"\"openai\"",{"type":47,"tag":382,"props":2321,"children":2322},{"style":395},[2323],{"type":52,"value":2324},"`\n",{"type":47,"tag":382,"props":2326,"children":2327},{"class":384,"line":643},[2328],{"type":47,"tag":382,"props":2329,"children":2330},{"style":395},[2331],{"type":52,"value":720},{"type":47,"tag":382,"props":2333,"children":2334},{"class":384,"line":714},[2335,2340,2344],{"type":47,"tag":382,"props":2336,"children":2337},{"style":2154},[2338],{"type":52,"value":2339},"  concurrency",{"type":47,"tag":382,"props":2341,"children":2342},{"style":395},[2343],{"type":52,"value":564},{"type":47,"tag":382,"props":2345,"children":2346},{"style":556},[2347],{"type":52,"value":2348}," [\n",{"type":47,"tag":382,"props":2350,"children":2351},{"class":384,"line":723},[2352,2357,2361,2365,2369,2373,2377,2381,2385,2389,2394],{"type":47,"tag":382,"props":2353,"children":2354},{"style":395},[2355],{"type":52,"value":2356},"    {",{"type":47,"tag":382,"props":2358,"children":2359},{"style":556},[2360],{"type":52,"value":666},{"type":47,"tag":382,"props":2362,"children":2363},{"style":395},[2364],{"type":52,"value":564},{"type":47,"tag":382,"props":2366,"children":2367},{"style":395},[2368],{"type":52,"value":429},{"type":47,"tag":382,"props":2370,"children":2371},{"style":432},[2372],{"type":52,"value":679},{"type":47,"tag":382,"props":2374,"children":2375},{"style":395},[2376],{"type":52,"value":440},{"type":47,"tag":382,"props":2378,"children":2379},{"style":395},[2380],{"type":52,"value":409},{"type":47,"tag":382,"props":2382,"children":2383},{"style":556},[2384],{"type":52,"value":692},{"type":47,"tag":382,"props":2386,"children":2387},{"style":395},[2388],{"type":52,"value":564},{"type":47,"tag":382,"props":2390,"children":2391},{"style":699},[2392],{"type":52,"value":2393}," 3",{"type":47,"tag":382,"props":2395,"children":2396},{"style":395},[2397],{"type":52,"value":2398}," }\n",{"type":47,"tag":382,"props":2400,"children":2401},{"class":384,"line":766},[2402],{"type":47,"tag":382,"props":2403,"children":2404},{"style":556},[2405],{"type":52,"value":2406},"  ]\n",{"type":47,"tag":382,"props":2408,"children":2409},{"class":384,"line":838},[2410],{"type":47,"tag":382,"props":2411,"children":2412},{"style":395},[2413],{"type":52,"value":1801},{"type":47,"tag":161,"props":2415,"children":2417},{"id":2416},"brownfield-migration",[2418],{"type":52,"value":2419},"Brownfield Migration",{"type":47,"tag":55,"props":2421,"children":2422},{},[2423],{"type":52,"value":2424},"When migrating an existing agent:",{"type":47,"tag":267,"props":2426,"children":2427},{},[2428,2433,2438,2443,2454,2466,2484],{"type":47,"tag":92,"props":2429,"children":2430},{},[2431],{"type":52,"value":2432},"Search for model calls, tool loops, in-memory state, streaming handlers,\napproval polling, and external side effects.",{"type":47,"tag":92,"props":2434,"children":2435},{},[2436],{"type":52,"value":2437},"Keep prompt\u002Ftool behavior stable at first.",{"type":47,"tag":92,"props":2439,"children":2440},{},[2441],{"type":52,"value":2442},"Move the trigger into an event and an Inngest function.",{"type":47,"tag":92,"props":2444,"children":2445},{},[2446,2448,2453],{"type":52,"value":2447},"Move model calls to AgentKit \u002F ",{"type":47,"tag":66,"props":2449,"children":2451},{"className":2450},[],[2452],{"type":52,"value":79},{"type":52,"value":300},{"type":47,"tag":92,"props":2455,"children":2456},{},[2457,2459,2464],{"type":52,"value":2458},"Move side-effecting tools into ",{"type":47,"tag":66,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":52,"value":298},{"type":52,"value":2465}," or durable tool handlers.",{"type":47,"tag":92,"props":2467,"children":2468},{},[2469,2471,2476,2478,2483],{"type":52,"value":2470},"Replace process-local waits with ",{"type":47,"tag":66,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":52,"value":185},{"type":52,"value":2477}," or\n",{"type":47,"tag":66,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":52,"value":341},{"type":52,"value":300},{"type":47,"tag":92,"props":2485,"children":2486},{},[2487],{"type":52,"value":2488},"Add realtime after the durable run is working.",{"type":47,"tag":55,"props":2490,"children":2491},{},[2492,2493,2499],{"type":52,"value":328},{"type":47,"tag":66,"props":2494,"children":2496},{"className":2495},[],[2497],{"type":52,"value":2498},"inngest-brownfield-audit",{"type":52,"value":2500}," first when the repo has multiple possible\nworkflows and the user has not picked one.",{"type":47,"tag":161,"props":2502,"children":2504},{"id":2503},"anti-patterns",[2505],{"type":52,"value":2506},"Anti-Patterns",{"type":47,"tag":88,"props":2508,"children":2509},{},[2510,2515,2528,2533,2538,2549,2554,2559],{"type":47,"tag":92,"props":2511,"children":2512},{},[2513],{"type":52,"value":2514},"Agent loop state only in memory.",{"type":47,"tag":92,"props":2516,"children":2517},{},[2518,2520,2526],{"type":52,"value":2519},"One giant ",{"type":47,"tag":66,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":52,"value":2525},"try\u002Fcatch",{"type":52,"value":2527}," around all model and tool calls.",{"type":47,"tag":92,"props":2529,"children":2530},{},[2531],{"type":52,"value":2532},"Retrying the entire agent after one tool failure.",{"type":47,"tag":92,"props":2534,"children":2535},{},[2536],{"type":52,"value":2537},"Charging repeatedly for successful model calls after a later step fails.",{"type":47,"tag":92,"props":2539,"children":2540},{},[2541,2547],{"type":47,"tag":66,"props":2542,"children":2544},{"className":2543},[],[2545],{"type":52,"value":2546},"setTimeout",{"type":52,"value":2548},", cron polling, or Redis TTL as the human-review mechanism.",{"type":47,"tag":92,"props":2550,"children":2551},{},[2552],{"type":52,"value":2553},"Side-effecting tools with no idempotency key.",{"type":47,"tag":92,"props":2555,"children":2556},{},[2557],{"type":52,"value":2558},"Streaming progress from a server process that can die while the durable work\ncontinues elsewhere.",{"type":47,"tag":92,"props":2560,"children":2561},{},[2562],{"type":52,"value":2563},"Adding AgentKit without registering the surrounding Inngest function.",{"type":47,"tag":161,"props":2565,"children":2567},{"id":2566},"verification",[2568],{"type":52,"value":2569},"Verification",{"type":47,"tag":88,"props":2571,"children":2572},{},[2573,2578,2583,2588,2593],{"type":47,"tag":92,"props":2574,"children":2575},{},[2576],{"type":52,"value":2577},"Typecheck the agent, tool schemas, and event payloads.",{"type":47,"tag":92,"props":2579,"children":2580},{},[2581],{"type":52,"value":2582},"Unit-test tool handlers separately from model behavior.",{"type":47,"tag":92,"props":2584,"children":2585},{},[2586],{"type":52,"value":2587},"Test that the HTTP entrypoint emits one deterministic event and returns fast.",{"type":47,"tag":92,"props":2589,"children":2590},{},[2591],{"type":52,"value":2592},"Test that duplicate event IDs do not duplicate final side effects.",{"type":47,"tag":92,"props":2594,"children":2595},{},[2596],{"type":52,"value":2597},"If possible, run the Inngest dev server and inspect the agent steps\u002Ftraces.",{"type":47,"tag":2599,"props":2600,"children":2601},"style",{},[2602],{"type":52,"value":2603},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2605,"total":905},[2606,2623,2630,2644,2657,2671,2686],{"slug":2085,"name":2085,"fn":2607,"description":2608,"org":2609,"tags":2610,"stars":23,"repoUrl":24,"updatedAt":2622},"build and debug Inngest agent evals","Use when building, migrating, or debugging Agent Evals on Inngest: scoring AI agent or workflow outcomes, deferred scorers, sessions, traces, step experiments, experiment variant attribution, Insights queries, or production eval loops for prompts, models, tools, providers, and agent behavior. Covers TypeScript SDK v4 scoring beta APIs, `scoreMiddleware`, `step.score`, `inngest.score`, `createScorer`, `defer`, `group.experiment`, `experimentRef`, `meta.sessions`, and when to use durable workflow primitives for outcome-based evaluation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2611,2612,2615,2616,2619],{"name":21,"slug":22,"type":15},{"name":2613,"slug":2614,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},{"name":2617,"slug":2618,"type":15},"Observability","observability",{"name":2620,"slug":2621,"type":15},"Workflow Automation","workflow-automation","2026-07-12T07:36:51.711641",{"slug":4,"name":4,"fn":5,"description":6,"org":2624,"tags":2625,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2626,2627,2628,2629],{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":2631,"name":2631,"fn":2632,"description":2633,"org":2634,"tags":2635,"stars":23,"repoUrl":24,"updatedAt":2643},"inngest-api","interact with Inngest REST API","Use when the user explicitly asks for the Inngest REST API v2, raw HTTP, OpenAPI, API docs, API authentication, or an endpoint that the Inngest CLI does not expose. Covers api-docs.inngest.com, llms.txt, the OpenAPI v2 spec, Bearer authentication with API keys or signing keys, production and local base URLs, raw curl\u002Ffetch requests, request-shape discovery, pagination, secret redaction, and when to prefer the `inngest-api-cli` skill instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2636,2639,2642],{"name":2637,"slug":2638,"type":15},"API Development","api-development",{"name":2640,"slug":2641,"type":15},"REST API","rest-api",{"name":2620,"slug":2621,"type":15},"2026-07-12T07:36:39.364409",{"slug":2645,"name":2645,"fn":2646,"description":2647,"org":2648,"tags":2649,"stars":23,"repoUrl":24,"updatedAt":2656},"inngest-api-cli","operate Inngest API resources via CLI","Use when operating Inngest API resources from the terminal with `npx inngest-cli@latest api`: Cloud\u002Flocal run debugging, event-run lookup, function traces, function invocation, app syncs, webhooks, environments, keys, account checks, and Insights queries. Provides prescriptive command routing for agents: which CLI command to run for a run ID, event ID, app ID, function ID, Cloud environment, API key, missing ID, or potentially mutating operation. Use `inngest-cli` for dev server setup\u002Fgeneral CLI workflows and `inngest-api` only when raw REST API v2 docs or OpenAPI fallback are needed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2650,2651,2652,2655],{"name":2637,"slug":2638,"type":15},{"name":17,"slug":18,"type":15},{"name":2653,"slug":2654,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},"2026-07-12T07:36:47.58183",{"slug":2498,"name":2498,"fn":2658,"description":2659,"org":2660,"tags":2661,"stars":23,"repoUrl":24,"updatedAt":2670},"audit codebases for Inngest integration","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2662,2663,2666,2669],{"name":17,"slug":18,"type":15},{"name":2664,"slug":2665,"type":15},"Code Analysis","code-analysis",{"name":2667,"slug":2668,"type":15},"Engineering","engineering",{"name":9,"slug":8,"type":15},"2026-07-12T07:36:55.811247",{"slug":2672,"name":2672,"fn":2673,"description":2674,"org":2675,"tags":2676,"stars":23,"repoUrl":24,"updatedAt":2685},"inngest-cli","configure Inngest CLI and dev server","Use when installing or running the Inngest CLI and Dev Server for local development, local testing, serve endpoint debugging, Docker or Docker Compose setup, MCP configuration, self-hosted `inngest start`, or deployment workflow checks. Covers `inngest dev`, `inngest start`, auto-discovery, config files, environment variables, `@inngest\u002Ftest`, local event sending, platform gotchas, and production\u002Fself-hosted server flags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2677,2678,2681,2682],{"name":2653,"slug":2654,"type":15},{"name":2679,"slug":2680,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":2683,"slug":2684,"type":15},"Local Development","local-development","2026-07-12T07:36:40.694652",{"slug":2687,"name":2687,"fn":2688,"description":2689,"org":2690,"tags":2691,"stars":23,"repoUrl":24,"updatedAt":2698},"inngest-durable-functions","build durable and retry-safe functions","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2692,2693,2696,2697],{"name":17,"slug":18,"type":15},{"name":2694,"slug":2695,"type":15},"Backend","backend",{"name":9,"slug":8,"type":15},{"name":2620,"slug":2621,"type":15},"2026-07-12T07:36:57.141023",{"items":2700,"total":905},[2701,2709,2716,2722,2729,2736,2743,2750,2762,2775,2791,2806],{"slug":2085,"name":2085,"fn":2607,"description":2608,"org":2702,"tags":2703,"stars":23,"repoUrl":24,"updatedAt":2622},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2704,2705,2706,2707,2708],{"name":21,"slug":22,"type":15},{"name":2613,"slug":2614,"type":15},{"name":9,"slug":8,"type":15},{"name":2617,"slug":2618,"type":15},{"name":2620,"slug":2621,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":2710,"tags":2711,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2712,2713,2714,2715],{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":2631,"name":2631,"fn":2632,"description":2633,"org":2717,"tags":2718,"stars":23,"repoUrl":24,"updatedAt":2643},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2719,2720,2721],{"name":2637,"slug":2638,"type":15},{"name":2640,"slug":2641,"type":15},{"name":2620,"slug":2621,"type":15},{"slug":2645,"name":2645,"fn":2646,"description":2647,"org":2723,"tags":2724,"stars":23,"repoUrl":24,"updatedAt":2656},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2725,2726,2727,2728],{"name":2637,"slug":2638,"type":15},{"name":17,"slug":18,"type":15},{"name":2653,"slug":2654,"type":15},{"name":9,"slug":8,"type":15},{"slug":2498,"name":2498,"fn":2658,"description":2659,"org":2730,"tags":2731,"stars":23,"repoUrl":24,"updatedAt":2670},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2732,2733,2734,2735],{"name":17,"slug":18,"type":15},{"name":2664,"slug":2665,"type":15},{"name":2667,"slug":2668,"type":15},{"name":9,"slug":8,"type":15},{"slug":2672,"name":2672,"fn":2673,"description":2674,"org":2737,"tags":2738,"stars":23,"repoUrl":24,"updatedAt":2685},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2739,2740,2741,2742],{"name":2653,"slug":2654,"type":15},{"name":2679,"slug":2680,"type":15},{"name":9,"slug":8,"type":15},{"name":2683,"slug":2684,"type":15},{"slug":2687,"name":2687,"fn":2688,"description":2689,"org":2744,"tags":2745,"stars":23,"repoUrl":24,"updatedAt":2698},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2746,2747,2748,2749],{"name":17,"slug":18,"type":15},{"name":2694,"slug":2695,"type":15},{"name":9,"slug":8,"type":15},{"name":2620,"slug":2621,"type":15},{"slug":2751,"name":2751,"fn":2752,"description":2753,"org":2754,"tags":2755,"stars":23,"repoUrl":24,"updatedAt":2761},"inngest-events","design event-driven workflows","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\u002Ffunction.failed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2756,2759,2760],{"name":2757,"slug":2758,"type":15},"Data Pipeline","data-pipeline",{"name":9,"slug":8,"type":15},{"name":2620,"slug":2621,"type":15},"2026-07-12T07:36:44.685364",{"slug":2763,"name":2763,"fn":2764,"description":2765,"org":2766,"tags":2767,"stars":23,"repoUrl":24,"updatedAt":2774},"inngest-flow-control","manage API rate limits and load","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2768,2769,2770,2771],{"name":2637,"slug":2638,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":2772,"slug":2773,"type":15},"Performance","performance","2026-07-12T07:36:52.987451",{"slug":2776,"name":2776,"fn":2777,"description":2778,"org":2779,"tags":2780,"stars":23,"repoUrl":24,"updatedAt":2790},"inngest-middleware","add middleware to Inngest durable functions","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\u002Fmiddleware-encryption, @inngest\u002Fmiddleware-sentry, and custom middleware patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2781,2782,2783,2786,2787],{"name":2667,"slug":2668,"type":15},{"name":9,"slug":8,"type":15},{"name":2784,"slug":2785,"type":15},"Middleware","middleware",{"name":2617,"slug":2618,"type":15},{"name":2788,"slug":2789,"type":15},"Sentry","sentry","2026-07-12T07:36:50.127999",{"slug":2792,"name":2792,"fn":2793,"description":2794,"org":2795,"tags":2796,"stars":23,"repoUrl":24,"updatedAt":2805},"inngest-realtime","stream durable workflow updates to UI","Use when streaming durable workflow updates to a UI in real time — live order status pages that animate as steps complete, AI agent token streaming from a function to the browser, log tailing for long-running jobs, or human-in-the-loop approval flows that publish a prompt and wait for a user reply. Covers Inngest v4 native realtime: defining typed channels, publishing from inside step.run, minting subscription tokens via server actions, and consuming the stream from React\u002FNext.js client components.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2797,2798,2801,2802],{"name":17,"slug":18,"type":15},{"name":2799,"slug":2800,"type":15},"Frontend","frontend",{"name":9,"slug":8,"type":15},{"name":2803,"slug":2804,"type":15},"Real-time","real-time","2026-07-12T07:36:48.895092",{"slug":2807,"name":2807,"fn":2808,"description":2809,"org":2810,"tags":2811,"stars":23,"repoUrl":24,"updatedAt":2817},"inngest-setup","build durable TypeScript workflows","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2812,2813,2814,2815],{"name":17,"slug":18,"type":15},{"name":2694,"slug":2695,"type":15},{"name":9,"slug":8,"type":15},{"name":2816,"slug":375,"type":15},"TypeScript","2026-07-12T07:36:42.004122"]