[{"data":1,"prerenderedAt":1004},["ShallowReactive",2],{"docs:navigation":3,"docs:page:\u002Fdocs\u002Fdeployment\u002Fagents":115},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Introduction","\u002Fdocs","docs\u002F1.index",[9,11,16,21,38,95,110],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-house",{"title":12,"path":13,"stem":14,"icon":15},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F2.quickstart","i-lucide-rocket",{"title":17,"path":18,"stem":19,"icon":20},"Essentials","\u002Fdocs\u002Fconfiguration","docs\u002F3.configuration","i-lucide-book-open",{"title":22,"path":23,"stem":24,"children":25,"icon":27},"Authentication","\u002Fdocs\u002Fauthentication","docs\u002F4.authentication\u002Findex",[26,28,33],{"title":22,"path":23,"stem":24,"icon":27},"i-lucide-shield-check",{"title":29,"path":30,"stem":31,"icon":32},"Protect User Data","\u002Fdocs\u002Fauthentication\u002Fuser-data","docs\u002F4.authentication\u002F1.user-data","i-lucide-user-lock",{"title":34,"path":35,"stem":36,"icon":37},"Two-Factor Verification","\u002Fdocs\u002Fauthentication\u002Ftwo-factor","docs\u002F4.authentication\u002F2.two-factor","i-lucide-key-round",{"title":39,"path":40,"stem":41,"children":42,"icon":44},"Deployment","\u002Fdocs\u002Fdeployment","docs\u002F5.deployment\u002Findex",[43,45,50,55,60,65,70,75,80,85,90],{"title":39,"path":40,"stem":41,"icon":44},"i-lucide-cloud-upload",{"title":46,"path":47,"stem":48,"icon":49},"Deploy to Cloudflare","\u002Fdocs\u002Fdeployment\u002Fcloudflare","docs\u002F5.deployment\u002F1.cloudflare","i-simple-icons-cloudflare",{"title":51,"path":52,"stem":53,"icon":54},"Platform Support","\u002Fdocs\u002Fdeployment\u002Fsupport","docs\u002F5.deployment\u002F10.support","i-lucide-list-checks",{"title":56,"path":57,"stem":58,"icon":59},"Deploy to Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F5.deployment\u002F2.vercel","i-simple-icons-vercel",{"title":61,"path":62,"stem":63,"icon":64},"Deploy to Azure","\u002Fdocs\u002Fdeployment\u002Fazure","docs\u002F5.deployment\u002F3.azure","i-simple-icons-microsoftazure",{"title":66,"path":67,"stem":68,"icon":69},"Switch Hosts","\u002Fdocs\u002Fdeployment\u002Fswitch-hosts","docs\u002F5.deployment\u002F4.switch-hosts","i-lucide-arrow-right-left",{"title":71,"path":72,"stem":73,"icon":74},"Database and File Storage","\u002Fdocs\u002Fdeployment\u002Fdata-services","docs\u002F5.deployment\u002F5.data-services","i-lucide-database",{"title":76,"path":77,"stem":78,"icon":79},"Domains and Secrets","\u002Fdocs\u002Fdeployment\u002Fsettings","docs\u002F5.deployment\u002F6.settings","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Troubleshoot Deployment","\u002Fdocs\u002Fdeployment\u002Ftroubleshooting","docs\u002F5.deployment\u002F7.troubleshooting","i-lucide-wrench",{"title":86,"path":87,"stem":88,"icon":89},"Deploy Agents","\u002Fdocs\u002Fdeployment\u002Fagents","docs\u002F5.deployment\u002F8.agents","i-lucide-bot",{"title":91,"path":92,"stem":93,"icon":94},"Deploy Automations","\u002Fdocs\u002Fdeployment\u002Fautomations","docs\u002F5.deployment\u002F9.automations","i-lucide-workflow",{"title":96,"path":97,"stem":98,"children":99,"icon":101},"Connect Accounts","\u002Fdocs\u002Fconnect","docs\u002F6.connect\u002Findex",[100,102,106],{"title":96,"path":97,"stem":98,"icon":101},"i-lucide-plug",{"title":103,"path":104,"stem":105,"icon":37},"Connection Credentials","\u002Fdocs\u002Fconnect\u002Fcredentials","docs\u002F6.connect\u002F1.credentials",{"title":107,"path":108,"stem":109,"icon":84},"Connect MCP Servers","\u002Fdocs\u002Fconnect\u002Fmcp","docs\u002F6.connect\u002F2.mcp",{"title":111,"path":112,"stem":113,"icon":114},"Project Reference","\u002Fdocs\u002Freference","docs\u002F7.reference","i-lucide-terminal",{"page":116,"surround":999},{"id":117,"title":86,"body":118,"description":992,"extension":993,"links":994,"meta":995,"navigation":996,"path":87,"seo":997,"stem":88,"__hash__":998},"docs\u002Fdocs\u002F5.deployment\u002F8.agents.md",{"type":119,"value":120,"toc":985},"minimark",[121,134,137,142,145,233,244,247,547,558,562,565,608,626,629,665,680,694,697,724,731,749,753,756,801,808,871,906,910,937,941,952,964,981],[122,123,124,125,129,130,133],"p",{},"Declare one agent host in ",[126,127,128],"code",{},"cloud.config.ts",". The Nuxt module binds\n",[126,131,132],{},"useCloudConfigAgents(event)"," to your selected cloud's native runtime. Local\ndevelopment uses an in-process adapter; production requires durable execution.",[122,135,136],{},"This guide covers the automatic Nuxt deployment path. Standalone Cloudflare\nWorkers export their Agent class from their own Worker entry. Automatic Vercel\nagent builds currently require Nuxt; other frameworks must integrate the\nWorkflow compiler and agent platform themselves.",[138,139,141],"h2",{"id":140},"_1-declare-the-host","1. Declare the Host",[122,143,144],{},"Add the host to your existing backend config:",[146,147,152],"pre",{"className":148,"code":149,"filename":128,"language":150,"meta":151,"style":151},"language-ts shiki shiki-themes github-light github-light github-dark","deploy: {\n  target: 'vercel', \u002F\u002F 'cloudflare' | 'vercel' | 'azure'\n  agent: { entry: 'server\u002Fcloudconfig\u002Fagents.ts' },\n  secrets: ['OPENAI_API_KEY', 'OPENAI_AGENT_MODEL'],\n},\n","ts","",[126,153,154,167,187,207,227],{"__ignoreMap":151},[155,156,159,163],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"snPdu","deploy",[155,164,166],{"class":165},"sxrX7",": {\n",[155,168,170,173,176,180,183],{"class":157,"line":169},2,[155,171,172],{"class":161},"  target",[155,174,175],{"class":165},": ",[155,177,179],{"class":178},"sIIMD","'vercel'",[155,181,182],{"class":165},", ",[155,184,186],{"class":185},"sCsY4","\u002F\u002F 'cloudflare' | 'vercel' | 'azure'\n",[155,188,190,193,196,199,201,204],{"class":157,"line":189},3,[155,191,192],{"class":161},"  agent",[155,194,195],{"class":165},": { ",[155,197,198],{"class":161},"entry",[155,200,175],{"class":165},[155,202,203],{"class":178},"'server\u002Fcloudconfig\u002Fagents.ts'",[155,205,206],{"class":165}," },\n",[155,208,210,213,216,219,221,224],{"class":157,"line":209},4,[155,211,212],{"class":161},"  secrets",[155,214,215],{"class":165},": [",[155,217,218],{"class":178},"'OPENAI_API_KEY'",[155,220,182],{"class":165},[155,222,223],{"class":178},"'OPENAI_AGENT_MODEL'",[155,225,226],{"class":165},"],\n",[155,228,230],{"class":157,"line":229},5,[155,231,232],{"class":165},"},\n",[122,234,235,236,239,240,243],{},"Supply the API key and your chosen model ID in the ignored ",[126,237,238],{},".env"," file or CI\nenvironment. Keep provider keys on the server. The legacy ",[126,241,242],{},"deploy.agents","\ndeclaration also works, but use one host for all saved agents and sessions.",[122,245,246],{},"This minimal host uses a fixed definition with no external tools:",[146,248,251],{"className":148,"code":249,"filename":250,"language":150,"meta":151,"style":151},"import { createAgentDefinition } from '@cloudconfig\u002Fcore\u002Fagents'\nimport { defineAgentHost } from '@cloudconfig\u002Fcore\u002Fagents\u002Fruns'\n\nexport default defineAgentHost({\n  async resolve(_request, env) {\n    const key = env?.OPENAI_API_KEY\n    const model = env?.OPENAI_AGENT_MODEL\n    if (typeof key !== 'string' || typeof model !== 'string') {\n      throw new Error('Configure OPENAI_API_KEY and OPENAI_AGENT_MODEL.')\n    }\n    return {\n      agent: {\n        ...createAgentDefinition('Assistant'),\n        provider: 'openai',\n        model,\n        status: 'active',\n      },\n      keys: { openai: key, anthropic: '', google: '' },\n      tools: [],\n      callTool: async () => null,\n    }\n  },\n})\n","server\u002Fcloudconfig\u002Fagents.ts",[126,252,253,268,280,286,300,323,342,357,393,413,419,428,434,451,463,469,480,486,502,508,530,535,541],{"__ignoreMap":151},[155,254,255,259,262,265],{"class":157,"line":158},[155,256,258],{"class":257},"s8jYJ","import",[155,260,261],{"class":165}," { createAgentDefinition } ",[155,263,264],{"class":257},"from",[155,266,267],{"class":178}," '@cloudconfig\u002Fcore\u002Fagents'\n",[155,269,270,272,275,277],{"class":157,"line":169},[155,271,258],{"class":257},[155,273,274],{"class":165}," { defineAgentHost } ",[155,276,264],{"class":257},[155,278,279],{"class":178}," '@cloudconfig\u002Fcore\u002Fagents\u002Fruns'\n",[155,281,282],{"class":157,"line":189},[155,283,285],{"emptyLinePlaceholder":284},true,"\n",[155,287,288,291,294,297],{"class":157,"line":209},[155,289,290],{"class":257},"export",[155,292,293],{"class":257}," default",[155,295,296],{"class":161}," defineAgentHost",[155,298,299],{"class":165},"({\n",[155,301,302,305,308,311,315,317,320],{"class":157,"line":229},[155,303,304],{"class":257},"  async",[155,306,307],{"class":161}," resolve",[155,309,310],{"class":165},"(",[155,312,314],{"class":313},"sP4rz","_request",[155,316,182],{"class":165},[155,318,319],{"class":313},"env",[155,321,322],{"class":165},") {\n",[155,324,326,329,333,336,339],{"class":157,"line":325},6,[155,327,328],{"class":257},"    const",[155,330,332],{"class":331},"sBjJW"," key",[155,334,335],{"class":257}," =",[155,337,338],{"class":165}," env?.",[155,340,341],{"class":331},"OPENAI_API_KEY\n",[155,343,345,347,350,352,354],{"class":157,"line":344},7,[155,346,328],{"class":257},[155,348,349],{"class":331}," model",[155,351,335],{"class":257},[155,353,338],{"class":165},[155,355,356],{"class":331},"OPENAI_AGENT_MODEL\n",[155,358,360,363,366,369,372,375,378,381,384,387,389,391],{"class":157,"line":359},8,[155,361,362],{"class":257},"    if",[155,364,365],{"class":165}," (",[155,367,368],{"class":257},"typeof",[155,370,371],{"class":165}," key ",[155,373,374],{"class":257},"!==",[155,376,377],{"class":178}," 'string'",[155,379,380],{"class":257}," ||",[155,382,383],{"class":257}," typeof",[155,385,386],{"class":165}," model ",[155,388,374],{"class":257},[155,390,377],{"class":178},[155,392,322],{"class":165},[155,394,396,399,402,405,407,410],{"class":157,"line":395},9,[155,397,398],{"class":257},"      throw",[155,400,401],{"class":257}," new",[155,403,404],{"class":161}," Error",[155,406,310],{"class":165},[155,408,409],{"class":178},"'Configure OPENAI_API_KEY and OPENAI_AGENT_MODEL.'",[155,411,412],{"class":165},")\n",[155,414,416],{"class":157,"line":415},10,[155,417,418],{"class":165},"    }\n",[155,420,422,425],{"class":157,"line":421},11,[155,423,424],{"class":257},"    return",[155,426,427],{"class":165}," {\n",[155,429,431],{"class":157,"line":430},12,[155,432,433],{"class":165},"      agent: {\n",[155,435,437,440,443,445,448],{"class":157,"line":436},13,[155,438,439],{"class":257},"        ...",[155,441,442],{"class":161},"createAgentDefinition",[155,444,310],{"class":165},[155,446,447],{"class":178},"'Assistant'",[155,449,450],{"class":165},"),\n",[155,452,454,457,460],{"class":157,"line":453},14,[155,455,456],{"class":165},"        provider: ",[155,458,459],{"class":178},"'openai'",[155,461,462],{"class":165},",\n",[155,464,466],{"class":157,"line":465},15,[155,467,468],{"class":165},"        model,\n",[155,470,472,475,478],{"class":157,"line":471},16,[155,473,474],{"class":165},"        status: ",[155,476,477],{"class":178},"'active'",[155,479,462],{"class":165},[155,481,483],{"class":157,"line":482},17,[155,484,485],{"class":165},"      },\n",[155,487,489,492,495,498,500],{"class":157,"line":488},18,[155,490,491],{"class":165},"      keys: { openai: key, anthropic: ",[155,493,494],{"class":178},"''",[155,496,497],{"class":165},", google: ",[155,499,494],{"class":178},[155,501,206],{"class":165},[155,503,505],{"class":157,"line":504},19,[155,506,507],{"class":165},"      tools: [],\n",[155,509,511,514,516,519,522,525,528],{"class":157,"line":510},20,[155,512,513],{"class":161},"      callTool",[155,515,175],{"class":165},[155,517,518],{"class":257},"async",[155,520,521],{"class":165}," () ",[155,523,524],{"class":257},"=>",[155,526,527],{"class":331}," null",[155,529,462],{"class":165},[155,531,533],{"class":157,"line":532},21,[155,534,418],{"class":165},[155,536,538],{"class":157,"line":537},22,[155,539,540],{"class":165},"  },\n",[155,542,544],{"class":157,"line":543},23,[155,545,546],{"class":165},"})\n",[122,548,549,550,553,554,557],{},"For saved agents, implement ",[126,551,552],{},"resolve"," using your application services: load the\ndefinition for ",[126,555,556],{},"request.scope",", verify ownership, and return the currently\ngranted tools. It runs again on each continuation. Use explicit portable server\nimports in the host: Azure executes it in a Function app outside Nuxt, where\nNuxt auto-imports, request events, and aliases are unavailable.",[138,559,561],{"id":560},"_2-install-the-native-runtime","2. Install the Native Runtime",[122,563,564],{},"For Cloudflare:",[146,566,570],{"className":567,"code":568,"language":569,"meta":151,"style":151},"language-bash shiki shiki-themes github-light github-light github-dark","pnpm add agents@0.27.0\npnpm add -D wrangler\npnpm exec wrangler login\n","bash",[126,571,572,583,595],{"__ignoreMap":151},[155,573,574,577,580],{"class":157,"line":158},[155,575,576],{"class":161},"pnpm",[155,578,579],{"class":178}," add",[155,581,582],{"class":178}," agents@0.27.0\n",[155,584,585,587,589,592],{"class":157,"line":169},[155,586,576],{"class":161},[155,588,579],{"class":178},[155,590,591],{"class":331}," -D",[155,593,594],{"class":178}," wrangler\n",[155,596,597,599,602,605],{"class":157,"line":189},[155,598,576],{"class":161},[155,600,601],{"class":178}," exec",[155,603,604],{"class":178}," wrangler",[155,606,607],{"class":178}," login\n",[122,609,610,611,182,614,617,618,621,622,625],{},"CloudConfig generates the Agent export in Nuxt's Worker entry, reconciles the\nDurable Object binding, and adds its SQLite migration. Defaults are\n",[126,612,613],{},"CloudconfigAgent",[126,615,616],{},"CLOUDCONFIG_AGENTS",", and migration tag\n",[126,619,620],{},"cloudconfig-agents-v1",". Override them under ",[126,623,624],{},"deploy.agent.cloudflare"," when\nadopting existing resources. Keep the class identity and migration tag stable.\nRuns, checkpoints, tool receipts, and schedules live in the Agent's SQLite\nstorage, independently of D1 application tables. Alarms continue work after the\nHTTP request ends and recover queued or running work after eviction.",[122,627,628],{},"For Vercel:",[146,630,632],{"className":567,"code":631,"language":569,"meta":151,"style":151},"pnpm add workflow@^5.2.2\npnpm add -D vercel\npnpm exec vercel login\n",[126,633,634,643,654],{"__ignoreMap":151},[155,635,636,638,640],{"class":157,"line":158},[155,637,576],{"class":161},[155,639,579],{"class":178},[155,641,642],{"class":178}," workflow@^5.2.2\n",[155,644,645,647,649,651],{"class":157,"line":169},[155,646,576],{"class":161},[155,648,579],{"class":178},[155,650,591],{"class":331},[155,652,653],{"class":178}," vercel\n",[155,655,656,658,660,663],{"class":157,"line":189},[155,657,576],{"class":161},[155,659,601],{"class":178},[155,661,662],{"class":178}," vercel",[155,664,607],{"class":178},[122,666,667,668,671,672,675,676,679],{},"The Nuxt module configures the official ",[126,669,670],{},"workflow\u002Fnuxt"," integration and writes\ncompiler input under ",[126,673,674],{},".cloudconfig\u002Fagent-workflows.ts"," and ",[126,677,678],{},"agent-steps.ts",".\nThe build emits Vercel Workflow functions and queue triggers. Workflow steps\nexecute one new model or tool call per activity; durable sleeps suspend\napprovals and schedules without holding a Function open.",[122,681,682,683,686,687,675,690,693],{},"The configured application database also stores private agent records,\nreceipts, and concurrency leases in ",[126,684,685],{},"_cloudconfig_agent_records",". With Vercel's\nTurso default, provide ",[126,688,689],{},"TURSO_DATABASE_URL",[126,691,692],{},"TURSO_AUTH_TOKEN",". Workflow\nhistory contains scope\u002Frun IDs and activity results; provider keys stay in step\nenvironment variables. Schedules start a continuation run after each occurrence\nto bound their execution history.",[122,695,696],{},"For Azure:",[146,698,700],{"className":567,"code":699,"language":569,"meta":151,"style":151},"pnpm add @azure\u002Ffunctions@^4.16.5 durable-functions@^3.6.0 @azure\u002Fstorage-blob@^12\naz login\n",[126,701,702,717],{"__ignoreMap":151},[155,703,704,706,708,711,714],{"class":157,"line":158},[155,705,576],{"class":161},[155,707,579],{"class":178},[155,709,710],{"class":178}," @azure\u002Ffunctions@^4.16.5",[155,712,713],{"class":178}," durable-functions@^3.6.0",[155,715,716],{"class":178}," @azure\u002Fstorage-blob@^12\n",[155,718,719,722],{"class":157,"line":169},[155,720,721],{"class":161},"az",[155,723,607],{"class":178},[122,725,726,727,730],{},"CloudConfig builds and packages a separate Node.js 22 Durable Functions app,\nprovisions a Storage account with private Blob storage, and reuses the web app's\nApp Service plan. The Storage account holds orchestration state and agent\nreceipts. Native orchestration activities perform model\u002Ftool calls, external\nevents resume approvals, and durable timers drive schedules. Recurring schedules\nuse ",[126,728,729],{},"continueAsNew"," to bound history.",[122,732,733,734,737,738,741,742,675,745,748],{},"Deployment uploads the Function code and server settings before publishing the\nweb app. It supplies ",[126,735,736],{},"CLOUDCONFIG_AZURE_AGENT_ENDPOINT"," and\n",[126,739,740],{},"CLOUDCONFIG_AZURE_AGENT_KEY"," to the web app automatically. The Function endpoint\nrequires a Function key; the browser never receives it. Optional\n",[126,743,744],{},"deploy.azure.agents.appName",[126,746,747],{},"storageAccount"," select existing resource\nnames. Preserve these names to retain execution state between deployments.",[138,750,752],{"id":751},"_3-deploy-and-call-the-agent","3. Deploy and Call the Agent",[122,754,755],{},"Generate application migrations, check the plan, and deploy:",[146,757,759],{"className":567,"code":758,"language":569,"meta":151,"style":151},"pnpm exec cloudconfig db generate\npnpm exec cloudconfig deploy --dry-run\npnpm exec cloudconfig deploy\n",[126,760,761,776,790],{"__ignoreMap":151},[155,762,763,765,767,770,773],{"class":157,"line":158},[155,764,576],{"class":161},[155,766,601],{"class":178},[155,768,769],{"class":178}," cloudconfig",[155,771,772],{"class":178}," db",[155,774,775],{"class":178}," generate\n",[155,777,778,780,782,784,787],{"class":157,"line":169},[155,779,576],{"class":161},[155,781,601],{"class":178},[155,783,769],{"class":178},[155,785,786],{"class":178}," deploy",[155,788,789],{"class":331}," --dry-run\n",[155,791,792,794,796,798],{"class":157,"line":189},[155,793,576],{"class":161},[155,795,601],{"class":178},[155,797,769],{"class":178},[155,799,800],{"class":178}," deploy\n",[122,802,803,804,807],{},"Inside an authenticated server route, derive ",[126,805,806],{},"scope"," from the session and verify\nthe caller owns the requested agent and workspace. Then call the platform:",[146,809,811],{"className":148,"code":810,"language":150,"meta":151,"style":151},"const runs = await useCloudConfigAgents(event).runs(scope)\nawait runs.start({ runId, scope, payload, instructions })\nconst result = await runs.status(runId)\n",[126,812,813,838,852],{"__ignoreMap":151},[155,814,815,818,821,823,826,829,832,835],{"class":157,"line":158},[155,816,817],{"class":257},"const",[155,819,820],{"class":331}," runs",[155,822,335],{"class":257},[155,824,825],{"class":257}," await",[155,827,828],{"class":161}," useCloudConfigAgents",[155,830,831],{"class":165},"(event).",[155,833,834],{"class":161},"runs",[155,836,837],{"class":165},"(scope)\n",[155,839,840,843,846,849],{"class":157,"line":169},[155,841,842],{"class":257},"await",[155,844,845],{"class":165}," runs.",[155,847,848],{"class":161},"start",[155,850,851],{"class":165},"({ runId, scope, payload, instructions })\n",[155,853,854,856,859,861,863,865,868],{"class":157,"line":189},[155,855,817],{"class":257},[155,857,858],{"class":331}," result",[155,860,335],{"class":257},[155,862,825],{"class":257},[155,864,845],{"class":165},[155,866,867],{"class":161},"status",[155,869,870],{"class":165},"(runId)\n",[122,872,873,874,877,878,880,881,182,884,182,887,182,890,893,894,897,898,901,902,905],{},"Reuse the same ",[126,875,876],{},"runId"," when retrying an accepted request. Poll ",[126,879,867],{}," for\n",[126,882,883],{},"queued",[126,885,886],{},"running",[126,888,889],{},"waiting",[126,891,892],{},"succeeded",", or ",[126,895,896],{},"failed",". After an owner answers\nan approval, call ",[126,899,900],{},"runs.resume(runId)","; the host's ",[126,903,904],{},"approval"," method must return\nthe approved action's actual result or its pending approval ID. Vercel also\nrechecks waiting runs every 60 seconds in case a wake-up races a sleep.",[138,907,909],{"id":908},"schedule-saved-work","Schedule Saved Work",[122,911,912,913,916,917,920,921,924,925,928,929,932,933,936],{},"Implement the host's ",[126,914,915],{},"scheduled(payload, dueAt, env)"," method, then use\n",[126,918,919],{},"platform.schedule(key, { cron, timeZone, payload })",". Cron has five fields;\n",[126,922,923],{},"timeZone"," is an IANA name such as ",[126,926,927],{},"Europe\u002FAmsterdam",". A stable key replaces the\nprevious schedule; ",[126,930,931],{},"platform.schedule(key, null)"," cancels future occurrences.\nReload the saved automation, recheck ownership and enabled status, and use\n",[126,934,935],{},"dueAt"," to deduplicate downstream work.",[138,938,940],{"id":939},"recovery-and-host-changes","Recovery and Host Changes",[122,942,943,944,947,948,951],{},"Completed model and tool receipts replay without repeating those calls. A tool\ninterrupted after dispatch but before its result was recorded is ambiguous:\nthe run fails for review rather than issuing the external action again. Tools\nreceive a stable ",[126,945,946],{},"idempotencyKey","; Vercel and Azure activities also supply a\ndeadline ",[126,949,950],{},"signal",". Forward these to external services. An ambiguous scheduled\naction requires review before re-enabling its schedule.",[122,953,954,955,959,960,963],{},"Agent definitions stay portable, but changing application hosts does not migrate\nin-flight native executions. Drain existing runs, retain the previous runtime\nfor approvals, and recreate schedules on the destination. Pin the application\ndatabase provider separately when ",[956,957,958],"a",{"href":67},"switching hosts",".\nCloudflare ",[126,961,962],{},"deploy.workflows"," entries are Cloudflare Workflow classes and remain\nspecific to that platform.",[122,965,966,967,970,971,675,974,977,978,980],{},"For portable scheduled and event-driven application jobs, declare\n",[126,968,969],{},"deploy.automations"," alongside the agent host. Both ports are available inside\nnative callbacks through ",[126,972,973],{},"getAgentPlatform(env)",[126,975,976],{},"getAutomationPlatform(env)",".\nPass the supplied activity environment, particularly inside Azure Functions.\nSee ",[956,979,91],{"href":92}," for checkpointed tasks and\nautomatic Connect maintenance. Azure hosts both workloads in the same Function\napp and private Storage account.",[982,983,984],"style",{},"html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":151,"searchDepth":169,"depth":169,"links":986},[987,988,989,990,991],{"id":140,"depth":169,"text":141},{"id":560,"depth":169,"text":561},{"id":751,"depth":169,"text":752},{"id":908,"depth":169,"text":909},{"id":939,"depth":169,"text":940},"Deploy a Nuxt agent host using native durable execution on Cloudflare, Vercel, or Azure.","md",null,{},{"icon":89},{"title":86,"description":992},"0SjjlZ2FHUn02nVm6eXgjXRAoP67GD9uFunl7UZRHMk",[1000,1002],{"title":81,"path":82,"stem":83,"description":1001,"icon":84},"Identify migration, credential, and runtime problems before retrying deployment.",{"title":91,"path":92,"stem":93,"description":1003,"icon":94},"Run scheduled and event-driven jobs durably on Cloudflare, Vercel, and Azure.",1792122403883]