[{"data":1,"prerenderedAt":1718},["ShallowReactive",2],{"navigation_docs":3,"-examples-recipes":125,"-examples-recipes-surround":1713},[4,26,49,81,105,117],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Getting Started","\u002Fgetting-started","docs",[9,13,17,21],{"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},"Quick Start","\u002Fgetting-started\u002Fquick-start","docs\u002F1.getting-started\u002F3.quick-start",{"title":22,"path":23,"stem":24},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","docs\u002F1.getting-started\u002F4.agent-skills",false,{"title":27,"path":28,"stem":7,"children":29,"page":25},"Frameworks","\u002Fframeworks",[30,35,40,44],{"title":31,"path":32,"stem":33,"icon":34},"eve extension","\u002Fframeworks\u002Feve-extension","docs\u002F2.frameworks\u002F1.eve-extension","i-custom:eve",{"title":36,"path":37,"stem":38,"icon":39},"AI SDK","\u002Fframeworks\u002Fai-sdk","docs\u002F2.frameworks\u002F2.ai-sdk","i-simple-icons-vercel",{"title":41,"path":42,"stem":43,"icon":39},"Vercel Workflow","\u002Fframeworks\u002Fvercel-workflow","docs\u002F2.frameworks\u002F3.vercel-workflow",{"title":45,"path":46,"stem":47,"icon":48},"Chat SDK","\u002Fframeworks\u002Fchat-sdk","docs\u002F2.frameworks\u002F4.chat-sdk","i-lucide-message-square",{"title":50,"path":51,"stem":7,"children":52,"page":25},"Examples","\u002Fexamples",[53,57,61,65,69,73,77],{"title":54,"path":55,"stem":56},"Overview","\u002Fexamples\u002Foverview","docs\u002F3.examples\u002F1.overview",{"title":58,"path":59,"stem":60,"icon":34},"Stale issue triager","\u002Fexamples\u002Feve-stale-issue-triager","docs\u002F3.examples\u002F2.eve-stale-issue-triager",{"title":62,"path":63,"stem":64,"icon":39},"Release notes generator","\u002Fexamples\u002Fai-sdk-release-notes-generator","docs\u002F3.examples\u002F3.ai-sdk-release-notes-generator",{"title":66,"path":67,"stem":68,"icon":39},"CI failure bot","\u002Fexamples\u002Fvercel-workflow-ci-failure-bot","docs\u002F3.examples\u002F4.vercel-workflow-ci-failure-bot",{"title":70,"path":71,"stem":72,"icon":48},"Issue triage bot","\u002Fexamples\u002Fchat-sdk-issue-triage-bot","docs\u002F3.examples\u002F5.chat-sdk-issue-triage-bot",{"title":74,"path":75,"stem":76,"icon":34},"Manager & sub-agents","\u002Fexamples\u002Fmanager-agent-with-subagents","docs\u002F3.examples\u002F6.manager-agent-with-subagents",{"title":78,"path":79,"stem":80},"Recipes","\u002Fexamples\u002Frecipes","docs\u002F3.examples\u002F7.recipes",{"title":82,"path":83,"stem":7,"children":84,"page":25},"Guide","\u002Fguide",[85,89,93,97,101],{"title":86,"path":87,"stem":88},"Scope with Presets","\u002Fguide\u002Fpresets","docs\u002F4.guide\u002F1.presets",{"title":90,"path":91,"stem":92},"Control Write Safety","\u002Fguide\u002Fapproval-control","docs\u002F4.guide\u002F2.approval-control",{"title":94,"path":95,"stem":96},"Commit Attribution","\u002Fguide\u002Fcommit-attribution","docs\u002F4.guide\u002F3.commit-attribution",{"title":98,"path":99,"stem":100},"Tokens & Auth","\u002Fguide\u002Ftokens-and-auth","docs\u002F4.guide\u002F4.tokens-and-auth",{"title":102,"path":103,"stem":104},"Vercel Connect","\u002Fguide\u002Fvercel-connect","docs\u002F4.guide\u002F5.vercel-connect",{"title":106,"path":107,"stem":7,"children":108,"page":25},"Api","\u002Fapi",[109,113],{"title":110,"path":111,"stem":112},"Tools Catalog","\u002Fapi\u002Ftools-catalog","docs\u002F5.api\u002F1.tools-catalog",{"title":114,"path":115,"stem":116},"API Reference","\u002Fapi\u002Freference","docs\u002F5.api\u002F2.reference",{"title":118,"path":119,"stem":7,"children":120,"page":25},"Deprecated","\u002Fdeprecated",[121],{"title":122,"path":123,"stem":124,"icon":34},"eve (direct import)","\u002Fdeprecated\u002Feve","docs\u002F6.deprecated\u002F1.eve",{"id":126,"title":78,"body":127,"description":1698,"extension":1699,"links":1700,"meta":1709,"navigation":1710,"path":79,"seo":1711,"stem":80,"__hash__":1712},"docs\u002Fdocs\u002F3.examples\u002F7.recipes.md",{"type":128,"value":129,"toc":1689},"minimark",[130,144,160,165,168,433,441,445,452,563,567,570,758,762,765,925,932,936,945,1184,1191,1265,1272,1276,1285,1534,1538,1677,1685],[131,132,136,137,143],"prompt",{":actions":133,"description":134,"icon":135},"[\"copy\",\"cursor\",\"windsurf\"]","Apply a github-tools recipe to this project","i-lucide-code","Apply one of the github-tools recipes at ",[138,139,140],"a",{"href":140,"rel":141},"https:\u002F\u002Fgithub-tools.com\u002Fexamples\u002Frecipes",[142],"nofollow"," to this project: selective approval, a reusable review agent, read-only exploration, toolpick tool selection, or evlog observability, whichever matches the current task.",[145,146,147,148,151,152,156,157,159],"p",{},"Shorter than the ",[138,149,150],{"href":55},"full examples",", these are single-file snippets for one specific technique. Each one reads ",[153,154,155],"code",{},"GITHUB_TOKEN"," from the environment by default, swap in ",[138,158,102],{"href":103}," if you're deploying on Vercel.",[161,162,164],"h2",{"id":163},"triage-incoming-issues-with-selective-approval","Triage incoming issues with selective approval",[145,166,167],{},"Approves destructive actions but lets comments through unattended:",[169,170,176],"pre",{"className":171,"code":172,"filename":173,"language":174,"meta":175,"style":175},"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: '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","ts","",[153,177,178,211,232,239,269,290,304,321,332,346,359,371,377,388,399,405,411,417,425],{"__ignoreMap":175},[179,180,183,187,191,195,198,201,204,208],"span",{"class":181,"line":182},"line",1,[179,184,186],{"class":185},"s7zQu","import",[179,188,190],{"class":189},"sMK4o"," {",[179,192,194],{"class":193},"sTEyZ"," createGithubTools",[179,196,197],{"class":189}," }",[179,199,200],{"class":185}," from",[179,202,203],{"class":189}," '",[179,205,207],{"class":206},"sfazB","@github-tools\u002Fsdk",[179,209,210],{"class":189},"'\n",[179,212,214,216,218,221,223,225,227,230],{"class":181,"line":213},2,[179,215,186],{"class":185},[179,217,190],{"class":189},[179,219,220],{"class":193}," generateText",[179,222,197],{"class":189},[179,224,200],{"class":185},[179,226,203],{"class":189},[179,228,229],{"class":206},"ai",[179,231,210],{"class":189},[179,233,235],{"class":181,"line":234},3,[179,236,238],{"emptyLinePlaceholder":237},true,"\n",[179,240,242,246,248,251,254,257,260,263,266],{"class":181,"line":241},4,[179,243,245],{"class":244},"spNyl","const",[179,247,190],{"class":189},[179,249,250],{"class":193}," text ",[179,252,253],{"class":189},"}",[179,255,256],{"class":189}," =",[179,258,259],{"class":185}," await",[179,261,220],{"class":262},"s2Zo4",[179,264,265],{"class":193},"(",[179,267,268],{"class":189},"{\n",[179,270,272,276,279,281,284,287],{"class":181,"line":271},5,[179,273,275],{"class":274},"swJcz","  model",[179,277,278],{"class":189},":",[179,280,203],{"class":189},[179,282,283],{"class":206},"anthropic\u002Fclaude-sonnet-4.6",[179,285,286],{"class":189},"'",[179,288,289],{"class":189},",\n",[179,291,293,296,298,300,302],{"class":181,"line":292},6,[179,294,295],{"class":274},"  tools",[179,297,278],{"class":189},[179,299,194],{"class":262},[179,301,265],{"class":193},[179,303,268],{"class":189},[179,305,307,310,312,314,317,319],{"class":181,"line":306},7,[179,308,309],{"class":274},"    preset",[179,311,278],{"class":189},[179,313,203],{"class":189},[179,315,316],{"class":206},"issue-triage",[179,318,286],{"class":189},[179,320,289],{"class":189},[179,322,324,327,329],{"class":181,"line":323},8,[179,325,326],{"class":274},"    requireApproval",[179,328,278],{"class":189},[179,330,331],{"class":189}," {\n",[179,333,335,338,340,344],{"class":181,"line":334},9,[179,336,337],{"class":274},"      addIssueComment",[179,339,278],{"class":189},[179,341,343],{"class":342},"sfNiH"," false",[179,345,289],{"class":189},[179,347,349,352,354,357],{"class":181,"line":348},10,[179,350,351],{"class":274},"      closeIssue",[179,353,278],{"class":189},[179,355,356],{"class":342}," true",[179,358,289],{"class":189},[179,360,362,365,367,369],{"class":181,"line":361},11,[179,363,364],{"class":274},"      createIssue",[179,366,278],{"class":189},[179,368,356],{"class":342},[179,370,289],{"class":189},[179,372,374],{"class":181,"line":373},12,[179,375,376],{"class":189},"    },\n",[179,378,380,383,386],{"class":181,"line":379},13,[179,381,382],{"class":189},"  }",[179,384,385],{"class":193},")",[179,387,289],{"class":189},[179,389,391,394,396],{"class":181,"line":390},14,[179,392,393],{"class":274},"  prompt",[179,395,278],{"class":189},[179,397,398],{"class":189}," `\n",[179,400,402],{"class":181,"line":401},15,[179,403,404],{"class":206},"    Read all issues labeled \"needs-triage\" on vercel-labs\u002Fgithub-tools.\n",[179,406,408],{"class":181,"line":407},16,[179,409,410],{"class":206},"    For each one, classify it as bug, feature, or question.\n",[179,412,414],{"class":181,"line":413},17,[179,415,416],{"class":206},"    Post a comment with the classification and a suggested next step.\n",[179,418,420,423],{"class":181,"line":419},18,[179,421,422],{"class":189},"  `",[179,424,289],{"class":189},[179,426,428,430],{"class":181,"line":427},19,[179,429,253],{"class":189},[179,431,432],{"class":193},")\n",[145,434,435,436,440],{},"See ",[138,437,439],{"href":438},"\u002Fguide\u002Fapproval-control#configure-approval-per-operation","Configure approval per operation"," for the full risk table.",[161,442,444],{"id":443},"build-a-reusable-review-agent","Build a reusable review agent",[145,446,447,448,451],{},"For behavior shared across multiple calls, use ",[153,449,450],{},"createGithubAgent"," once and call it repeatedly:",[169,453,456],{"className":171,"code":454,"filename":455,"language":174,"meta":175,"style":175},"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",[153,457,458,477,481,497,511,527,536,541,546,551,557],{"__ignoreMap":175},[179,459,460,462,464,467,469,471,473,475],{"class":181,"line":182},[179,461,186],{"class":185},[179,463,190],{"class":189},[179,465,466],{"class":193}," createGithubAgent",[179,468,197],{"class":189},[179,470,200],{"class":185},[179,472,203],{"class":189},[179,474,207],{"class":206},[179,476,210],{"class":189},[179,478,479],{"class":181,"line":213},[179,480,238],{"emptyLinePlaceholder":237},[179,482,483,485,488,491,493,495],{"class":181,"line":234},[179,484,245],{"class":244},[179,486,487],{"class":193}," reviewer ",[179,489,490],{"class":189},"=",[179,492,466],{"class":262},[179,494,265],{"class":193},[179,496,268],{"class":189},[179,498,499,501,503,505,507,509],{"class":181,"line":241},[179,500,275],{"class":274},[179,502,278],{"class":189},[179,504,203],{"class":189},[179,506,283],{"class":206},[179,508,286],{"class":189},[179,510,289],{"class":189},[179,512,513,516,518,520,523,525],{"class":181,"line":271},[179,514,515],{"class":274},"  preset",[179,517,278],{"class":189},[179,519,203],{"class":189},[179,521,522],{"class":206},"code-review",[179,524,286],{"class":189},[179,526,289],{"class":189},[179,528,529,532,534],{"class":181,"line":292},[179,530,531],{"class":274},"  system",[179,533,278],{"class":189},[179,535,398],{"class":189},[179,537,538],{"class":181,"line":306},[179,539,540],{"class":206},"    You review pull requests for code quality and security issues.\n",[179,542,543],{"class":181,"line":323},[179,544,545],{"class":206},"    Always cite specific file paths and line numbers.\n",[179,547,548],{"class":181,"line":334},[179,549,550],{"class":206},"    Never approve a PR that introduces console.log statements.\n",[179,552,553,555],{"class":181,"line":348},[179,554,422],{"class":189},[179,556,289],{"class":189},[179,558,559,561],{"class":181,"line":361},[179,560,253],{"class":189},[179,562,432],{"class":193},[161,564,566],{"id":565},"explore-a-repository-read-only","Explore a repository, read-only",[145,568,569],{},"A script with no write permissions at all, safe to run against any repo:",[169,571,574],{"className":171,"code":572,"filename":573,"language":174,"meta":175,"style":175},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { streamText } from 'ai'\n\nconst result = streamText({\n  model: 'anthropic\u002Fclaude-sonnet-4.6',\n  tools: createGithubTools({ preset: 'repo-explorer' }),\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",[153,575,576,594,613,617,632,646,677,692,698,702,731,753],{"__ignoreMap":175},[179,577,578,580,582,584,586,588,590,592],{"class":181,"line":182},[179,579,186],{"class":185},[179,581,190],{"class":189},[179,583,194],{"class":193},[179,585,197],{"class":189},[179,587,200],{"class":185},[179,589,203],{"class":189},[179,591,207],{"class":206},[179,593,210],{"class":189},[179,595,596,598,600,603,605,607,609,611],{"class":181,"line":213},[179,597,186],{"class":185},[179,599,190],{"class":189},[179,601,602],{"class":193}," streamText",[179,604,197],{"class":189},[179,606,200],{"class":185},[179,608,203],{"class":189},[179,610,229],{"class":206},[179,612,210],{"class":189},[179,614,615],{"class":181,"line":234},[179,616,238],{"emptyLinePlaceholder":237},[179,618,619,621,624,626,628,630],{"class":181,"line":241},[179,620,245],{"class":244},[179,622,623],{"class":193}," result ",[179,625,490],{"class":189},[179,627,602],{"class":262},[179,629,265],{"class":193},[179,631,268],{"class":189},[179,633,634,636,638,640,642,644],{"class":181,"line":271},[179,635,275],{"class":274},[179,637,278],{"class":189},[179,639,203],{"class":189},[179,641,283],{"class":206},[179,643,286],{"class":189},[179,645,289],{"class":189},[179,647,648,650,652,654,656,659,662,664,666,669,671,673,675],{"class":181,"line":292},[179,649,295],{"class":274},[179,651,278],{"class":189},[179,653,194],{"class":262},[179,655,265],{"class":193},[179,657,658],{"class":189},"{",[179,660,661],{"class":274}," preset",[179,663,278],{"class":189},[179,665,203],{"class":189},[179,667,668],{"class":206},"repo-explorer",[179,670,286],{"class":189},[179,672,197],{"class":189},[179,674,385],{"class":193},[179,676,289],{"class":189},[179,678,679,681,683,685,688,690],{"class":181,"line":306},[179,680,393],{"class":274},[179,682,278],{"class":189},[179,684,203],{"class":189},[179,686,687],{"class":206},"Find all TypeScript files that export a function named \"create\" in vercel-labs\u002Fgithub-tools and explain what each one does.",[179,689,286],{"class":189},[179,691,289],{"class":189},[179,693,694,696],{"class":181,"line":323},[179,695,253],{"class":189},[179,697,432],{"class":193},[179,699,700],{"class":181,"line":334},[179,701,238],{"emptyLinePlaceholder":237},[179,703,704,707,709,712,714,717,720,723,726,729],{"class":181,"line":348},[179,705,706],{"class":185},"for",[179,708,259],{"class":185},[179,710,711],{"class":193}," (",[179,713,245],{"class":244},[179,715,716],{"class":193}," chunk ",[179,718,719],{"class":189},"of",[179,721,722],{"class":193}," result",[179,724,725],{"class":189},".",[179,727,728],{"class":193},"textStream) ",[179,730,268],{"class":189},[179,732,733,736,738,741,743,746,748,751],{"class":181,"line":361},[179,734,735],{"class":193},"  process",[179,737,725],{"class":189},[179,739,740],{"class":193},"stdout",[179,742,725],{"class":189},[179,744,745],{"class":262},"write",[179,747,265],{"class":274},[179,749,750],{"class":193},"chunk",[179,752,432],{"class":274},[179,754,755],{"class":181,"line":373},[179,756,757],{"class":189},"}\n",[161,759,761],{"id":760},"run-a-maintainer-workflow-with-full-approval","Run a maintainer workflow with full approval",[145,763,764],{},"Full write access, gated behind approval on every operation:",[169,766,769],{"className":171,"code":767,"filename":768,"language":174,"meta":175,"style":175},"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",[153,770,771,789,807,811,831,845,857,872,882,890,898,903,908,913,919],{"__ignoreMap":175},[179,772,773,775,777,779,781,783,785,787],{"class":181,"line":182},[179,774,186],{"class":185},[179,776,190],{"class":189},[179,778,194],{"class":193},[179,780,197],{"class":189},[179,782,200],{"class":185},[179,784,203],{"class":189},[179,786,207],{"class":206},[179,788,210],{"class":189},[179,790,791,793,795,797,799,801,803,805],{"class":181,"line":213},[179,792,186],{"class":185},[179,794,190],{"class":189},[179,796,220],{"class":193},[179,798,197],{"class":189},[179,800,200],{"class":185},[179,802,203],{"class":189},[179,804,229],{"class":206},[179,806,210],{"class":189},[179,808,809],{"class":181,"line":234},[179,810,238],{"emptyLinePlaceholder":237},[179,812,813,815,817,819,821,823,825,827,829],{"class":181,"line":241},[179,814,245],{"class":244},[179,816,190],{"class":189},[179,818,250],{"class":193},[179,820,253],{"class":189},[179,822,256],{"class":189},[179,824,259],{"class":185},[179,826,220],{"class":262},[179,828,265],{"class":193},[179,830,268],{"class":189},[179,832,833,835,837,839,841,843],{"class":181,"line":271},[179,834,275],{"class":274},[179,836,278],{"class":189},[179,838,203],{"class":189},[179,840,283],{"class":206},[179,842,286],{"class":189},[179,844,289],{"class":189},[179,846,847,849,851,853,855],{"class":181,"line":292},[179,848,295],{"class":274},[179,850,278],{"class":189},[179,852,194],{"class":262},[179,854,265],{"class":193},[179,856,268],{"class":189},[179,858,859,861,863,865,868,870],{"class":181,"line":306},[179,860,309],{"class":274},[179,862,278],{"class":189},[179,864,203],{"class":189},[179,866,867],{"class":206},"maintainer",[179,869,286],{"class":189},[179,871,289],{"class":189},[179,873,874,876,878,880],{"class":181,"line":323},[179,875,326],{"class":274},[179,877,278],{"class":189},[179,879,356],{"class":342},[179,881,289],{"class":189},[179,883,884,886,888],{"class":181,"line":334},[179,885,382],{"class":189},[179,887,385],{"class":193},[179,889,289],{"class":189},[179,891,892,894,896],{"class":181,"line":348},[179,893,393],{"class":274},[179,895,278],{"class":189},[179,897,398],{"class":189},[179,899,900],{"class":181,"line":361},[179,901,902],{"class":206},"    Check if there are any stale issues (no activity for 30 days) on vercel-labs\u002Fgithub-tools.\n",[179,904,905],{"class":181,"line":373},[179,906,907],{"class":206},"    For each stale issue, post a comment asking the author for an update.\n",[179,909,910],{"class":181,"line":379},[179,911,912],{"class":206},"    If no response after the comment, close the issue with a polite message.\n",[179,914,915,917],{"class":181,"line":390},[179,916,422],{"class":189},[179,918,289],{"class":189},[179,920,921,923],{"class":181,"line":401},[179,922,253],{"class":189},[179,924,432],{"class":193},[145,926,927,928,931],{},"See the ",[138,929,930],{"href":59},"full eve version of this task"," for a standalone agent, schedule included.",[161,933,935],{"id":934},"reduce-tool-context-with-toolpick","Reduce tool context with toolpick",[145,937,938,939,944],{},"With all 53 tools visible on every step, tool definitions eat tokens. ",[138,940,943],{"href":941,"rel":942},"https:\u002F\u002Fgithub.com\u002Fpontusab\u002Ftoolpick",[142],"toolpick"," selects only the most relevant ones per step:",[169,946,949],{"className":171,"code":947,"filename":948,"language":174,"meta":175,"style":175},"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",[153,950,951,969,988,1006,1026,1030,1044,1063,1090,1096,1100,1116,1137,1143,1163,1178],{"__ignoreMap":175},[179,952,953,955,957,959,961,963,965,967],{"class":181,"line":182},[179,954,186],{"class":185},[179,956,190],{"class":189},[179,958,194],{"class":193},[179,960,197],{"class":189},[179,962,200],{"class":185},[179,964,203],{"class":189},[179,966,207],{"class":206},[179,968,210],{"class":189},[179,970,971,973,975,978,980,982,984,986],{"class":181,"line":213},[179,972,186],{"class":185},[179,974,190],{"class":189},[179,976,977],{"class":193}," createToolIndex",[179,979,197],{"class":189},[179,981,200],{"class":185},[179,983,203],{"class":189},[179,985,943],{"class":206},[179,987,210],{"class":189},[179,989,990,992,994,996,998,1000,1002,1004],{"class":181,"line":234},[179,991,186],{"class":185},[179,993,190],{"class":189},[179,995,220],{"class":193},[179,997,197],{"class":189},[179,999,200],{"class":185},[179,1001,203],{"class":189},[179,1003,229],{"class":206},[179,1005,210],{"class":189},[179,1007,1008,1010,1012,1015,1017,1019,1021,1024],{"class":181,"line":241},[179,1009,186],{"class":185},[179,1011,190],{"class":189},[179,1013,1014],{"class":193}," openai",[179,1016,197],{"class":189},[179,1018,200],{"class":185},[179,1020,203],{"class":189},[179,1022,1023],{"class":206},"@ai-sdk\u002Fopenai",[179,1025,210],{"class":189},[179,1027,1028],{"class":181,"line":271},[179,1029,238],{"emptyLinePlaceholder":237},[179,1031,1032,1034,1037,1039,1041],{"class":181,"line":292},[179,1033,245],{"class":244},[179,1035,1036],{"class":193}," tools ",[179,1038,490],{"class":189},[179,1040,194],{"class":262},[179,1042,1043],{"class":193},"()\n",[179,1045,1046,1048,1051,1053,1055,1058,1061],{"class":181,"line":306},[179,1047,245],{"class":244},[179,1049,1050],{"class":193}," index ",[179,1052,490],{"class":189},[179,1054,977],{"class":262},[179,1056,1057],{"class":193},"(tools",[179,1059,1060],{"class":189},",",[179,1062,331],{"class":189},[179,1064,1065,1068,1070,1072,1074,1077,1079,1081,1084,1086,1088],{"class":181,"line":323},[179,1066,1067],{"class":274},"  embeddingModel",[179,1069,278],{"class":189},[179,1071,1014],{"class":193},[179,1073,725],{"class":189},[179,1075,1076],{"class":262},"embeddingModel",[179,1078,265],{"class":193},[179,1080,286],{"class":189},[179,1082,1083],{"class":206},"text-embedding-3-small",[179,1085,286],{"class":189},[179,1087,385],{"class":193},[179,1089,289],{"class":189},[179,1091,1092,1094],{"class":181,"line":334},[179,1093,253],{"class":189},[179,1095,432],{"class":193},[179,1097,1098],{"class":181,"line":348},[179,1099,238],{"emptyLinePlaceholder":237},[179,1101,1102,1104,1106,1108,1110,1112,1114],{"class":181,"line":361},[179,1103,245],{"class":244},[179,1105,623],{"class":193},[179,1107,490],{"class":189},[179,1109,259],{"class":185},[179,1111,220],{"class":262},[179,1113,265],{"class":193},[179,1115,268],{"class":189},[179,1117,1118,1120,1122,1124,1126,1128,1131,1133,1135],{"class":181,"line":373},[179,1119,275],{"class":274},[179,1121,278],{"class":189},[179,1123,1014],{"class":262},[179,1125,265],{"class":193},[179,1127,286],{"class":189},[179,1129,1130],{"class":206},"gpt-4o",[179,1132,286],{"class":189},[179,1134,385],{"class":193},[179,1136,289],{"class":189},[179,1138,1139,1141],{"class":181,"line":379},[179,1140,295],{"class":193},[179,1142,289],{"class":189},[179,1144,1145,1148,1150,1153,1155,1158,1161],{"class":181,"line":390},[179,1146,1147],{"class":274},"  prepareStep",[179,1149,278],{"class":189},[179,1151,1152],{"class":193}," index",[179,1154,725],{"class":189},[179,1156,1157],{"class":262},"prepareStep",[179,1159,1160],{"class":193},"()",[179,1162,289],{"class":189},[179,1164,1165,1167,1169,1171,1174,1176],{"class":181,"line":401},[179,1166,393],{"class":274},[179,1168,278],{"class":189},[179,1170,203],{"class":189},[179,1172,1173],{"class":206},"Check if the CI is passing on the main branch of vercel\u002Fai.",[179,1175,286],{"class":189},[179,1177,289],{"class":189},[179,1179,1180,1182],{"class":181,"line":407},[179,1181,253],{"class":189},[179,1183,432],{"class":193},[145,1185,1186,1187,1190],{},"Each step, toolpick picks the best ~5 tools. All tools remain callable, only the visible set changes. Add a ",[153,1188,1189],{},"rerankerModel"," for maximum accuracy on ambiguous queries:",[169,1192,1195],{"className":171,"code":1193,"filename":1194,"language":174,"meta":175,"style":175},"const index = createToolIndex(tools, {\n  embeddingModel: openai.embeddingModel('text-embedding-3-small'),\n  rerankerModel: openai('gpt-4o-mini'),\n})\n","with-reranking.ts",[153,1196,1197,1213,1237,1259],{"__ignoreMap":175},[179,1198,1199,1201,1203,1205,1207,1209,1211],{"class":181,"line":182},[179,1200,245],{"class":244},[179,1202,1050],{"class":193},[179,1204,490],{"class":189},[179,1206,977],{"class":262},[179,1208,1057],{"class":193},[179,1210,1060],{"class":189},[179,1212,331],{"class":189},[179,1214,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235],{"class":181,"line":213},[179,1216,1067],{"class":274},[179,1218,278],{"class":189},[179,1220,1014],{"class":193},[179,1222,725],{"class":189},[179,1224,1076],{"class":262},[179,1226,265],{"class":193},[179,1228,286],{"class":189},[179,1230,1083],{"class":206},[179,1232,286],{"class":189},[179,1234,385],{"class":193},[179,1236,289],{"class":189},[179,1238,1239,1242,1244,1246,1248,1250,1253,1255,1257],{"class":181,"line":234},[179,1240,1241],{"class":274},"  rerankerModel",[179,1243,278],{"class":189},[179,1245,1014],{"class":262},[179,1247,265],{"class":193},[179,1249,286],{"class":189},[179,1251,1252],{"class":206},"gpt-4o-mini",[179,1254,286],{"class":189},[179,1256,385],{"class":193},[179,1258,289],{"class":189},[179,1260,1261,1263],{"class":181,"line":241},[179,1262,253],{"class":189},[179,1264,432],{"class":193},[145,1266,435,1267,1271],{},[138,1268,1270],{"href":941,"rel":1269},[142],"toolpick docs"," for caching, description enrichment, and model-driven discovery options.",[161,1273,1275],{"id":1274},"add-ai-observability-with-evlog","Add AI observability with evlog",[145,1277,1278,1279,1284],{},"Wrap the model with ",[138,1280,1283],{"href":1281,"rel":1282},"https:\u002F\u002Fevlog.dev",[142],"evlog"," to log token usage, tool calls, cost, and timing for every agent turn:",[169,1286,1289],{"className":171,"code":1287,"filename":1288,"language":174,"meta":175,"style":175},"import { createGithubTools } from '@github-tools\u002Fsdk'\nimport { generateText } from 'ai'\nimport { createLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = createLogger()\nconst ai = createAILogger(log, { toolInputs: { maxLength: 500 } })\n\nconst result = await generateText({\n  model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n  tools: createGithubTools({ preset: 'code-review' }),\n  prompt: 'Review the latest PR on vercel-labs\u002Fgithub-tools.',\n})\n\nlog.emit()\n","with-evlog.ts",[153,1290,1291,1309,1327,1346,1366,1370,1383,1423,1427,1443,1469,1497,1512,1518,1522],{"__ignoreMap":175},[179,1292,1293,1295,1297,1299,1301,1303,1305,1307],{"class":181,"line":182},[179,1294,186],{"class":185},[179,1296,190],{"class":189},[179,1298,194],{"class":193},[179,1300,197],{"class":189},[179,1302,200],{"class":185},[179,1304,203],{"class":189},[179,1306,207],{"class":206},[179,1308,210],{"class":189},[179,1310,1311,1313,1315,1317,1319,1321,1323,1325],{"class":181,"line":213},[179,1312,186],{"class":185},[179,1314,190],{"class":189},[179,1316,220],{"class":193},[179,1318,197],{"class":189},[179,1320,200],{"class":185},[179,1322,203],{"class":189},[179,1324,229],{"class":206},[179,1326,210],{"class":189},[179,1328,1329,1331,1333,1336,1338,1340,1342,1344],{"class":181,"line":234},[179,1330,186],{"class":185},[179,1332,190],{"class":189},[179,1334,1335],{"class":193}," createLogger",[179,1337,197],{"class":189},[179,1339,200],{"class":185},[179,1341,203],{"class":189},[179,1343,1283],{"class":206},[179,1345,210],{"class":189},[179,1347,1348,1350,1352,1355,1357,1359,1361,1364],{"class":181,"line":241},[179,1349,186],{"class":185},[179,1351,190],{"class":189},[179,1353,1354],{"class":193}," createAILogger",[179,1356,197],{"class":189},[179,1358,200],{"class":185},[179,1360,203],{"class":189},[179,1362,1363],{"class":206},"evlog\u002Fai",[179,1365,210],{"class":189},[179,1367,1368],{"class":181,"line":271},[179,1369,238],{"emptyLinePlaceholder":237},[179,1371,1372,1374,1377,1379,1381],{"class":181,"line":292},[179,1373,245],{"class":244},[179,1375,1376],{"class":193}," log ",[179,1378,490],{"class":189},[179,1380,1335],{"class":262},[179,1382,1043],{"class":193},[179,1384,1385,1387,1390,1392,1394,1397,1399,1401,1404,1406,1408,1411,1413,1417,1419,1421],{"class":181,"line":306},[179,1386,245],{"class":244},[179,1388,1389],{"class":193}," ai ",[179,1391,490],{"class":189},[179,1393,1354],{"class":262},[179,1395,1396],{"class":193},"(log",[179,1398,1060],{"class":189},[179,1400,190],{"class":189},[179,1402,1403],{"class":274}," toolInputs",[179,1405,278],{"class":189},[179,1407,190],{"class":189},[179,1409,1410],{"class":274}," maxLength",[179,1412,278],{"class":189},[179,1414,1416],{"class":1415},"sbssI"," 500",[179,1418,197],{"class":189},[179,1420,197],{"class":189},[179,1422,432],{"class":193},[179,1424,1425],{"class":181,"line":323},[179,1426,238],{"emptyLinePlaceholder":237},[179,1428,1429,1431,1433,1435,1437,1439,1441],{"class":181,"line":334},[179,1430,245],{"class":244},[179,1432,623],{"class":193},[179,1434,490],{"class":189},[179,1436,259],{"class":185},[179,1438,220],{"class":262},[179,1440,265],{"class":193},[179,1442,268],{"class":189},[179,1444,1445,1447,1449,1452,1454,1457,1459,1461,1463,1465,1467],{"class":181,"line":348},[179,1446,275],{"class":274},[179,1448,278],{"class":189},[179,1450,1451],{"class":193}," ai",[179,1453,725],{"class":189},[179,1455,1456],{"class":262},"wrap",[179,1458,265],{"class":193},[179,1460,286],{"class":189},[179,1462,283],{"class":206},[179,1464,286],{"class":189},[179,1466,385],{"class":193},[179,1468,289],{"class":189},[179,1470,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495],{"class":181,"line":361},[179,1472,295],{"class":274},[179,1474,278],{"class":189},[179,1476,194],{"class":262},[179,1478,265],{"class":193},[179,1480,658],{"class":189},[179,1482,661],{"class":274},[179,1484,278],{"class":189},[179,1486,203],{"class":189},[179,1488,522],{"class":206},[179,1490,286],{"class":189},[179,1492,197],{"class":189},[179,1494,385],{"class":193},[179,1496,289],{"class":189},[179,1498,1499,1501,1503,1505,1508,1510],{"class":181,"line":373},[179,1500,393],{"class":274},[179,1502,278],{"class":189},[179,1504,203],{"class":189},[179,1506,1507],{"class":206},"Review the latest PR on vercel-labs\u002Fgithub-tools.",[179,1509,286],{"class":189},[179,1511,289],{"class":189},[179,1513,1514,1516],{"class":181,"line":379},[179,1515,253],{"class":189},[179,1517,432],{"class":193},[179,1519,1520],{"class":181,"line":390},[179,1521,238],{"emptyLinePlaceholder":237},[179,1523,1524,1527,1529,1532],{"class":181,"line":401},[179,1525,1526],{"class":193},"log",[179,1528,725],{"class":189},[179,1530,1531],{"class":262},"emit",[179,1533,1043],{"class":193},[161,1535,1537],{"id":1536},"choose-the-right-pattern","Choose the right pattern",[1539,1540,1541,1557],"table",{},[1542,1543,1544],"thead",{},[1545,1546,1547,1551,1554],"tr",{},[1548,1549,1550],"th",{},"Pattern",[1548,1552,1553],{},"Entry point",[1548,1555,1556],{},"Best for",[1558,1559,1560,1578,1593,1605,1630,1649,1664],"tbody",{},[1545,1561,1562,1566,1575],{},[1563,1564,1565],"td",{},"One-shot generation",[1563,1567,1568,1571,1572],{},[153,1569,1570],{},"generateText"," + ",[153,1573,1574],{},"createGithubTools",[1563,1576,1577],{},"scripts, CLI tools, batch jobs",[1545,1579,1580,1583,1590],{},[1563,1581,1582],{},"Streaming",[1563,1584,1585,1571,1588],{},[153,1586,1587],{},"streamText",[153,1589,1574],{},[1563,1591,1592],{},"chat UIs, interactive terminals",[1545,1594,1595,1598,1602],{},[1563,1596,1597],{},"Reusable agent",[1563,1599,1600],{},[153,1601,450],{},[1563,1603,1604],{},"multi-turn assistants, persistent bots",[1545,1606,1607,1614,1623],{},[1563,1608,1609,1613],{},[1610,1611,1612],"strong",{},"eve"," agent",[1563,1615,1616,1619,1620],{},[153,1617,1618],{},"githubExtension"," from ",[153,1621,1622],{},"@github-tools\u002Feve-extension",[1563,1624,1625,1626,1629],{},"standalone agents in 3 files, durable HITL approval (",[153,1627,1628],{},"once",", predicates)",[1545,1631,1632,1638,1646],{},[1563,1633,1634,1637],{},[1610,1635,1636],{},"Durable"," agent + streaming",[1563,1639,1640,1571,1643],{},[153,1641,1642],{},"createDurableGithubAgent",[153,1644,1645],{},"\"use workflow\"",[1563,1647,1648],{},"hosted chat, crash-safe tool loops, Nuxt\u002FNext APIs on Vercel",[1545,1650,1651,1656,1661],{},[1563,1652,1653],{},[1610,1654,1655],{},"Platform bot",[1563,1657,1658,1660],{},[153,1659,1574],{}," + Chat SDK + Workflow",[1563,1662,1663],{},"GitHub\u002FSlack\u002FDiscord bots with durable multi-turn sessions",[1545,1665,1666,1671,1674],{},[1563,1667,1668],{},[1610,1669,1670],{},"Multi-agent",[1563,1672,1673],{},"eve subagents or agent-as-tool",[1563,1675,1676],{},"one entry point routing to preset-scoped specialists",[145,1678,435,1679,1681,1682,1684],{},[138,1680,114],{"href":115}," for the full type signatures and ",[138,1683,110],{"href":111}," for every available tool.",[1686,1687,1688],"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 pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":175,"searchDepth":213,"depth":213,"links":1690},[1691,1692,1693,1694,1695,1696,1697],{"id":163,"depth":213,"text":164},{"id":443,"depth":213,"text":444},{"id":565,"depth":213,"text":566},{"id":760,"depth":213,"text":761},{"id":934,"depth":213,"text":935},{"id":1274,"depth":213,"text":1275},{"id":1536,"depth":213,"text":1537},"Short, focused GitHub agent snippets, selective approval, a reusable review agent, read-only exploration, toolpick, and evlog observability.","md",[1701,1706],{"label":1702,"icon":1703,"to":87,"color":1704,"variant":1705},"Scope with presets","i-lucide-layers","neutral","subtle",{"label":1707,"icon":1708,"to":91,"color":1704,"variant":1705},"Control write safety","i-lucide-shield-check",{},{"title":78},{"title":78,"description":1698},"isddOWsJw6shTLuxgoowqL2BuTsY72jMjFUdMgBWQ38",[1714,1716],{"title":74,"path":75,"stem":76,"description":1715,"icon":34,"children":-1},"A broadly-capable GitHub manager agent that delegates to specialist eve sub-agents, each scoped to one preset (code-review, issue-triage, release-manager), instead of one agent holding every tool.",{"title":86,"path":87,"stem":88,"description":1717,"children":-1},"Expose only the tools your workflow needs using presets.",1786010331111]