[{"data":1,"prerenderedAt":1192},["ShallowReactive",2],{"navigation_docs":3,"-guide-durable-workflows":66,"-guide-durable-workflows-surround":1187},[4,22,54],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Getting Started","\u002Fgetting-started","docs",[9,13,17],{"title":10,"path":11,"stem":12},"Introduction","\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Installation","\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":18,"path":19,"stem":20},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","docs\u002F1.getting-started\u002F3.agent-skills",false,{"title":23,"path":24,"stem":7,"children":25,"page":21},"Guide","\u002Fguide",[26,30,34,38,42,46,50],{"title":27,"path":28,"stem":29},"Quick Start","\u002Fguide\u002Fquick-start","docs\u002F2.guide\u002F1.quick-start",{"title":31,"path":32,"stem":33},"Scope with Presets","\u002Fguide\u002Fpresets","docs\u002F2.guide\u002F2.presets",{"title":35,"path":36,"stem":37},"Control Write Safety","\u002Fguide\u002Fapproval-control","docs\u002F2.guide\u002F3.approval-control",{"title":39,"path":40,"stem":41},"Commit Attribution","\u002Fguide\u002Fcommit-attribution","docs\u002F2.guide\u002F4.commit-attribution",{"title":43,"path":44,"stem":45},"Configure Token Scopes","\u002Fguide\u002Ftoken-permissions","docs\u002F2.guide\u002F5.token-and-permissions",{"title":47,"path":48,"stem":49},"Examples","\u002Fguide\u002Fexamples","docs\u002F2.guide\u002F6.examples",{"title":51,"path":52,"stem":53},"Durable workflows (Vercel Workflow)","\u002Fguide\u002Fdurable-workflows","docs\u002F2.guide\u002F7.durable-workflows",{"title":55,"path":56,"stem":7,"children":57,"page":21},"Api","\u002Fapi",[58,62],{"title":59,"path":60,"stem":61},"Tools Catalog","\u002Fapi\u002Ftools-catalog","docs\u002F3.api\u002F1.tools-catalog",{"title":63,"path":64,"stem":65},"API Reference","\u002Fapi\u002Freference","docs\u002F3.api\u002F2.reference",{"id":67,"title":51,"body":68,"description":1171,"extension":1172,"links":1173,"meta":1184,"navigation":402,"path":52,"seo":1185,"stem":53,"__hash__":1186},"docs\u002Fdocs\u002F2.guide\u002F7.durable-workflows.md",{"type":69,"value":70,"toc":1157},"minimark",[71,97,102,150,157,161,171,251,268,272,281,303,306,311,623,627,637,857,860,884,888,925,929,971,975,1007,1011,1105,1109,1134,1138,1153],[72,73,74,75,79,80,84,85,92,93,96],"p",{},"Long-running assistants and chat backends often need ",[76,77,78],"strong",{},"durable"," execution: if a function restarts, the same logical run should resume, tool calls should retry safely, and each step should be observable. ",[81,82,83],"code",{},"@github-tools\u002Fsdk"," supports this through the ",[86,87,91],"a",{"href":88,"rel":89},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fworkflow",[90],"nofollow","Vercel Workflow SDK"," and the ",[81,94,95],{},"@github-tools\u002Fsdk\u002Fworkflow"," entry point.",[98,99,101],"h2",{"id":100},"what-durable-means-here","What “durable” means here",[103,104,105,114,126],"ul",{},[106,107,108,113],"li",{},[76,109,110],{},[81,111,112],{},"\"use workflow\""," — Your orchestration function is a workflow: the platform can pause, resume, and replay it across failures and deploys.",[106,115,116,121,122,125],{},[76,117,118],{},[81,119,120],{},"\"use step\""," — Each GitHub tool implementation runs inside a ",[76,123,124],{},"named, module-level step",". Every tool call is a durable step with retries and full Node.js access in the workflow runtime.",[106,127,128,133,134,141,142,145,146,149],{},[76,129,130],{},[81,131,132],{},"createDurableGithubAgent"," — Wraps the same GitHub tools in a ",[86,135,138],{"href":136,"rel":137},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@workflow\u002Fai",[90],[81,139,140],{},"DurableAgent"," so ",[76,143,144],{},"LLM turns and tool invocations"," participate in that durable model (not just raw ",[81,147,148],{},"generateText"," in a plain serverless handler).",[72,151,152,153,156],{},"Together, this is the recommended pattern when you build ",[76,154,155],{},"Nuxt",", Next.js, or other apps that expose a chat or agent API and must not lose progress on timeout or cold start.",[98,158,160],{"id":159},"install-optional-workflow-dependencies","Install optional workflow dependencies",[72,162,163,164,167,168,170],{},"Durable agents are ",[76,165,166],{},"optional",". Add them only when you use ",[81,169,95],{},":",[172,173,174,202,219,235],"code-group",{},[175,176,182],"pre",{"className":177,"code":178,"filename":179,"language":180,"meta":181,"style":181},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add workflow @workflow\u002Fai\n","pnpm","bash","",[81,183,184],{"__ignoreMap":181},[185,186,189,192,196,199],"span",{"class":187,"line":188},"line",1,[185,190,179],{"class":191},"sBMFI",[185,193,195],{"class":194},"sfazB"," add",[185,197,198],{"class":194}," workflow",[185,200,201],{"class":194}," @workflow\u002Fai\n",[175,203,206],{"className":177,"code":204,"filename":205,"language":180,"meta":181,"style":181},"npm install workflow @workflow\u002Fai\n","npm",[81,207,208],{"__ignoreMap":181},[185,209,210,212,215,217],{"class":187,"line":188},[185,211,205],{"class":191},[185,213,214],{"class":194}," install",[185,216,198],{"class":194},[185,218,201],{"class":194},[175,220,223],{"className":177,"code":221,"filename":222,"language":180,"meta":181,"style":181},"yarn add workflow @workflow\u002Fai\n","yarn",[81,224,225],{"__ignoreMap":181},[185,226,227,229,231,233],{"class":187,"line":188},[185,228,222],{"class":191},[185,230,195],{"class":194},[185,232,198],{"class":194},[185,234,201],{"class":194},[175,236,239],{"className":177,"code":237,"filename":238,"language":180,"meta":181,"style":181},"bun add workflow @workflow\u002Fai\n","bun",[81,240,241],{"__ignoreMap":181},[185,242,243,245,247,249],{"class":187,"line":188},[185,244,238],{"class":191},[185,246,195],{"class":194},[185,248,198],{"class":194},[185,250,201],{"class":194},[72,252,253,254,257,258,261,262,264,265,267],{},"You still need ",[81,255,256],{},"ai",", ",[81,259,260],{},"zod",", and ",[81,263,83],{}," as documented in ",[86,266,14],{"href":15},".",[98,269,271],{"id":270},"minimal-durable-workflow","Minimal durable workflow",[72,273,274,276,277,280],{},[81,275,132],{}," returns a ",[81,278,279],{},"DurableGithubAgent"," with two methods:",[103,282,283,295],{},[106,284,285,290,291,294],{},[76,286,287],{},[81,288,289],{},".stream()"," — real-time output to a ",[81,292,293],{},"WritableStream"," (for chat UIs)",[106,296,297,302],{},[76,298,299],{},[81,300,301],{},".generate()"," — non-streaming, returns the full text response (for bots, background jobs, webhooks)",[72,304,305],{},"Both methods execute each tool call as a durable workflow step with automatic retries.",[307,308,310],"h3",{"id":309},"streaming-chat-ui","Streaming (chat UI)",[175,312,317],{"className":313,"code":314,"filename":315,"language":316,"meta":181,"style":181},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createDurableGithubAgent } from '@github-tools\u002Fsdk\u002Fworkflow'\nimport { getWritable } from 'workflow'\nimport type { ModelMessage, UIMessageChunk } from 'ai'\n\nexport async function durableGithubChat(\n  messages: ModelMessage[],\n  token: string,\n  model: string\n) {\n  'use workflow'\n\n  const writable = getWritable\u003CUIMessageChunk>()\n\n  const agent = createDurableGithubAgent({\n    model,\n    token,\n    preset: 'code-review',\n  })\n\n  await agent.stream({ messages, writable })\n}\n","durable-chat.workflow.ts","ts",[81,318,319,347,368,397,404,424,441,454,465,474,485,490,517,522,540,548,556,574,583,588,617],{"__ignoreMap":181},[185,320,321,325,329,333,336,339,342,344],{"class":187,"line":188},[185,322,324],{"class":323},"s7zQu","import",[185,326,328],{"class":327},"sMK4o"," {",[185,330,332],{"class":331},"sTEyZ"," createDurableGithubAgent",[185,334,335],{"class":327}," }",[185,337,338],{"class":323}," from",[185,340,341],{"class":327}," '",[185,343,95],{"class":194},[185,345,346],{"class":327},"'\n",[185,348,350,352,354,357,359,361,363,366],{"class":187,"line":349},2,[185,351,324],{"class":323},[185,353,328],{"class":327},[185,355,356],{"class":331}," getWritable",[185,358,335],{"class":327},[185,360,338],{"class":323},[185,362,341],{"class":327},[185,364,365],{"class":194},"workflow",[185,367,346],{"class":327},[185,369,371,373,376,378,381,384,387,389,391,393,395],{"class":187,"line":370},3,[185,372,324],{"class":323},[185,374,375],{"class":323}," type",[185,377,328],{"class":327},[185,379,380],{"class":331}," ModelMessage",[185,382,383],{"class":327},",",[185,385,386],{"class":331}," UIMessageChunk",[185,388,335],{"class":327},[185,390,338],{"class":323},[185,392,341],{"class":327},[185,394,256],{"class":194},[185,396,346],{"class":327},[185,398,400],{"class":187,"line":399},4,[185,401,403],{"emptyLinePlaceholder":402},true,"\n",[185,405,407,410,414,417,421],{"class":187,"line":406},5,[185,408,409],{"class":323},"export",[185,411,413],{"class":412},"spNyl"," async",[185,415,416],{"class":412}," function",[185,418,420],{"class":419},"s2Zo4"," durableGithubChat",[185,422,423],{"class":327},"(\n",[185,425,427,431,433,435,438],{"class":187,"line":426},6,[185,428,430],{"class":429},"sHdIc","  messages",[185,432,170],{"class":327},[185,434,380],{"class":191},[185,436,437],{"class":331},"[]",[185,439,440],{"class":327},",\n",[185,442,444,447,449,452],{"class":187,"line":443},7,[185,445,446],{"class":429},"  token",[185,448,170],{"class":327},[185,450,451],{"class":191}," string",[185,453,440],{"class":327},[185,455,457,460,462],{"class":187,"line":456},8,[185,458,459],{"class":429},"  model",[185,461,170],{"class":327},[185,463,464],{"class":191}," string\n",[185,466,468,471],{"class":187,"line":467},9,[185,469,470],{"class":327},")",[185,472,473],{"class":327}," {\n",[185,475,477,480,483],{"class":187,"line":476},10,[185,478,479],{"class":327},"  '",[185,481,482],{"class":194},"use workflow",[185,484,346],{"class":327},[185,486,488],{"class":187,"line":487},11,[185,489,403],{"emptyLinePlaceholder":402},[185,491,493,496,499,502,504,507,510,513],{"class":187,"line":492},12,[185,494,495],{"class":412},"  const",[185,497,498],{"class":331}," writable",[185,500,501],{"class":327}," =",[185,503,356],{"class":419},[185,505,506],{"class":327},"\u003C",[185,508,509],{"class":191},"UIMessageChunk",[185,511,512],{"class":327},">",[185,514,516],{"class":515},"swJcz","()\n",[185,518,520],{"class":187,"line":519},13,[185,521,403],{"emptyLinePlaceholder":402},[185,523,525,527,530,532,534,537],{"class":187,"line":524},14,[185,526,495],{"class":412},[185,528,529],{"class":331}," agent",[185,531,501],{"class":327},[185,533,332],{"class":419},[185,535,536],{"class":515},"(",[185,538,539],{"class":327},"{\n",[185,541,543,546],{"class":187,"line":542},15,[185,544,545],{"class":331},"    model",[185,547,440],{"class":327},[185,549,551,554],{"class":187,"line":550},16,[185,552,553],{"class":331},"    token",[185,555,440],{"class":327},[185,557,559,562,564,566,569,572],{"class":187,"line":558},17,[185,560,561],{"class":515},"    preset",[185,563,170],{"class":327},[185,565,341],{"class":327},[185,567,568],{"class":194},"code-review",[185,570,571],{"class":327},"'",[185,573,440],{"class":327},[185,575,577,580],{"class":187,"line":576},18,[185,578,579],{"class":327},"  }",[185,581,582],{"class":515},")\n",[185,584,586],{"class":187,"line":585},19,[185,587,403],{"emptyLinePlaceholder":402},[185,589,591,594,596,598,601,603,606,609,611,613,615],{"class":187,"line":590},20,[185,592,593],{"class":323},"  await",[185,595,529],{"class":331},[185,597,267],{"class":327},[185,599,600],{"class":419},"stream",[185,602,536],{"class":515},[185,604,605],{"class":327},"{",[185,607,608],{"class":331}," messages",[185,610,383],{"class":327},[185,612,498],{"class":331},[185,614,335],{"class":327},[185,616,582],{"class":515},[185,618,620],{"class":187,"line":619},21,[185,621,622],{"class":327},"}\n",[307,624,626],{"id":625},"non-streaming-bot-background-job","Non-streaming (bot \u002F background job)",[72,628,629,630,633,634,636],{},"For non-streaming use cases (bots, webhooks, background jobs), use ",[81,631,632],{},"createGithubAgent"," inside a ",[81,635,120],{}," function. This gives you the full tool loop while keeping the step durable:",[175,638,641],{"className":313,"code":639,"filename":640,"language":316,"meta":181,"style":181},"import { createGithubAgent } from '@github-tools\u002Fsdk'\n\nasync function runAgentTurn(prompt: string) {\n  'use step'\n  const agent = createGithubAgent({\n    model: 'anthropic\u002Fclaude-sonnet-4.6',\n    preset: 'code-review',\n    requireApproval: false,\n  })\n  const { text } = await agent.generate({ prompt })\n  return text\n}\n\nexport async function reviewWorkflow(prompt: string) {\n  'use workflow'\n  await runAgentTurn(prompt)\n}\n","review-agent.workflow.ts",[81,642,643,662,666,689,698,712,727,741,754,760,794,802,806,810,833,841,853],{"__ignoreMap":181},[185,644,645,647,649,652,654,656,658,660],{"class":187,"line":188},[185,646,324],{"class":323},[185,648,328],{"class":327},[185,650,651],{"class":331}," createGithubAgent",[185,653,335],{"class":327},[185,655,338],{"class":323},[185,657,341],{"class":327},[185,659,83],{"class":194},[185,661,346],{"class":327},[185,663,664],{"class":187,"line":349},[185,665,403],{"emptyLinePlaceholder":402},[185,667,668,671,673,676,678,681,683,685,687],{"class":187,"line":370},[185,669,670],{"class":412},"async",[185,672,416],{"class":412},[185,674,675],{"class":419}," runAgentTurn",[185,677,536],{"class":327},[185,679,680],{"class":429},"prompt",[185,682,170],{"class":327},[185,684,451],{"class":191},[185,686,470],{"class":327},[185,688,473],{"class":327},[185,690,691,693,696],{"class":187,"line":399},[185,692,479],{"class":327},[185,694,695],{"class":194},"use step",[185,697,346],{"class":327},[185,699,700,702,704,706,708,710],{"class":187,"line":406},[185,701,495],{"class":412},[185,703,529],{"class":331},[185,705,501],{"class":327},[185,707,651],{"class":419},[185,709,536],{"class":515},[185,711,539],{"class":327},[185,713,714,716,718,720,723,725],{"class":187,"line":426},[185,715,545],{"class":515},[185,717,170],{"class":327},[185,719,341],{"class":327},[185,721,722],{"class":194},"anthropic\u002Fclaude-sonnet-4.6",[185,724,571],{"class":327},[185,726,440],{"class":327},[185,728,729,731,733,735,737,739],{"class":187,"line":443},[185,730,561],{"class":515},[185,732,170],{"class":327},[185,734,341],{"class":327},[185,736,568],{"class":194},[185,738,571],{"class":327},[185,740,440],{"class":327},[185,742,743,746,748,752],{"class":187,"line":456},[185,744,745],{"class":515},"    requireApproval",[185,747,170],{"class":327},[185,749,751],{"class":750},"sfNiH"," false",[185,753,440],{"class":327},[185,755,756,758],{"class":187,"line":467},[185,757,579],{"class":327},[185,759,582],{"class":515},[185,761,762,764,766,769,771,773,776,778,780,783,785,787,790,792],{"class":187,"line":476},[185,763,495],{"class":412},[185,765,328],{"class":327},[185,767,768],{"class":331}," text",[185,770,335],{"class":327},[185,772,501],{"class":327},[185,774,775],{"class":323}," await",[185,777,529],{"class":331},[185,779,267],{"class":327},[185,781,782],{"class":419},"generate",[185,784,536],{"class":515},[185,786,605],{"class":327},[185,788,789],{"class":331}," prompt",[185,791,335],{"class":327},[185,793,582],{"class":515},[185,795,796,799],{"class":187,"line":487},[185,797,798],{"class":323},"  return",[185,800,801],{"class":331}," text\n",[185,803,804],{"class":187,"line":492},[185,805,622],{"class":327},[185,807,808],{"class":187,"line":519},[185,809,403],{"emptyLinePlaceholder":402},[185,811,812,814,816,818,821,823,825,827,829,831],{"class":187,"line":524},[185,813,409],{"class":323},[185,815,413],{"class":412},[185,817,416],{"class":412},[185,819,820],{"class":419}," reviewWorkflow",[185,822,536],{"class":327},[185,824,680],{"class":429},[185,826,170],{"class":327},[185,828,451],{"class":191},[185,830,470],{"class":327},[185,832,473],{"class":327},[185,834,835,837,839],{"class":187,"line":542},[185,836,479],{"class":327},[185,838,482],{"class":194},[185,840,346],{"class":327},[185,842,843,845,847,849,851],{"class":187,"line":550},[185,844,593],{"class":323},[185,846,675],{"class":419},[185,848,536],{"class":515},[185,850,680],{"class":331},[185,852,582],{"class":515},[185,854,855],{"class":187,"line":558},[185,856,622],{"class":327},[72,858,859],{},"Wire these workflows from an API route or server handler provided by your framework’s Workflow integration (for example a Nuxt server route that starts the run and streams results to the client).",[861,862,863,864,869,870,877,878,883],"note",{},"For a complete working example that connects a durable agent to GitHub via ",[86,865,868],{"href":866,"rel":867},"https:\u002F\u002Fchat-sdk.dev",[90],"Chat SDK",", see the ",[86,871,874],{"href":872,"rel":873},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fgithub-tools\u002Ftree\u002Fmain\u002Fexamples\u002Fpr-review-agent",[90],[81,875,876],{},"examples\u002Fpr-review-agent\u002F"," starter — a ~60-line PR review agent with multi-turn durable sessions and ",[86,879,882],{"href":880,"rel":881},"https:\u002F\u002Fevlog.dev",[90],"evlog"," AI observability.",[98,885,887],{"id":886},"ai-assistant-prompt-durable-workflow","AI assistant prompt (durable workflow)",[175,889,894],{"className":890,"code":891,"filename":892,"language":893,"meta":181,"style":181},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Integrate a durable GitHub assistant using @github-tools\u002Fsdk\u002Fworkflow and the Vercel Workflow SDK in this repo.\n\n- Add dependencies: workflow, @workflow\u002Fai (and existing @github-tools\u002Fsdk, ai, zod)\n- Define an async function with \"use workflow\" using createDurableGithubAgent, getWritable from \"workflow\", and agent.stream with ModelMessage[] and UIMessageChunk\n- Document that requireApproval is ignored by DurableAgent: https:\u002F\u002Fgithub-tools.com\u002Fguide\u002Fdurable-workflows\n- Match this framework’s workflow layout (e.g. server\u002Fworkflows in Nuxt)\n","Prompt","txt",[81,895,896,901,905,910,915,920],{"__ignoreMap":181},[185,897,898],{"class":187,"line":188},[185,899,900],{},"Integrate a durable GitHub assistant using @github-tools\u002Fsdk\u002Fworkflow and the Vercel Workflow SDK in this repo.\n",[185,902,903],{"class":187,"line":349},[185,904,403],{"emptyLinePlaceholder":402},[185,906,907],{"class":187,"line":370},[185,908,909],{},"- Add dependencies: workflow, @workflow\u002Fai (and existing @github-tools\u002Fsdk, ai, zod)\n",[185,911,912],{"class":187,"line":399},[185,913,914],{},"- Define an async function with \"use workflow\" using createDurableGithubAgent, getWritable from \"workflow\", and agent.stream with ModelMessage[] and UIMessageChunk\n",[185,916,917],{"class":187,"line":406},[185,918,919],{},"- Document that requireApproval is ignored by DurableAgent: https:\u002F\u002Fgithub-tools.com\u002Fguide\u002Fdurable-workflows\n",[185,921,922],{"class":187,"line":426},[185,923,924],{},"- Match this framework’s workflow layout (e.g. server\u002Fworkflows in Nuxt)\n",[98,926,928],{"id":927},"presets-and-options","Presets and options",[72,930,931,932,257,934,257,937,257,940,257,943,946,947,949,950,954,955,958,959,257,962,257,965,261,968,267],{},"All presets (",[81,933,568],{},[81,935,936],{},"issue-triage",[81,938,939],{},"repo-explorer",[81,941,942],{},"ci-ops",[81,944,945],{},"maintainer",") work with ",[81,948,132],{},". Options mirror ",[86,951,952],{"href":64},[81,953,632],{}," for model, token, preset, instructions, and temperature, with additional pass-through for ",[81,956,957],{},"DurableAgentOptions"," fields like ",[81,960,961],{},"experimental_telemetry",[81,963,964],{},"onStepFinish",[81,966,967],{},"onFinish",[81,969,970],{},"prepareStep",[98,972,974],{"id":973},"approval-control-and-durable-agents","Approval control and durable agents",[976,977,978,999],"warning",{},[72,979,980,983,984,987,988,991,992,994,995,998],{},[81,981,982],{},"requireApproval"," is ",[76,985,986],{},"accepted for forward compatibility"," but is ",[76,989,990],{},"currently ignored"," by ",[81,993,140],{},". The Workflow SDK does not yet support interactive tool approval the same way as ",[81,996,997],{},"ToolLoopAgent"," — tools run as soon as the model invokes them.",[72,1000,1001,1002,1006],{},"When you need human-in-the-loop approvals on writes, use ",[86,1003,1004],{"href":64},[81,1005,632],{}," (standard AI SDK agent) instead, or gate dangerous operations outside the model (manual checks, feature flags, separate endpoints).",[98,1008,1010],{"id":1009},"standard-agents-vs-durable-agents","Standard agents vs durable agents",[1012,1013,1014,1031],"table",{},[1015,1016,1017],"thead",{},[1018,1019,1020,1023,1027],"tr",{},[1021,1022],"th",{},[1021,1024,1025],{},[81,1026,632],{},[1021,1028,1029],{},[81,1030,132],{},[1032,1033,1034,1048,1065,1082,1093],"tbody",{},[1018,1035,1036,1040,1044],{},[1037,1038,1039],"td",{},"Import",[1037,1041,1042],{},[81,1043,83],{},[1037,1045,1046],{},[81,1047,95],{},[1018,1049,1050,1053,1058],{},[1037,1051,1052],{},"Runtime",[1037,1054,1055,1056],{},"In-process ",[81,1057,997],{},[1037,1059,1060,1062,1063],{},[81,1061,279],{}," inside ",[81,1064,112],{},[1018,1066,1067,1070,1076],{},[1037,1068,1069],{},"Methods",[1037,1071,1072,257,1074],{},[81,1073,301],{},[81,1075,289],{},[1037,1077,1078,257,1080],{},[81,1079,301],{},[81,1081,289],{},[1018,1083,1084,1087,1090],{},[1037,1085,1086],{},"Retries \u002F resume",[1037,1088,1089],{},"You handle",[1037,1091,1092],{},"Workflow-managed durable steps",[1018,1094,1095,1099,1102],{},[1037,1096,1097],{},[81,1098,982],{},[1037,1100,1101],{},"Supported",[1037,1103,1104],{},"Ignored today (see above)",[98,1106,1108],{"id":1107},"durable-steps-on-every-tool","Durable steps on every tool",[72,1110,1111,1112,1115,1116,1118,1119,1122,1123,1125,1126,1129,1130,1133],{},"Even if you do ",[76,1113,1114],{},"not"," use ",[81,1117,132],{},", spreading ",[81,1120,1121],{},"createGithubTools()"," inside a workflow still benefits from per-tool ",[81,1124,120],{}," boundaries when the AI SDK executes tools — each GitHub operation remains a proper workflow step. The ",[76,1127,1128],{},"durable agent"," entry point additionally durably wraps the ",[76,1131,1132],{},"LLM loop"," itself.",[98,1135,1137],{"id":1136},"external-references","External references",[103,1139,1140,1146],{},[106,1141,1142],{},[86,1143,1145],{"href":88,"rel":1144},[90],"Vercel Workflow documentation",[106,1147,1148],{},[86,1149,1152],{"href":1150,"rel":1151},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[90],"AI SDK tools",[1154,1155,1156],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":181,"searchDepth":349,"depth":349,"links":1158},[1159,1160,1161,1165,1166,1167,1168,1169,1170],{"id":100,"depth":349,"text":101},{"id":159,"depth":349,"text":160},{"id":270,"depth":349,"text":271,"children":1162},[1163,1164],{"id":309,"depth":370,"text":310},{"id":625,"depth":370,"text":626},{"id":886,"depth":349,"text":887},{"id":927,"depth":349,"text":928},{"id":973,"depth":349,"text":974},{"id":1009,"depth":349,"text":1010},{"id":1107,"depth":349,"text":1108},{"id":1136,"depth":349,"text":1137},"Run GitHub tools as durable, retryable steps with createDurableGithubAgent and the Vercel Workflow SDK.","md",[1174,1179,1181],{"label":1175,"icon":1176,"to":64,"color":1177,"variant":1178},"API reference — createDurableGithubAgent","i-lucide-braces","neutral","subtle",{"label":18,"icon":1180,"to":19,"color":1177,"variant":1178},"i-lucide-sparkles",{"label":1182,"icon":1183,"to":36,"color":1177,"variant":1178},"Control write safety","i-lucide-shield-check",{},{"title":51,"description":1171},"9LQMBJXxqDApwrpZflyxBAHx0yhh1V7xEMHTmgaKmMA",[1188,1190],{"title":47,"path":48,"stem":49,"description":1189,"children":-1},"Complete scripts and agent patterns you can copy and adapt.",{"title":59,"path":60,"stem":61,"description":1191,"children":-1},"Every available tool, grouped by domain and write-safety status. Tools run as durable workflow steps when used with Vercel Workflow.",1779365451999]