[{"data":1,"prerenderedAt":2220},["ShallowReactive",2],{"navigation_docs":3,"-guide-examples":66,"-guide-examples-surround":2215},[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":47,"body":68,"description":2197,"extension":2198,"links":2199,"meta":2212,"navigation":154,"path":48,"seo":2213,"stem":49,"__hash__":2214},"docs\u002Fdocs\u002F2.guide\u002F6.examples.md",{"type":69,"value":70,"toc":2184},"minimark",[71,76,85,294,298,309,518,522,529,639,645,677,681,684,875,879,882,1042,1046,1056,1295,1302,1376,1384,1388,1409,1664,1679,1683,1695,1706,1764,2072,2076,2172,2180],[72,73,75],"h2",{"id":74},"summarize-open-pull-requests","Summarize open pull requests",[77,78,79,80,84],"p",{},"This script lists every open PR on a repository and generates a one-line summary for each. It uses ",[81,82,83],"code",{},"generateText"," with the default tool set:",[86,87,93],"pre",{"className":88,"code":89,"filename":90,"language":91,"meta":92,"style":92},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { generateText } from 'ai'\n\nconst { text } = await generateText({\n  model: 'anthropic\u002Fclaude-sonnet-4.6',\n  tools: createGithubTools({\n    preset: 'code-review',\n  }),\n  prompt: 'List all open pull requests on vercel-labs\u002Fgithub-tools and write a one-line summary for each.',\n})\n\nconsole.log(text)\n","summarize-prs.ts","ts","",[81,94,95,128,149,156,186,207,221,238,249,266,274,279],{"__ignoreMap":92},[96,97,100,104,108,112,115,118,121,125],"span",{"class":98,"line":99},"line",1,[96,101,103],{"class":102},"s7zQu","import",[96,105,107],{"class":106},"sMK4o"," {",[96,109,111],{"class":110},"sTEyZ"," createGithubTools",[96,113,114],{"class":106}," }",[96,116,117],{"class":102}," from",[96,119,120],{"class":106}," '",[96,122,124],{"class":123},"sfazB","@github-tools\u002Fsdk",[96,126,127],{"class":106},"'\n",[96,129,131,133,135,138,140,142,144,147],{"class":98,"line":130},2,[96,132,103],{"class":102},[96,134,107],{"class":106},[96,136,137],{"class":110}," generateText",[96,139,114],{"class":106},[96,141,117],{"class":102},[96,143,120],{"class":106},[96,145,146],{"class":123},"ai",[96,148,127],{"class":106},[96,150,152],{"class":98,"line":151},3,[96,153,155],{"emptyLinePlaceholder":154},true,"\n",[96,157,159,163,165,168,171,174,177,180,183],{"class":98,"line":158},4,[96,160,162],{"class":161},"spNyl","const",[96,164,107],{"class":106},[96,166,167],{"class":110}," text ",[96,169,170],{"class":106},"}",[96,172,173],{"class":106}," =",[96,175,176],{"class":102}," await",[96,178,137],{"class":179},"s2Zo4",[96,181,182],{"class":110},"(",[96,184,185],{"class":106},"{\n",[96,187,189,193,196,198,201,204],{"class":98,"line":188},5,[96,190,192],{"class":191},"swJcz","  model",[96,194,195],{"class":106},":",[96,197,120],{"class":106},[96,199,200],{"class":123},"anthropic\u002Fclaude-sonnet-4.6",[96,202,203],{"class":106},"'",[96,205,206],{"class":106},",\n",[96,208,210,213,215,217,219],{"class":98,"line":209},6,[96,211,212],{"class":191},"  tools",[96,214,195],{"class":106},[96,216,111],{"class":179},[96,218,182],{"class":110},[96,220,185],{"class":106},[96,222,224,227,229,231,234,236],{"class":98,"line":223},7,[96,225,226],{"class":191},"    preset",[96,228,195],{"class":106},[96,230,120],{"class":106},[96,232,233],{"class":123},"code-review",[96,235,203],{"class":106},[96,237,206],{"class":106},[96,239,241,244,247],{"class":98,"line":240},8,[96,242,243],{"class":106},"  }",[96,245,246],{"class":110},")",[96,248,206],{"class":106},[96,250,252,255,257,259,262,264],{"class":98,"line":251},9,[96,253,254],{"class":191},"  prompt",[96,256,195],{"class":106},[96,258,120],{"class":106},[96,260,261],{"class":123},"List all open pull requests on vercel-labs\u002Fgithub-tools and write a one-line summary for each.",[96,263,203],{"class":106},[96,265,206],{"class":106},[96,267,269,271],{"class":98,"line":268},10,[96,270,170],{"class":106},[96,272,273],{"class":110},")\n",[96,275,277],{"class":98,"line":276},11,[96,278,155],{"emptyLinePlaceholder":154},[96,280,282,285,288,291],{"class":98,"line":281},12,[96,283,284],{"class":110},"console",[96,286,287],{"class":106},".",[96,289,290],{"class":179},"log",[96,292,293],{"class":110},"(text)\n",[72,295,297],{"id":296},"triage-incoming-issues","Triage incoming issues",[77,299,300,301,304,305,195],{},"This agent reads new issues, classifies them by priority, and posts a comment with the classification. It uses ",[81,302,303],{},"issue-triage"," with selective ",[306,307,308],"a",{"href":36},"approval",[86,310,313],{"className":88,"code":311,"filename":312,"language":91,"meta":92,"style":92},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { generateText } from 'ai'\n\nconst { text } = await generateText({\n  model: 'anthropic\u002Fclaude-sonnet-4.6',\n  tools: createGithubTools({\n    preset: 'issue-triage',\n    requireApproval: {\n      addIssueComment: false,\n      closeIssue: true,\n      createIssue: true,\n    },\n  }),\n  prompt: `\n    Read all issues labeled \"needs-triage\" on vercel-labs\u002Fgithub-tools.\n    For each one, classify it as bug, feature, or question.\n    Post a comment with the classification and a suggested next step.\n  `,\n})\n","triage-issues.ts",[81,314,315,333,351,355,375,389,401,415,425,438,450,461,466,475,485,491,497,503,511],{"__ignoreMap":92},[96,316,317,319,321,323,325,327,329,331],{"class":98,"line":99},[96,318,103],{"class":102},[96,320,107],{"class":106},[96,322,111],{"class":110},[96,324,114],{"class":106},[96,326,117],{"class":102},[96,328,120],{"class":106},[96,330,124],{"class":123},[96,332,127],{"class":106},[96,334,335,337,339,341,343,345,347,349],{"class":98,"line":130},[96,336,103],{"class":102},[96,338,107],{"class":106},[96,340,137],{"class":110},[96,342,114],{"class":106},[96,344,117],{"class":102},[96,346,120],{"class":106},[96,348,146],{"class":123},[96,350,127],{"class":106},[96,352,353],{"class":98,"line":151},[96,354,155],{"emptyLinePlaceholder":154},[96,356,357,359,361,363,365,367,369,371,373],{"class":98,"line":158},[96,358,162],{"class":161},[96,360,107],{"class":106},[96,362,167],{"class":110},[96,364,170],{"class":106},[96,366,173],{"class":106},[96,368,176],{"class":102},[96,370,137],{"class":179},[96,372,182],{"class":110},[96,374,185],{"class":106},[96,376,377,379,381,383,385,387],{"class":98,"line":188},[96,378,192],{"class":191},[96,380,195],{"class":106},[96,382,120],{"class":106},[96,384,200],{"class":123},[96,386,203],{"class":106},[96,388,206],{"class":106},[96,390,391,393,395,397,399],{"class":98,"line":209},[96,392,212],{"class":191},[96,394,195],{"class":106},[96,396,111],{"class":179},[96,398,182],{"class":110},[96,400,185],{"class":106},[96,402,403,405,407,409,411,413],{"class":98,"line":223},[96,404,226],{"class":191},[96,406,195],{"class":106},[96,408,120],{"class":106},[96,410,303],{"class":123},[96,412,203],{"class":106},[96,414,206],{"class":106},[96,416,417,420,422],{"class":98,"line":240},[96,418,419],{"class":191},"    requireApproval",[96,421,195],{"class":106},[96,423,424],{"class":106}," {\n",[96,426,427,430,432,436],{"class":98,"line":251},[96,428,429],{"class":191},"      addIssueComment",[96,431,195],{"class":106},[96,433,435],{"class":434},"sfNiH"," false",[96,437,206],{"class":106},[96,439,440,443,445,448],{"class":98,"line":268},[96,441,442],{"class":191},"      closeIssue",[96,444,195],{"class":106},[96,446,447],{"class":434}," true",[96,449,206],{"class":106},[96,451,452,455,457,459],{"class":98,"line":276},[96,453,454],{"class":191},"      createIssue",[96,456,195],{"class":106},[96,458,447],{"class":434},[96,460,206],{"class":106},[96,462,463],{"class":98,"line":281},[96,464,465],{"class":106},"    },\n",[96,467,469,471,473],{"class":98,"line":468},13,[96,470,243],{"class":106},[96,472,246],{"class":110},[96,474,206],{"class":106},[96,476,478,480,482],{"class":98,"line":477},14,[96,479,254],{"class":191},[96,481,195],{"class":106},[96,483,484],{"class":106}," `\n",[96,486,488],{"class":98,"line":487},15,[96,489,490],{"class":123},"    Read all issues labeled \"needs-triage\" on vercel-labs\u002Fgithub-tools.\n",[96,492,494],{"class":98,"line":493},16,[96,495,496],{"class":123},"    For each one, classify it as bug, feature, or question.\n",[96,498,500],{"class":98,"line":499},17,[96,501,502],{"class":123},"    Post a comment with the classification and a suggested next step.\n",[96,504,506,509],{"class":98,"line":505},18,[96,507,508],{"class":106},"  `",[96,510,206],{"class":106},[96,512,514,516],{"class":98,"line":513},19,[96,515,170],{"class":106},[96,517,273],{"class":110},[72,519,521],{"id":520},"build-a-reusable-review-agent","Build a reusable review agent",[77,523,524,525,528],{},"When you need the same review behavior across multiple calls, use ",[81,526,527],{},"createGithubAgent"," to create a persistent agent with shared instructions:",[86,530,533],{"className":88,"code":531,"filename":532,"language":91,"meta":92,"style":92},"import { createGithubAgent } from '@github-tools\u002Fsdk'\n\nconst reviewer = createGithubAgent({\n  model: 'anthropic\u002Fclaude-sonnet-4.6',\n  preset: 'code-review',\n  system: `\n    You review pull requests for code quality and security issues.\n    Always cite specific file paths and line numbers.\n    Never approve a PR that introduces console.log statements.\n  `,\n})\n","review-agent.ts",[81,534,535,554,558,574,588,603,612,617,622,627,633],{"__ignoreMap":92},[96,536,537,539,541,544,546,548,550,552],{"class":98,"line":99},[96,538,103],{"class":102},[96,540,107],{"class":106},[96,542,543],{"class":110}," createGithubAgent",[96,545,114],{"class":106},[96,547,117],{"class":102},[96,549,120],{"class":106},[96,551,124],{"class":123},[96,553,127],{"class":106},[96,555,556],{"class":98,"line":130},[96,557,155],{"emptyLinePlaceholder":154},[96,559,560,562,565,568,570,572],{"class":98,"line":151},[96,561,162],{"class":161},[96,563,564],{"class":110}," reviewer ",[96,566,567],{"class":106},"=",[96,569,543],{"class":179},[96,571,182],{"class":110},[96,573,185],{"class":106},[96,575,576,578,580,582,584,586],{"class":98,"line":158},[96,577,192],{"class":191},[96,579,195],{"class":106},[96,581,120],{"class":106},[96,583,200],{"class":123},[96,585,203],{"class":106},[96,587,206],{"class":106},[96,589,590,593,595,597,599,601],{"class":98,"line":188},[96,591,592],{"class":191},"  preset",[96,594,195],{"class":106},[96,596,120],{"class":106},[96,598,233],{"class":123},[96,600,203],{"class":106},[96,602,206],{"class":106},[96,604,605,608,610],{"class":98,"line":209},[96,606,607],{"class":191},"  system",[96,609,195],{"class":106},[96,611,484],{"class":106},[96,613,614],{"class":98,"line":223},[96,615,616],{"class":123},"    You review pull requests for code quality and security issues.\n",[96,618,619],{"class":98,"line":240},[96,620,621],{"class":123},"    Always cite specific file paths and line numbers.\n",[96,623,624],{"class":98,"line":251},[96,625,626],{"class":123},"    Never approve a PR that introduces console.log statements.\n",[96,628,629,631],{"class":98,"line":268},[96,630,508],{"class":106},[96,632,206],{"class":106},[96,634,635,637],{"class":98,"line":276},[96,636,170],{"class":106},[96,638,273],{"class":110},[72,640,642,643,246],{"id":641},"ai-assistant-prompt-creategithubagent","AI assistant prompt (",[81,644,527],{},[86,646,651],{"className":647,"code":648,"filename":649,"language":650,"meta":92,"style":92},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Refactor this code to use createGithubAgent from @github-tools\u002Fsdk.\n\n- Choose a preset that matches the task (code-review, issue-triage, ci-ops, repo-explorer, or maintainer)\n- Preserve or improve system instructions; use patterns from https:\u002F\u002Fgithub-tools.com\u002Fguide\u002Fexamples\n- If destructive GitHub writes must be human-gated, set requireApproval and follow https:\u002F\u002Fgithub-tools.com\u002Fguide\u002Fapproval-control\n","Prompt","txt",[81,652,653,658,662,667,672],{"__ignoreMap":92},[96,654,655],{"class":98,"line":99},[96,656,657],{},"Refactor this code to use createGithubAgent from @github-tools\u002Fsdk.\n",[96,659,660],{"class":98,"line":130},[96,661,155],{"emptyLinePlaceholder":154},[96,663,664],{"class":98,"line":151},[96,665,666],{},"- Choose a preset that matches the task (code-review, issue-triage, ci-ops, repo-explorer, or maintainer)\n",[96,668,669],{"class":98,"line":158},[96,670,671],{},"- Preserve or improve system instructions; use patterns from https:\u002F\u002Fgithub-tools.com\u002Fguide\u002Fexamples\n",[96,673,674],{"class":98,"line":188},[96,675,676],{},"- If destructive GitHub writes must be human-gated, set requireApproval and follow https:\u002F\u002Fgithub-tools.com\u002Fguide\u002Fapproval-control\n",[72,678,680],{"id":679},"explore-a-repository-interactively","Explore a repository interactively",[77,682,683],{},"A read-only script that searches code and reads file content. No write permissions needed:",[86,685,688],{"className":88,"code":686,"filename":687,"language":91,"meta":92,"style":92},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { streamText } from 'ai'\n\nconst result = streamText({\n  model: 'anthropic\u002Fclaude-sonnet-4.6',\n  tools: createGithubTools({\n    preset: 'repo-explorer',\n  }),\n  prompt: 'Find all TypeScript files that export a function named \"create\" in vercel-labs\u002Fgithub-tools and explain what each one does.',\n})\n\nfor await (const chunk of result.textStream) {\n  process.stdout.write(chunk)\n}\n","explore-repo.ts",[81,689,690,708,727,731,746,760,772,787,795,810,816,820,848,870],{"__ignoreMap":92},[96,691,692,694,696,698,700,702,704,706],{"class":98,"line":99},[96,693,103],{"class":102},[96,695,107],{"class":106},[96,697,111],{"class":110},[96,699,114],{"class":106},[96,701,117],{"class":102},[96,703,120],{"class":106},[96,705,124],{"class":123},[96,707,127],{"class":106},[96,709,710,712,714,717,719,721,723,725],{"class":98,"line":130},[96,711,103],{"class":102},[96,713,107],{"class":106},[96,715,716],{"class":110}," streamText",[96,718,114],{"class":106},[96,720,117],{"class":102},[96,722,120],{"class":106},[96,724,146],{"class":123},[96,726,127],{"class":106},[96,728,729],{"class":98,"line":151},[96,730,155],{"emptyLinePlaceholder":154},[96,732,733,735,738,740,742,744],{"class":98,"line":158},[96,734,162],{"class":161},[96,736,737],{"class":110}," result ",[96,739,567],{"class":106},[96,741,716],{"class":179},[96,743,182],{"class":110},[96,745,185],{"class":106},[96,747,748,750,752,754,756,758],{"class":98,"line":188},[96,749,192],{"class":191},[96,751,195],{"class":106},[96,753,120],{"class":106},[96,755,200],{"class":123},[96,757,203],{"class":106},[96,759,206],{"class":106},[96,761,762,764,766,768,770],{"class":98,"line":209},[96,763,212],{"class":191},[96,765,195],{"class":106},[96,767,111],{"class":179},[96,769,182],{"class":110},[96,771,185],{"class":106},[96,773,774,776,778,780,783,785],{"class":98,"line":223},[96,775,226],{"class":191},[96,777,195],{"class":106},[96,779,120],{"class":106},[96,781,782],{"class":123},"repo-explorer",[96,784,203],{"class":106},[96,786,206],{"class":106},[96,788,789,791,793],{"class":98,"line":240},[96,790,243],{"class":106},[96,792,246],{"class":110},[96,794,206],{"class":106},[96,796,797,799,801,803,806,808],{"class":98,"line":251},[96,798,254],{"class":191},[96,800,195],{"class":106},[96,802,120],{"class":106},[96,804,805],{"class":123},"Find all TypeScript files that export a function named \"create\" in vercel-labs\u002Fgithub-tools and explain what each one does.",[96,807,203],{"class":106},[96,809,206],{"class":106},[96,811,812,814],{"class":98,"line":268},[96,813,170],{"class":106},[96,815,273],{"class":110},[96,817,818],{"class":98,"line":276},[96,819,155],{"emptyLinePlaceholder":154},[96,821,822,825,827,830,832,835,838,841,843,846],{"class":98,"line":281},[96,823,824],{"class":102},"for",[96,826,176],{"class":102},[96,828,829],{"class":110}," (",[96,831,162],{"class":161},[96,833,834],{"class":110}," chunk ",[96,836,837],{"class":106},"of",[96,839,840],{"class":110}," result",[96,842,287],{"class":106},[96,844,845],{"class":110},"textStream) ",[96,847,185],{"class":106},[96,849,850,853,855,858,860,863,865,868],{"class":98,"line":468},[96,851,852],{"class":110},"  process",[96,854,287],{"class":106},[96,856,857],{"class":110},"stdout",[96,859,287],{"class":106},[96,861,862],{"class":179},"write",[96,864,182],{"class":191},[96,866,867],{"class":110},"chunk",[96,869,273],{"class":191},[96,871,872],{"class":98,"line":477},[96,873,874],{"class":106},"}\n",[72,876,878],{"id":877},"run-a-maintainer-workflow-with-full-approval","Run a maintainer workflow with full approval",[77,880,881],{},"A complete workflow that can create issues, open PRs, and merge — all gated behind approval:",[86,883,886],{"className":88,"code":884,"filename":885,"language":91,"meta":92,"style":92},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { generateText } from 'ai'\n\nconst { text } = await generateText({\n  model: 'anthropic\u002Fclaude-sonnet-4.6',\n  tools: createGithubTools({\n    preset: 'maintainer',\n    requireApproval: true,\n  }),\n  prompt: `\n    Check if there are any stale issues (no activity for 30 days) on vercel-labs\u002Fgithub-tools.\n    For each stale issue, post a comment asking the author for an update.\n    If no response after the comment, close the issue with a polite message.\n  `,\n})\n","maintainer-workflow.ts",[81,887,888,906,924,928,948,962,974,989,999,1007,1015,1020,1025,1030,1036],{"__ignoreMap":92},[96,889,890,892,894,896,898,900,902,904],{"class":98,"line":99},[96,891,103],{"class":102},[96,893,107],{"class":106},[96,895,111],{"class":110},[96,897,114],{"class":106},[96,899,117],{"class":102},[96,901,120],{"class":106},[96,903,124],{"class":123},[96,905,127],{"class":106},[96,907,908,910,912,914,916,918,920,922],{"class":98,"line":130},[96,909,103],{"class":102},[96,911,107],{"class":106},[96,913,137],{"class":110},[96,915,114],{"class":106},[96,917,117],{"class":102},[96,919,120],{"class":106},[96,921,146],{"class":123},[96,923,127],{"class":106},[96,925,926],{"class":98,"line":151},[96,927,155],{"emptyLinePlaceholder":154},[96,929,930,932,934,936,938,940,942,944,946],{"class":98,"line":158},[96,931,162],{"class":161},[96,933,107],{"class":106},[96,935,167],{"class":110},[96,937,170],{"class":106},[96,939,173],{"class":106},[96,941,176],{"class":102},[96,943,137],{"class":179},[96,945,182],{"class":110},[96,947,185],{"class":106},[96,949,950,952,954,956,958,960],{"class":98,"line":188},[96,951,192],{"class":191},[96,953,195],{"class":106},[96,955,120],{"class":106},[96,957,200],{"class":123},[96,959,203],{"class":106},[96,961,206],{"class":106},[96,963,964,966,968,970,972],{"class":98,"line":209},[96,965,212],{"class":191},[96,967,195],{"class":106},[96,969,111],{"class":179},[96,971,182],{"class":110},[96,973,185],{"class":106},[96,975,976,978,980,982,985,987],{"class":98,"line":223},[96,977,226],{"class":191},[96,979,195],{"class":106},[96,981,120],{"class":106},[96,983,984],{"class":123},"maintainer",[96,986,203],{"class":106},[96,988,206],{"class":106},[96,990,991,993,995,997],{"class":98,"line":240},[96,992,419],{"class":191},[96,994,195],{"class":106},[96,996,447],{"class":434},[96,998,206],{"class":106},[96,1000,1001,1003,1005],{"class":98,"line":251},[96,1002,243],{"class":106},[96,1004,246],{"class":110},[96,1006,206],{"class":106},[96,1008,1009,1011,1013],{"class":98,"line":268},[96,1010,254],{"class":191},[96,1012,195],{"class":106},[96,1014,484],{"class":106},[96,1016,1017],{"class":98,"line":276},[96,1018,1019],{"class":123},"    Check if there are any stale issues (no activity for 30 days) on vercel-labs\u002Fgithub-tools.\n",[96,1021,1022],{"class":98,"line":281},[96,1023,1024],{"class":123},"    For each stale issue, post a comment asking the author for an update.\n",[96,1026,1027],{"class":98,"line":468},[96,1028,1029],{"class":123},"    If no response after the comment, close the issue with a polite message.\n",[96,1031,1032,1034],{"class":98,"line":477},[96,1033,508],{"class":106},[96,1035,206],{"class":106},[96,1037,1038,1040],{"class":98,"line":487},[96,1039,170],{"class":106},[96,1041,273],{"class":110},[72,1043,1045],{"id":1044},"reduce-tool-context-with-toolpick","Reduce tool context with toolpick",[77,1047,1048,1049,1055],{},"When using many tools, the model sees all tool definitions on every step — eating tokens and increasing latency. ",[306,1050,1054],{"href":1051,"rel":1052},"https:\u002F\u002Fgithub.com\u002Fpontusab\u002Ftoolpick",[1053],"nofollow","toolpick"," selects only the most relevant tools per step using keyword + semantic search:",[86,1057,1060],{"className":88,"code":1058,"filename":1059,"language":91,"meta":92,"style":92},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { createToolIndex } from 'toolpick'\nimport { generateText } from 'ai'\nimport { openai } from '@ai-sdk\u002Fopenai'\n\nconst tools = createGithubTools()\nconst index = createToolIndex(tools, {\n  embeddingModel: openai.embeddingModel('text-embedding-3-small'),\n})\n\nconst result = await generateText({\n  model: openai('gpt-4o'),\n  tools,\n  prepareStep: index.prepareStep(),\n  prompt: 'Check if the CI is passing on the main branch of vercel\u002Fai.',\n})\n","with-toolpick.ts",[81,1061,1062,1080,1099,1117,1137,1141,1155,1174,1201,1207,1211,1227,1248,1254,1274,1289],{"__ignoreMap":92},[96,1063,1064,1066,1068,1070,1072,1074,1076,1078],{"class":98,"line":99},[96,1065,103],{"class":102},[96,1067,107],{"class":106},[96,1069,111],{"class":110},[96,1071,114],{"class":106},[96,1073,117],{"class":102},[96,1075,120],{"class":106},[96,1077,124],{"class":123},[96,1079,127],{"class":106},[96,1081,1082,1084,1086,1089,1091,1093,1095,1097],{"class":98,"line":130},[96,1083,103],{"class":102},[96,1085,107],{"class":106},[96,1087,1088],{"class":110}," createToolIndex",[96,1090,114],{"class":106},[96,1092,117],{"class":102},[96,1094,120],{"class":106},[96,1096,1054],{"class":123},[96,1098,127],{"class":106},[96,1100,1101,1103,1105,1107,1109,1111,1113,1115],{"class":98,"line":151},[96,1102,103],{"class":102},[96,1104,107],{"class":106},[96,1106,137],{"class":110},[96,1108,114],{"class":106},[96,1110,117],{"class":102},[96,1112,120],{"class":106},[96,1114,146],{"class":123},[96,1116,127],{"class":106},[96,1118,1119,1121,1123,1126,1128,1130,1132,1135],{"class":98,"line":158},[96,1120,103],{"class":102},[96,1122,107],{"class":106},[96,1124,1125],{"class":110}," openai",[96,1127,114],{"class":106},[96,1129,117],{"class":102},[96,1131,120],{"class":106},[96,1133,1134],{"class":123},"@ai-sdk\u002Fopenai",[96,1136,127],{"class":106},[96,1138,1139],{"class":98,"line":188},[96,1140,155],{"emptyLinePlaceholder":154},[96,1142,1143,1145,1148,1150,1152],{"class":98,"line":209},[96,1144,162],{"class":161},[96,1146,1147],{"class":110}," tools ",[96,1149,567],{"class":106},[96,1151,111],{"class":179},[96,1153,1154],{"class":110},"()\n",[96,1156,1157,1159,1162,1164,1166,1169,1172],{"class":98,"line":223},[96,1158,162],{"class":161},[96,1160,1161],{"class":110}," index ",[96,1163,567],{"class":106},[96,1165,1088],{"class":179},[96,1167,1168],{"class":110},"(tools",[96,1170,1171],{"class":106},",",[96,1173,424],{"class":106},[96,1175,1176,1179,1181,1183,1185,1188,1190,1192,1195,1197,1199],{"class":98,"line":240},[96,1177,1178],{"class":191},"  embeddingModel",[96,1180,195],{"class":106},[96,1182,1125],{"class":110},[96,1184,287],{"class":106},[96,1186,1187],{"class":179},"embeddingModel",[96,1189,182],{"class":110},[96,1191,203],{"class":106},[96,1193,1194],{"class":123},"text-embedding-3-small",[96,1196,203],{"class":106},[96,1198,246],{"class":110},[96,1200,206],{"class":106},[96,1202,1203,1205],{"class":98,"line":251},[96,1204,170],{"class":106},[96,1206,273],{"class":110},[96,1208,1209],{"class":98,"line":268},[96,1210,155],{"emptyLinePlaceholder":154},[96,1212,1213,1215,1217,1219,1221,1223,1225],{"class":98,"line":276},[96,1214,162],{"class":161},[96,1216,737],{"class":110},[96,1218,567],{"class":106},[96,1220,176],{"class":102},[96,1222,137],{"class":179},[96,1224,182],{"class":110},[96,1226,185],{"class":106},[96,1228,1229,1231,1233,1235,1237,1239,1242,1244,1246],{"class":98,"line":281},[96,1230,192],{"class":191},[96,1232,195],{"class":106},[96,1234,1125],{"class":179},[96,1236,182],{"class":110},[96,1238,203],{"class":106},[96,1240,1241],{"class":123},"gpt-4o",[96,1243,203],{"class":106},[96,1245,246],{"class":110},[96,1247,206],{"class":106},[96,1249,1250,1252],{"class":98,"line":468},[96,1251,212],{"class":110},[96,1253,206],{"class":106},[96,1255,1256,1259,1261,1264,1266,1269,1272],{"class":98,"line":477},[96,1257,1258],{"class":191},"  prepareStep",[96,1260,195],{"class":106},[96,1262,1263],{"class":110}," index",[96,1265,287],{"class":106},[96,1267,1268],{"class":179},"prepareStep",[96,1270,1271],{"class":110},"()",[96,1273,206],{"class":106},[96,1275,1276,1278,1280,1282,1285,1287],{"class":98,"line":487},[96,1277,254],{"class":191},[96,1279,195],{"class":106},[96,1281,120],{"class":106},[96,1283,1284],{"class":123},"Check if the CI is passing on the main branch of vercel\u002Fai.",[96,1286,203],{"class":106},[96,1288,206],{"class":106},[96,1290,1291,1293],{"class":98,"line":493},[96,1292,170],{"class":106},[96,1294,273],{"class":110},[77,1296,1297,1298,1301],{},"Each step, toolpick picks the best ~5 tools. All tools remain callable — only the visible set changes. Add a ",[81,1299,1300],{},"rerankerModel"," for maximum accuracy on ambiguous queries:",[86,1303,1306],{"className":88,"code":1304,"filename":1305,"language":91,"meta":92,"style":92},"const index = createToolIndex(tools, {\n  embeddingModel: openai.embeddingModel('text-embedding-3-small'),\n  rerankerModel: openai('gpt-4o-mini'),\n})\n","with-reranking.ts",[81,1307,1308,1324,1348,1370],{"__ignoreMap":92},[96,1309,1310,1312,1314,1316,1318,1320,1322],{"class":98,"line":99},[96,1311,162],{"class":161},[96,1313,1161],{"class":110},[96,1315,567],{"class":106},[96,1317,1088],{"class":179},[96,1319,1168],{"class":110},[96,1321,1171],{"class":106},[96,1323,424],{"class":106},[96,1325,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346],{"class":98,"line":130},[96,1327,1178],{"class":191},[96,1329,195],{"class":106},[96,1331,1125],{"class":110},[96,1333,287],{"class":106},[96,1335,1187],{"class":179},[96,1337,182],{"class":110},[96,1339,203],{"class":106},[96,1341,1194],{"class":123},[96,1343,203],{"class":106},[96,1345,246],{"class":110},[96,1347,206],{"class":106},[96,1349,1350,1353,1355,1357,1359,1361,1364,1366,1368],{"class":98,"line":151},[96,1351,1352],{"class":191},"  rerankerModel",[96,1354,195],{"class":106},[96,1356,1125],{"class":179},[96,1358,182],{"class":110},[96,1360,203],{"class":106},[96,1362,1363],{"class":123},"gpt-4o-mini",[96,1365,203],{"class":106},[96,1367,246],{"class":110},[96,1369,206],{"class":106},[96,1371,1372,1374],{"class":98,"line":158},[96,1373,170],{"class":106},[96,1375,273],{"class":110},[77,1377,1378,1379,1383],{},"See ",[306,1380,1382],{"href":1051,"rel":1381},[1053],"toolpick docs"," for caching, description enrichment, and model-driven discovery options.",[72,1385,1387],{"id":1386},"durable-streaming-agent-vercel-workflow","Durable streaming agent (Vercel Workflow)",[77,1389,1390,1391,1397,1398,1401,1402,1405,1406,195],{},"For production chat or long GitHub automations, pair ",[1392,1393,1394],"strong",{},[81,1395,1396],{},"createDurableGithubAgent"," with ",[81,1399,1400],{},"\"use workflow\""," so the run survives timeouts and restarts. Each tool call is already a ",[1392,1403,1404],{},"durable"," ",[81,1407,1408],{},"\"use step\"",[86,1410,1413],{"className":88,"code":1411,"filename":1412,"language":91,"meta":92,"style":92},"import { createDurableGithubAgent } from '@github-tools\u002Fsdk\u002Fworkflow'\nimport { getWritable } from 'workflow'\nimport type { ModelMessage, UIMessageChunk } from 'ai'\n\nexport async function streamDurableGithubChat(\n  messages: ModelMessage[],\n  token: string,\n  model: string\n) {\n  'use workflow'\n\n  const agent = createDurableGithubAgent({\n    model,\n    token,\n    preset: 'maintainer',\n  })\n  const writable = getWritable\u003CUIMessageChunk>()\n  await agent.stream({ messages, writable })\n}\n","durable-stream.workflow.ts",[81,1414,1415,1435,1455,1482,1486,1503,1519,1531,1540,1546,1556,1560,1576,1583,1590,1604,1610,1632,1660],{"__ignoreMap":92},[96,1416,1417,1419,1421,1424,1426,1428,1430,1433],{"class":98,"line":99},[96,1418,103],{"class":102},[96,1420,107],{"class":106},[96,1422,1423],{"class":110}," createDurableGithubAgent",[96,1425,114],{"class":106},[96,1427,117],{"class":102},[96,1429,120],{"class":106},[96,1431,1432],{"class":123},"@github-tools\u002Fsdk\u002Fworkflow",[96,1434,127],{"class":106},[96,1436,1437,1439,1441,1444,1446,1448,1450,1453],{"class":98,"line":130},[96,1438,103],{"class":102},[96,1440,107],{"class":106},[96,1442,1443],{"class":110}," getWritable",[96,1445,114],{"class":106},[96,1447,117],{"class":102},[96,1449,120],{"class":106},[96,1451,1452],{"class":123},"workflow",[96,1454,127],{"class":106},[96,1456,1457,1459,1462,1464,1467,1469,1472,1474,1476,1478,1480],{"class":98,"line":151},[96,1458,103],{"class":102},[96,1460,1461],{"class":102}," type",[96,1463,107],{"class":106},[96,1465,1466],{"class":110}," ModelMessage",[96,1468,1171],{"class":106},[96,1470,1471],{"class":110}," UIMessageChunk",[96,1473,114],{"class":106},[96,1475,117],{"class":102},[96,1477,120],{"class":106},[96,1479,146],{"class":123},[96,1481,127],{"class":106},[96,1483,1484],{"class":98,"line":158},[96,1485,155],{"emptyLinePlaceholder":154},[96,1487,1488,1491,1494,1497,1500],{"class":98,"line":188},[96,1489,1490],{"class":102},"export",[96,1492,1493],{"class":161}," async",[96,1495,1496],{"class":161}," function",[96,1498,1499],{"class":179}," streamDurableGithubChat",[96,1501,1502],{"class":106},"(\n",[96,1504,1505,1509,1511,1514,1517],{"class":98,"line":209},[96,1506,1508],{"class":1507},"sHdIc","  messages",[96,1510,195],{"class":106},[96,1512,1466],{"class":1513},"sBMFI",[96,1515,1516],{"class":110},"[]",[96,1518,206],{"class":106},[96,1520,1521,1524,1526,1529],{"class":98,"line":223},[96,1522,1523],{"class":1507},"  token",[96,1525,195],{"class":106},[96,1527,1528],{"class":1513}," string",[96,1530,206],{"class":106},[96,1532,1533,1535,1537],{"class":98,"line":240},[96,1534,192],{"class":1507},[96,1536,195],{"class":106},[96,1538,1539],{"class":1513}," string\n",[96,1541,1542,1544],{"class":98,"line":251},[96,1543,246],{"class":106},[96,1545,424],{"class":106},[96,1547,1548,1551,1554],{"class":98,"line":268},[96,1549,1550],{"class":106},"  '",[96,1552,1553],{"class":123},"use workflow",[96,1555,127],{"class":106},[96,1557,1558],{"class":98,"line":276},[96,1559,155],{"emptyLinePlaceholder":154},[96,1561,1562,1565,1568,1570,1572,1574],{"class":98,"line":281},[96,1563,1564],{"class":161},"  const",[96,1566,1567],{"class":110}," agent",[96,1569,173],{"class":106},[96,1571,1423],{"class":179},[96,1573,182],{"class":191},[96,1575,185],{"class":106},[96,1577,1578,1581],{"class":98,"line":468},[96,1579,1580],{"class":110},"    model",[96,1582,206],{"class":106},[96,1584,1585,1588],{"class":98,"line":477},[96,1586,1587],{"class":110},"    token",[96,1589,206],{"class":106},[96,1591,1592,1594,1596,1598,1600,1602],{"class":98,"line":487},[96,1593,226],{"class":191},[96,1595,195],{"class":106},[96,1597,120],{"class":106},[96,1599,984],{"class":123},[96,1601,203],{"class":106},[96,1603,206],{"class":106},[96,1605,1606,1608],{"class":98,"line":493},[96,1607,243],{"class":106},[96,1609,273],{"class":191},[96,1611,1612,1614,1617,1619,1621,1624,1627,1630],{"class":98,"line":499},[96,1613,1564],{"class":161},[96,1615,1616],{"class":110}," writable",[96,1618,173],{"class":106},[96,1620,1443],{"class":179},[96,1622,1623],{"class":106},"\u003C",[96,1625,1626],{"class":1513},"UIMessageChunk",[96,1628,1629],{"class":106},">",[96,1631,1154],{"class":191},[96,1633,1634,1637,1639,1641,1644,1646,1649,1652,1654,1656,1658],{"class":98,"line":505},[96,1635,1636],{"class":102},"  await",[96,1638,1567],{"class":110},[96,1640,287],{"class":106},[96,1642,1643],{"class":179},"stream",[96,1645,182],{"class":191},[96,1647,1648],{"class":106},"{",[96,1650,1651],{"class":110}," messages",[96,1653,1171],{"class":106},[96,1655,1616],{"class":110},[96,1657,114],{"class":106},[96,1659,273],{"class":191},[96,1661,1662],{"class":98,"line":513},[96,1663,874],{"class":106},[77,1665,1666,1669,1670,1673,1674,1676,1677,287],{},[81,1667,1668],{},"requireApproval"," is not enforced by ",[81,1671,1672],{},"DurableAgent"," today — plan access control in your route or use ",[81,1675,527],{}," when you need approval UX. More detail: ",[306,1678,51],{"href":52},[72,1680,1682],{"id":1681},"github-bot-chat-sdk-workflow","GitHub bot (Chat SDK + Workflow)",[77,1684,1685,1686,1691,1692,1694],{},"A complete, durable PR review agent connected to GitHub via ",[306,1687,1690],{"href":1688,"rel":1689},"https:\u002F\u002Fchat-sdk.dev",[1053],"Chat SDK",". When someone @mentions the agent on a PR, a durable workflow runs the ",[81,1693,233],{}," agent — reading files, commits, and diffs using GitHub tools — then posts the review as a comment. Follow-up messages resume the same workflow.",[77,1696,1697,1698,1705],{},"The full example lives in ",[306,1699,1702],{"href":1700,"rel":1701},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fgithub-tools\u002Ftree\u002Fmain\u002Fexamples\u002Fpr-review-agent",[1053],[81,1703,1704],{},"examples\u002Fpr-review-agent\u002F",". It combines four primitives in ~60 lines of code:",[1707,1708,1709,1724,1735,1751],"ul",{},[1710,1711,1712,1716,1717,1720,1721,1723],"li",{},[1392,1713,1714],{},[81,1715,124],{}," — ",[81,1718,1719],{},"createGithubTools"," with the ",[81,1722,233],{}," preset",[1710,1725,1726,1716,1731,1734],{},[1392,1727,1728],{},[306,1729,1690],{"href":1688,"rel":1730},[1053],[81,1732,1733],{},"@chat-adapter\u002Fgithub"," for webhook handling and thread management",[1710,1736,1737,1716,1744,1746,1747,1750],{},[1392,1738,1739],{},[306,1740,1743],{"href":1741,"rel":1742},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fworkflow",[1053],"Vercel Workflow",[81,1745,1400],{}," + ",[81,1748,1749],{},"createHook"," for durable, multi-turn sessions",[1710,1752,1753,1716,1760,1763],{},[1392,1754,1755],{},[306,1756,1759],{"href":1757,"rel":1758},"https:\u002F\u002Fevlog.dev",[1053],"evlog",[81,1761,1762],{},"createAILogger"," for AI observability (tokens, tool calls, cost)",[86,1765,1768],{"className":88,"code":1766,"filename":1767,"language":91,"meta":92,"style":92},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { generateText } from 'ai'\nimport { createLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nasync function runAgentTurn(prompt: string) {\n  'use step'\n\n  const log = createLogger()\n  const ai = createAILogger(log, { toolInputs: { maxLength: 500 } })\n\n  const result = await generateText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    tools: createGithubTools({ preset: 'code-review' }),\n    prompt,\n    maxSteps: 15,\n  })\n\n  log.emit()\n  return result.text\n}\n","review.ts (workflow)",[81,1769,1770,1788,1806,1825,1845,1849,1872,1881,1885,1898,1939,1943,1959,1984,2013,2020,2032,2038,2042,2054,2067],{"__ignoreMap":92},[96,1771,1772,1774,1776,1778,1780,1782,1784,1786],{"class":98,"line":99},[96,1773,103],{"class":102},[96,1775,107],{"class":106},[96,1777,111],{"class":110},[96,1779,114],{"class":106},[96,1781,117],{"class":102},[96,1783,120],{"class":106},[96,1785,124],{"class":123},[96,1787,127],{"class":106},[96,1789,1790,1792,1794,1796,1798,1800,1802,1804],{"class":98,"line":130},[96,1791,103],{"class":102},[96,1793,107],{"class":106},[96,1795,137],{"class":110},[96,1797,114],{"class":106},[96,1799,117],{"class":102},[96,1801,120],{"class":106},[96,1803,146],{"class":123},[96,1805,127],{"class":106},[96,1807,1808,1810,1812,1815,1817,1819,1821,1823],{"class":98,"line":151},[96,1809,103],{"class":102},[96,1811,107],{"class":106},[96,1813,1814],{"class":110}," createLogger",[96,1816,114],{"class":106},[96,1818,117],{"class":102},[96,1820,120],{"class":106},[96,1822,1759],{"class":123},[96,1824,127],{"class":106},[96,1826,1827,1829,1831,1834,1836,1838,1840,1843],{"class":98,"line":158},[96,1828,103],{"class":102},[96,1830,107],{"class":106},[96,1832,1833],{"class":110}," createAILogger",[96,1835,114],{"class":106},[96,1837,117],{"class":102},[96,1839,120],{"class":106},[96,1841,1842],{"class":123},"evlog\u002Fai",[96,1844,127],{"class":106},[96,1846,1847],{"class":98,"line":188},[96,1848,155],{"emptyLinePlaceholder":154},[96,1850,1851,1854,1856,1859,1861,1864,1866,1868,1870],{"class":98,"line":209},[96,1852,1853],{"class":161},"async",[96,1855,1496],{"class":161},[96,1857,1858],{"class":179}," runAgentTurn",[96,1860,182],{"class":106},[96,1862,1863],{"class":1507},"prompt",[96,1865,195],{"class":106},[96,1867,1528],{"class":1513},[96,1869,246],{"class":106},[96,1871,424],{"class":106},[96,1873,1874,1876,1879],{"class":98,"line":223},[96,1875,1550],{"class":106},[96,1877,1878],{"class":123},"use step",[96,1880,127],{"class":106},[96,1882,1883],{"class":98,"line":240},[96,1884,155],{"emptyLinePlaceholder":154},[96,1886,1887,1889,1892,1894,1896],{"class":98,"line":251},[96,1888,1564],{"class":161},[96,1890,1891],{"class":110}," log",[96,1893,173],{"class":106},[96,1895,1814],{"class":179},[96,1897,1154],{"class":191},[96,1899,1900,1902,1905,1907,1909,1911,1913,1915,1917,1920,1922,1924,1927,1929,1933,1935,1937],{"class":98,"line":268},[96,1901,1564],{"class":161},[96,1903,1904],{"class":110}," ai",[96,1906,173],{"class":106},[96,1908,1833],{"class":179},[96,1910,182],{"class":191},[96,1912,290],{"class":110},[96,1914,1171],{"class":106},[96,1916,107],{"class":106},[96,1918,1919],{"class":191}," toolInputs",[96,1921,195],{"class":106},[96,1923,107],{"class":106},[96,1925,1926],{"class":191}," maxLength",[96,1928,195],{"class":106},[96,1930,1932],{"class":1931},"sbssI"," 500",[96,1934,114],{"class":106},[96,1936,114],{"class":106},[96,1938,273],{"class":191},[96,1940,1941],{"class":98,"line":276},[96,1942,155],{"emptyLinePlaceholder":154},[96,1944,1945,1947,1949,1951,1953,1955,1957],{"class":98,"line":281},[96,1946,1564],{"class":161},[96,1948,840],{"class":110},[96,1950,173],{"class":106},[96,1952,176],{"class":102},[96,1954,137],{"class":179},[96,1956,182],{"class":191},[96,1958,185],{"class":106},[96,1960,1961,1963,1965,1967,1969,1972,1974,1976,1978,1980,1982],{"class":98,"line":468},[96,1962,1580],{"class":191},[96,1964,195],{"class":106},[96,1966,1904],{"class":110},[96,1968,287],{"class":106},[96,1970,1971],{"class":179},"wrap",[96,1973,182],{"class":191},[96,1975,203],{"class":106},[96,1977,200],{"class":123},[96,1979,203],{"class":106},[96,1981,246],{"class":191},[96,1983,206],{"class":106},[96,1985,1986,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011],{"class":98,"line":477},[96,1987,1988],{"class":191},"    tools",[96,1990,195],{"class":106},[96,1992,111],{"class":179},[96,1994,182],{"class":191},[96,1996,1648],{"class":106},[96,1998,1723],{"class":191},[96,2000,195],{"class":106},[96,2002,120],{"class":106},[96,2004,233],{"class":123},[96,2006,203],{"class":106},[96,2008,114],{"class":106},[96,2010,246],{"class":191},[96,2012,206],{"class":106},[96,2014,2015,2018],{"class":98,"line":487},[96,2016,2017],{"class":110},"    prompt",[96,2019,206],{"class":106},[96,2021,2022,2025,2027,2030],{"class":98,"line":493},[96,2023,2024],{"class":191},"    maxSteps",[96,2026,195],{"class":106},[96,2028,2029],{"class":1931}," 15",[96,2031,206],{"class":106},[96,2033,2034,2036],{"class":98,"line":499},[96,2035,243],{"class":106},[96,2037,273],{"class":191},[96,2039,2040],{"class":98,"line":505},[96,2041,155],{"emptyLinePlaceholder":154},[96,2043,2044,2047,2049,2052],{"class":98,"line":513},[96,2045,2046],{"class":110},"  log",[96,2048,287],{"class":106},[96,2050,2051],{"class":179},"emit",[96,2053,1154],{"class":191},[96,2055,2057,2060,2062,2064],{"class":98,"line":2056},20,[96,2058,2059],{"class":102},"  return",[96,2061,840],{"class":110},[96,2063,287],{"class":106},[96,2065,2066],{"class":110},"text\n",[96,2068,2070],{"class":98,"line":2069},21,[96,2071,874],{"class":106},[72,2073,2075],{"id":2074},"choose-the-right-pattern","Choose the right pattern",[2077,2078,2079,2095],"table",{},[2080,2081,2082],"thead",{},[2083,2084,2085,2089,2092],"tr",{},[2086,2087,2088],"th",{},"Pattern",[2086,2090,2091],{},"Entry point",[2086,2093,2094],{},"Best for",[2096,2097,2098,2113,2128,2140,2157],"tbody",{},[2083,2099,2100,2104,2110],{},[2101,2102,2103],"td",{},"One-shot generation",[2101,2105,2106,1746,2108],{},[81,2107,83],{},[81,2109,1719],{},[2101,2111,2112],{},"scripts, CLI tools, batch jobs",[2083,2114,2115,2118,2125],{},[2101,2116,2117],{},"Streaming",[2101,2119,2120,1746,2123],{},[81,2121,2122],{},"streamText",[81,2124,1719],{},[2101,2126,2127],{},"chat UIs, interactive terminals",[2083,2129,2130,2133,2137],{},[2101,2131,2132],{},"Reusable agent",[2101,2134,2135],{},[81,2136,527],{},[2101,2138,2139],{},"multi-turn assistants, persistent bots",[2083,2141,2142,2148,2154],{},[2101,2143,2144,2147],{},[1392,2145,2146],{},"Durable"," agent + streaming",[2101,2149,2150,1746,2152],{},[81,2151,1396],{},[81,2153,1400],{},[2101,2155,2156],{},"hosted chat, crash-safe tool loops, Nuxt\u002FNext APIs on Vercel",[2083,2158,2159,2164,2169],{},[2101,2160,2161],{},[1392,2162,2163],{},"Platform bot",[2101,2165,2166,2168],{},[81,2167,1719],{}," + Chat SDK + Workflow",[2101,2170,2171],{},"GitHub\u002FSlack\u002FDiscord bots with durable multi-turn sessions",[77,2173,1378,2174,2176,2177,2179],{},[306,2175,63],{"href":64}," for the full type signatures and ",[306,2178,59],{"href":60}," for every available tool.",[2181,2182,2183],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":92,"searchDepth":130,"depth":130,"links":2185},[2186,2187,2188,2189,2191,2192,2193,2194,2195,2196],{"id":74,"depth":130,"text":75},{"id":296,"depth":130,"text":297},{"id":520,"depth":130,"text":521},{"id":641,"depth":130,"text":2190},"AI assistant prompt (createGithubAgent)",{"id":679,"depth":130,"text":680},{"id":877,"depth":130,"text":878},{"id":1044,"depth":130,"text":1045},{"id":1386,"depth":130,"text":1387},{"id":1681,"depth":130,"text":1682},{"id":2074,"depth":130,"text":2075},"Complete scripts and agent patterns you can copy and adapt.","md",[2200,2204,2206,2209],{"label":63,"icon":2201,"to":64,"color":2202,"variant":2203},"i-lucide-braces","neutral","subtle",{"label":18,"icon":2205,"to":19,"color":2202,"variant":2203},"i-lucide-sparkles",{"label":2207,"icon":2208,"to":52,"color":2202,"variant":2203},"Durable workflows","i-lucide-refresh-cw",{"label":2210,"icon":2211,"to":60,"color":2202,"variant":2203},"Browse all tools","i-lucide-list-tree",{},{"title":47,"description":2197},"zG6ObkCYVBL5_D1oJlgbKWgC6sEEMf8D4fxzC5sak9I",[2216,2218],{"title":43,"path":44,"stem":45,"description":2217,"children":-1},"Map GitHub token permissions to each preset and tool family.",{"title":51,"path":52,"stem":53,"description":2219,"children":-1},"Run GitHub tools as durable, retryable steps with createDurableGithubAgent and the Vercel Workflow SDK.",1779365451999]