{"id":"9f3f0fc0-9ea6-4694-8818-402d50d99a0b","shortId":"fAaaAd","kind":"skill","title":"inngest-setup","tagline":"Set up Inngest in a TypeScript project. Install the SDK, create a client, configure environment variables, serve endpoints or connect as a worker, and run the local dev server.","description":"# Inngest Setup\n\nThis skill sets up Inngest in a TypeScript project from scratch, covering installation, client configuration, connection modes, and local development.\n\n> **These skills are focused on TypeScript.** For Python or Go, refer to the [Inngest documentation](https://www.inngest.com/llms.txt) for language-specific guidance. Core concepts apply across all languages.\n\n## Prerequisites\n\n- Node.js 18+ (Node.js 22.4+ r ecommended for WebSocket support)\n- TypeScript project\n- Package manager (npm, yarn, pnpm, or bun)\n\n## Step 1: Install the Inngest SDK\n\nInstall the `inngest` npm package in your project:\n\n```bash\nnpm install inngest\n# or\nyarn add inngest\n# or\npnpm add inngest\n# or\nbun add inngest\n```\n\n## Step 2: Create an Inngest Client\n\nCreate a shared client file that you'll import throughout your codebase:\n\n```typescript\n// src/inngest/client.ts\nimport { Inngest } from \"inngest\";\n\nexport const inngest = new Inngest({\n  id: \"my-app\" // Unique identifier for your application (hyphenated slug)\n});\n// In development, you must set the INNGEST_DEV=1 env var or use isDev: true\n// In production, INNGEST_SIGNING_KEY is required (v4 defaults to Cloud mode)\n```\n\n### Key Configuration Options\n\n- **`id`** (required): Unique identifier for your app. Use a hyphenated slug like `\"my-app\"` or `\"user-service\"`\n- **`eventKey`**: Event key for sending events (prefer `INNGEST_EVENT_KEY` env var)\n- **`env`**: Environment name for Branch Environments\n- **`isDev`**: Force Dev mode (`true`) or Cloud mode (`false`). **v4 defaults to Cloud mode**, so set `isDev: true` or `INNGEST_DEV=1` for local development\n- **`signingKey`**: Signing key for production (prefer `INNGEST_SIGNING_KEY` env var). Moved from `serve()` to client in v4\n- **`signingKeyFallback`**: Fallback signing key for key rotation (prefer `INNGEST_SIGNING_KEY_FALLBACK` env var)\n- **`baseUrl`**: Custom Inngest API base URL (prefer `INNGEST_BASE_URL` env var)\n- **`logger`**: Custom logger instance (e.g. winston, pino) — enables `logger` in function context\n- **`middleware`**: Array of middleware (see **inngest-middleware** skill)\n\n### Typed Events with eventType()\n\n```typescript\nimport { Inngest, eventType } from \"inngest\";\nimport { z } from \"zod\";\n\nconst signupCompleted = eventType(\"user/signup.completed\", {\n  schema: z.object({\n    userId: z.string(),\n    email: z.string(),\n    plan: z.enum([\"free\", \"pro\"])\n  })\n});\n\nconst orderPlaced = eventType(\"order/placed\", {\n  schema: z.object({\n    orderId: z.string(),\n    amount: z.number()\n  })\n});\n\nexport const inngest = new Inngest({ id: \"my-app\" });\n\n// Use event types as triggers for full type safety:\ninngest.createFunction(\n  { id: \"handle-signup\", triggers: [signupCompleted] },\n  async ({ event }) => {\n    event.data.userId; /* typed as string */\n  }\n);\n\n// Use event types when sending events:\nawait inngest.send(\n  signupCompleted.create({\n    userId: \"user_123\",\n    email: \"user@example.com\",\n    plan: \"pro\"\n  })\n);\n```\n\n### Environment Variables Setup\n\nSet these environment variables in your `.env` file or deployment environment:\n\n```env\n# Required for production\nINNGEST_EVENT_KEY=your-event-key-here\nINNGEST_SIGNING_KEY=your-signing-key-here\n\n# Force dev mode during local development\nINNGEST_DEV=1\n\n# Optional - custom dev server URL (default: http://localhost:8288)\nINNGEST_BASE_URL=http://localhost:8288\n```\n\n**⚠️ Common Gotcha**: Never hardcode keys in your source code. Always use environment variables for `INNGEST_EVENT_KEY` and `INNGEST_SIGNING_KEY`.\n\n## Step 3: Choose Your Connection Mode\n\nInngest supports two connection modes:\n\n### Mode A: Serve Endpoint (HTTP)\n\nBest for serverless platforms (Vercel, Lambda, etc.) and existing APIs.\n\n### Mode B: Connect (WebSocket)\n\nBest for container runtimes (Kubernetes, Docker) and long-running processes.\n\n## Step 4A: Serving an Endpoint (HTTP Mode)\n\nCreate an API endpoint that exposes your functions to Inngest:\n\n```typescript\n// For Next.js App Router: src/app/api/inngest/route.ts\nimport { serve } from \"inngest/next\";\nimport { inngest } from \"../../../inngest/client\";\nimport { myFunction } from \"../../../inngest/functions\";\n\nexport const { GET, POST, PUT } = serve({\n  client: inngest,\n  functions: [myFunction]\n});\n```\n\n```typescript\n// For Next.js Pages Router: pages/api/inngest.ts\nimport { serve } from \"inngest/next\";\nimport { inngest } from \"../../inngest/client\";\nimport { myFunction } from \"../../inngest/functions\";\n\nexport default serve({\n  client: inngest,\n  functions: [myFunction]\n});\n```\n\n```typescript\n// For Express.js\nimport express from \"express\";\nimport { serve } from \"inngest/express\";\nimport { inngest } from \"./inngest/client\";\nimport { myFunction } from \"./inngest/functions\";\n\nconst app = express();\napp.use(express.json({ limit: \"10mb\" })); // Required for Inngest, increase limit for larger function state\n\napp.use(\n  \"/api/inngest\",\n  serve({\n    client: inngest,\n    functions: [myFunction]\n  })\n);\n```\n\n**🔧 Framework-Specific Notes**:\n\n- **Express**: Must use `express.json({ limit: \"10mb\" })` middleware to support larger function state.\n- **Fastify**: Use `fastifyPlugin` from `inngest/fastify`\n- **Cloudflare Workers**: Use `inngest/cloudflare`\n- **AWS Lambda**: Use `inngest/lambda`\n- For all other frameworks, check the `serve` reference here: https://www.inngest.com/docs-markdown/learn/serving-inngest-functions\n\n**⚠️ v4 Change:** Options like `signingKey`, `signingKeyFallback`, and `baseUrl` are now configured on the `Inngest` client constructor, not on `serve()`. The `serve()` function only accepts `client`, `functions`, and `streaming`.\n\n**⚠️ Common Gotcha**: Always use `/api/inngest` as your endpoint path. This enables automatic discovery. If you must use a different path, you'll need to configure discovery manually with the `-u` flag.\n\n## Step 4B: Connect as Worker (WebSocket Mode)\n\nFor long-running applications that maintain persistent connections:\n\n```typescript\n// src/worker.ts\nimport { connect } from \"inngest/connect\";\nimport { inngest } from \"./inngest/client\";\nimport { myFunction } from \"./inngest/functions\";\n\n(async () => {\n  const connection = await connect({\n    apps: [{ client: inngest, functions: [myFunction] }],\n    instanceId: process.env.HOSTNAME, // Unique worker identifier\n    maxWorkerConcurrency: 10 // Max concurrent steps\n  });\n\n  console.log(\"Worker connected:\", connection.state);\n\n  // Graceful shutdown handling\n  await connection.closed;\n  console.log(\"Worker shut down\");\n})();\n```\n\n**Requirements for Connect Mode**:\n\n- Node.js 22.4+ (or Deno 1.4+, Bun 1.1+) for WebSocket support\n- Long-running server environment (not serverless)\n- `INNGEST_SIGNING_KEY` and `INNGEST_EVENT_KEY` for production\n- Set the `appVersion` parameter on the `Inngest` client for production to support rolling deploys\n\n**v4 Connect Changes:**\n\n- **Worker thread isolation** is enabled by default — WebSocket connections execute in a worker thread to prevent event loop starvation. Set `isolateExecution: false` to use a single process (or `INNGEST_CONNECT_ISOLATE_EXECUTION=false`)\n- **`rewriteGatewayEndpoint`** callback has been replaced with the `gatewayUrl` string option (or `INNGEST_CONNECT_GATEWAY_URL` env var)\n\n## Step 5: Organizing with Apps\n\nAs your system grows, organize functions into logical apps:\n\n```typescript\n// User service\nconst userService = new Inngest({ id: \"user-service\" });\n\n// Payment service\nconst paymentService = new Inngest({ id: \"payment-service\" });\n\n// Email service\nconst emailService = new Inngest({ id: \"email-service\" });\n```\n\nEach app gets its own section in the Inngest dashboard and can be deployed independently. Use descriptive, hyphenated IDs that match your service architecture.\n\n**⚠️ Common Gotcha**: Changing an app's `id` creates a new app in Inngest. Keep IDs consistent across deployments.\n\n## Step 6: Local Development with inngest-cli\n\nStart the Inngest Dev Server for local development:\n\n```bash\n# Auto-discover your app on common ports/endpoints\nnpx --ignore-scripts=false inngest-cli@latest dev\n\n# Specify your app's URL manually\nnpx --ignore-scripts=false inngest-cli@latest dev -u http://localhost:3000/api/inngest\n\n# Custom port for dev server\nnpx --ignore-scripts=false inngest-cli@latest dev -p 9999\n\n# Disable auto-discovery\nnpx --ignore-scripts=false inngest-cli@latest dev --no-discovery -u http://localhost:3000/api/inngest\n\n# Multiple apps\nnpx --ignore-scripts=false inngest-cli@latest dev -u http://localhost:3000/api/inngest -u http://localhost:4000/api/inngest\n```\n\nThe dev server will be available at `http://localhost:8288` by default.\n\n### Configuration File (Optional)\n\nCreate `inngest.json` for complex setups:\n\n```json\n{\n  \"sdk-url\": [\n    \"http://localhost:3000/api/inngest\",\n    \"http://localhost:4000/api/inngest\"\n  ],\n  \"port\": 8289,\n  \"no-discovery\": true\n}\n```\n\n## Environment-Specific Setup\n\n### Local Development\n\n```env\nINNGEST_DEV=1\n# No keys required in dev mode\n```\n\n### Production\n\n```env\nINNGEST_EVENT_KEY=evt_your_production_event_key\nINNGEST_SIGNING_KEY=signkey_your_production_signing_key\n```\n\n### Custom Dev Server Port\n\n```env\nINNGEST_DEV=1\nINNGEST_BASE_URL=http://localhost:9999\n```\n\nIf your app runs on a non-standard port (not 3000), make sure the dev server can reach it by specifying the URL with `-u` flag.\n\n## Common Issues & Solutions\n\n**Port Conflicts**: If port 8288 is in use, specify a different port: `-p 9999`\n\n**Auto-discovery Not Working**: Use manual URL specification: `-u http://localhost:YOUR_PORT/api/inngest`\n\n**Signature Verification Errors**: Ensure `INNGEST_SIGNING_KEY` is set correctly in production\n\n**WebSocket Connection Issues**: Verify Node.js version 22.4+ for connect mode\n\n**Docker Development**: Use `host.docker.internal` for app URLs when running dev server in Docker\n\n## Next Steps\n\n1. Create your first Inngest function with `inngest.createFunction()`\n2. Test functions using the dev server's \"Invoke\" button\n3. Send events with `inngest.send()` to trigger functions\n4. Deploy to production with proper environment variables\n5. See **inngest-middleware** for adding logging, error tracking, and other cross-cutting concerns\n6. Monitor functions in the Inngest dashboard\n\nThe dev server automatically reloads when you change functions, making development fast and iterative.","tags":["inngest","setup","skills","agent-skill-repository","agent-skills","agentic-skills","ai-agents","claude-code-skills","cursor-skills","openclaw-skills"],"capabilities":["skill","source-inngest","skill-inngest-setup","topic-agent-skill-repository","topic-agent-skills","topic-agentic-skills","topic-ai-agents","topic-claude-code-skills","topic-cursor-skills","topic-openclaw-skills"],"categories":["inngest-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/inngest/inngest-skills/inngest-setup","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add inngest/inngest-skills","source_repo":"https://github.com/inngest/inngest-skills","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 17 github stars · SKILL.md body (10,282 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T01:02:09.270Z","embedding":null,"createdAt":"2026-04-18T23:06:58.984Z","updatedAt":"2026-04-23T01:02:09.270Z","lastSeenAt":"2026-04-23T01:02:09.270Z","tsv":"'/../../inngest/client':563 '/../../inngest/functions':567 '/../inngest/client':591 '/../inngest/functions':595 '/api/inngest':639,718 '/docs-markdown/learn/serving-inngest-functions':685 '/inngest/client':617,770 '/inngest/functions':621,774 '/llms.txt)':72 '1':104,181,261,457,1143,1175,1275 '1.1':818 '1.4':816 '10':791 '10mb':628,654 '123':410 '18':86 '2':134,1283 '22.4':88,813,1256 '3':493,1293 '3000':1192 '3000/api/inngest':1045,1082,1097,1125 '4':1301 '4000/api/inngest':1100,1127 '4a':534 '4b':746 '5':906,1309 '6':993,1325 '8288':465,470,1109,1215 '8289':1129 '9999':1062,1180,1224 'accept':709 'across':81,990 'ad':1315 'add':123,127,131 'alway':480,716 'amount':366 'api':300,517,542 'app':165,209,217,376,553,623,780,909,918,951,978,984,1013,1029,1084,1183,1265 'app.use':625,638 'appli':80 'applic':170,756 'appvers':840 'architectur':973 'array':322 'async':393,775 'auto':1010,1065,1226 'auto-discov':1009 'auto-discoveri':1064,1225 'automat':725,1335 'avail':1106 'aw':670 'await':405,778,802 'b':519 'base':301,305,467,1177 'baseurl':297,693 'bash':117,1008 'best':508,522 'branch':238 'bun':102,130,817 'button':1292 'callback':889 'chang':687,854,976,1339 'check':678 'choos':494 'cli':999,1024,1040,1058,1074,1092 'client':16,48,138,142,280,574,599,641,700,710,781,845 'cloud':198,246,252 'cloudflar':666 'code':479 'codebas':150 'common':471,714,974,1015,1208 'complex':1118 'concept':79 'concern':1324 'concurr':793 'configur':17,49,201,696,738,1112 'conflict':1212 'connect':23,50,496,501,520,747,760,764,777,779,797,810,853,863,884,900,1251,1258 'connection.closed':803 'connection.state':798 'consist':989 'console.log':795,804 'const':158,344,358,369,569,622,776,922,932,942 'constructor':701 'contain':524 'context':320 'core':78 'correct':1247 'cover':46 'creat':14,135,139,540,981,1115,1276 'cross':1322 'cross-cut':1321 'custom':298,310,459,1046,1168 'cut':1323 'dashboard':959,1331 'default':196,250,463,597,861,1111 'deno':815 'deploy':427,851,963,991,1302 'descript':966 'dev':31,180,242,260,450,456,460,1003,1026,1042,1049,1060,1076,1094,1102,1142,1148,1169,1174,1196,1269,1288,1333 'develop':54,174,264,454,995,1007,1139,1261,1342 'differ':732,1221 'disabl':1063 'discov':1011 'discoveri':726,739,1066,1079,1132,1227 'docker':527,1260,1272 'document':69 'e.g':313 'ecommend':90 'email':352,411,940,948 'email-servic':947 'emailservic':943 'enabl':316,724,859 'endpoint':21,506,537,543,721 'ensur':1241 'env':182,232,234,274,295,307,424,429,903,1140,1151,1172 'environ':18,235,239,415,420,428,482,826,1135,1307 'environment-specif':1134 'error':1240,1317 'etc':514 'event':223,227,230,331,378,394,400,404,434,438,486,834,871,1153,1158,1295 'event.data.userid':395 'eventkey':222 'eventtyp':333,337,346,360 'evt':1155 'execut':864,886 'exist':516 'export':157,368,568,596 'expos':545 'express':607,609,624,649 'express.js':605 'express.json':626,652 'fallback':284,294 'fals':248,876,887,1021,1037,1055,1071,1089 'fast':1343 'fastifi':661 'fastifyplugin':663 'file':143,425,1113 'first':1278 'flag':744,1207 'focus':58 'forc':241,449 'framework':646,677 'framework-specif':645 'free':356 'full':383 'function':319,547,576,601,636,643,659,707,711,783,915,1280,1285,1300,1327,1340 'gateway':901 'gatewayurl':895 'get':570,952 'go':64 'gotcha':472,715,975 'grace':799 'grow':913 'guidanc':77 'handl':389,801 'handle-signup':388 'hardcod':474 'host.docker.internal':1263 'http':507,538 'hyphen':171,212,967 'id':162,203,373,387,926,936,946,968,980,988 'identifi':167,206,789 'ignor':1019,1035,1053,1069,1087 'ignore-script':1018,1034,1052,1068,1086 'import':147,153,335,340,556,560,564,584,588,592,606,610,614,618,763,767,771 'increas':632 'independ':964 'inngest':2,6,33,39,68,107,111,120,124,128,132,137,154,156,159,161,179,190,229,259,271,291,299,304,327,336,339,370,372,433,441,455,466,485,489,498,549,561,575,589,600,615,631,642,699,768,782,829,833,844,883,899,925,935,945,958,986,998,1002,1023,1039,1057,1073,1091,1141,1152,1160,1173,1176,1242,1279,1312,1330 'inngest-c':997,1022,1038,1056,1072,1090 'inngest-middlewar':326,1311 'inngest-setup':1 'inngest.createfunction':386,1282 'inngest.json':1116 'inngest.send':406,1297 'inngest/cloudflare':669 'inngest/connect':766 'inngest/express':613 'inngest/fastify':665 'inngest/lambda':673 'inngest/next':559,587 'instal':11,47,105,109,119 'instanc':312 'instanceid':785 'invok':1291 'isdev':186,240,256 'isol':857,885 'isolateexecut':875 'issu':1209,1252 'iter':1345 'json':1120 'keep':987 'key':192,200,224,231,267,273,286,288,293,435,439,443,447,475,487,491,831,835,1145,1154,1159,1162,1167,1244 'kubernet':526 'lambda':513,671 'languag':75,83 'language-specif':74 'larger':635,658 'latest':1025,1041,1059,1075,1093 'like':214,689 'limit':627,633,653 'll':146,735 'local':30,53,263,453,994,1006,1138 'localhost':464,469,1044,1081,1096,1099,1108,1124,1126,1179,1235 'log':1316 'logger':309,311,317 'logic':917 'long':530,754,823 'long-run':529,753,822 'loop':872 'maintain':758 'make':1193,1341 'manag':97 'manual':740,1032,1231 'match':970 'max':792 'maxworkerconcurr':790 'middlewar':321,324,328,655,1313 'mode':51,199,243,247,253,451,497,502,503,518,539,751,811,1149,1259 'monitor':1326 'move':276 'multipl':1083 'must':176,650,729 'my-app':163,215,374 'myfunct':565,577,593,602,619,644,772,784 'name':236 'need':736 'never':473 'new':160,371,924,934,944,983 'next':1273 'next.js':552,580 'no-discoveri':1077,1130 'node.js':85,87,812,1254 'non':1188 'non-standard':1187 'note':648 'npm':98,112,118 'npx':1017,1033,1051,1067,1085 'option':202,458,688,897,1114 'order/placed':361 'orderid':364 'orderplac':359 'organ':907,914 'p':1061,1223 'packag':96,113 'page':581 'pages/api/inngest.ts':583 'paramet':841 'path':722,733 'payment':930,938 'payment-servic':937 'paymentservic':933 'persist':759 'pino':315 'plan':354,413 'platform':511 'pnpm':100,126 'port':1047,1128,1171,1190,1211,1214,1222 'port/api/inngest':1237 'ports/endpoints':1016 'post':571 'prefer':228,270,290,303 'prerequisit':84 'prevent':870 'pro':357,414 'process':532,881 'process.env.hostname':786 'product':189,269,432,837,847,1150,1157,1165,1249,1304 'project':10,43,95,116 'proper':1306 'put':572 'python':62 'r':89 'reach':1199 'refer':65,681 'reload':1336 'replac':892 'requir':194,204,430,629,808,1146 'rewritegatewayendpoint':888 'roll':850 'rotat':289 'router':554,582 'run':28,531,755,824,1184,1268 'runtim':525 'safeti':385 'schema':348,362 'scratch':45 'script':1020,1036,1054,1070,1088 'sdk':13,108,1122 'sdk-url':1121 'section':955 'see':325,1310 'send':226,403,1294 'serv':20,278,505,535,557,573,585,598,611,640,680,704,706 'server':32,461,825,1004,1050,1103,1170,1197,1270,1289,1334 'serverless':510,828 'servic':221,921,929,931,939,941,949,972 'set':4,37,177,255,418,838,874,1246 'setup':3,34,417,1119,1137 'share':141 'shut':806 'shutdown':800 'sign':191,266,272,285,292,442,446,490,830,1161,1166,1243 'signatur':1238 'signingkey':265,690 'signingkeyfallback':283,691 'signkey':1163 'signup':390 'signupcomplet':345,392 'signupcompleted.create':407 'singl':880 'skill':36,56,329 'skill-inngest-setup' 'slug':172,213 'solut':1210 'sourc':478 'source-inngest' 'specif':76,647,1136,1233 'specifi':1027,1202,1219 'src/app/api/inngest/route.ts':555 'src/inngest/client.ts':152 'src/worker.ts':762 'standard':1189 'start':1000 'starvat':873 'state':637,660 'step':103,133,492,533,745,794,905,992,1274 'stream':713 'string':398,896 'support':93,499,657,821,849 'sure':1194 'system':912 'test':1284 'thread':856,868 'throughout':148 'topic-agent-skill-repository' 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agents' 'topic-claude-code-skills' 'topic-cursor-skills' 'topic-openclaw-skills' 'track':1318 'trigger':381,391,1299 'true':187,244,257,1133 'two':500 'type':330,379,384,396,401 'typescript':9,42,60,94,151,334,550,578,603,761,919 'u':743,1043,1080,1095,1098,1206,1234 'uniqu':166,205,787 'url':302,306,462,468,902,1031,1123,1178,1204,1232,1266 'use':185,210,377,399,481,651,662,668,672,717,730,878,965,1218,1230,1262,1286 'user':220,409,920,928 'user-servic':219,927 'user/signup.completed':347 'user@example.com':412 'userid':350,408 'userservic':923 'v4':195,249,282,686,852 'var':183,233,275,296,308,904 'variabl':19,416,421,483,1308 'vercel':512 'verif':1239 'verifi':1253 'version':1255 'websocket':92,521,750,820,862,1250 'winston':314 'work':1229 'worker':26,667,749,788,796,805,855,867 'www.inngest.com':71,684 'www.inngest.com/docs-markdown/learn/serving-inngest-functions':683 'www.inngest.com/llms.txt)':70 'yarn':99,122 'your-event-key-her':436 'your-signing-key-her':444 'z':341 'z.enum':355 'z.number':367 'z.object':349,363 'z.string':351,353,365 'zod':343","prices":[{"id":"9cb25418-19fa-4fc3-b968-4ce778d44f79","listingId":"9f3f0fc0-9ea6-4694-8818-402d50d99a0b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"inngest","category":"inngest-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:06:58.984Z"}],"sources":[{"listingId":"9f3f0fc0-9ea6-4694-8818-402d50d99a0b","source":"github","sourceId":"inngest/inngest-skills/inngest-setup","sourceUrl":"https://github.com/inngest/inngest-skills/tree/main/skills/inngest-setup","isPrimary":false,"firstSeenAt":"2026-04-18T23:06:58.984Z","lastSeenAt":"2026-04-23T01:02:09.270Z"}],"details":{"listingId":"9f3f0fc0-9ea6-4694-8818-402d50d99a0b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"inngest","slug":"inngest-setup","github":{"repo":"inngest/inngest-skills","stars":17,"topics":["agent-skill-repository","agent-skills","agentic-skills","ai-agents","claude-code-skills","cursor-skills","openclaw-skills"],"license":"other","html_url":"https://github.com/inngest/inngest-skills","pushed_at":"2026-04-20T23:35:15Z","description":"Agent Skills for building with Inngest","skill_md_sha":"22b085c5cb0c9ccb7969e5bf78938bcb1a24caa3","skill_md_path":"skills/inngest-setup/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/inngest/inngest-skills/tree/main/skills/inngest-setup"},"layout":"multi","source":"github","category":"inngest-skills","frontmatter":{"name":"inngest-setup","description":"Set up Inngest in a TypeScript project. Install the SDK, create a client, configure environment variables, serve endpoints or connect as a worker, and run the local dev server."},"skills_sh_url":"https://skills.sh/inngest/inngest-skills/inngest-setup"},"updatedAt":"2026-04-23T01:02:09.270Z"}}