[{"data":1,"prerenderedAt":1592},["ShallowReactive",2],{"navigation_docs":3,"-deprecated-eve":125,"-deprecated-eve-surround":1588},[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":127,"body":128,"description":1568,"extension":231,"links":1569,"meta":1582,"navigation":1583,"path":123,"seo":1584,"stem":124,"__hash__":1587},"docs\u002Fdocs\u002F6.deprecated\u002F1.eve.md","Build a GitHub agent with eve (direct import)",{"type":129,"value":130,"toc":1555},"minimark",[131,161,181,214,219,222,403,406,426,441,445,458,545,565,587,591,605,784,799,803,814,926,939,954,958,961,1001,1021,1024,1049,1161,1177,1181,1184,1250,1259,1263,1270,1273,1285,1383,1452,1470,1474,1502,1514,1518,1551],[132,133,135,139,140,144,145,151,152,155,156,160],"callout",{"icon":134},"i-lucide-alert-triangle",[136,137,138],"strong",{},"Deprecated."," ",[141,142,143],"code",{},"@github-tools\u002Fsdk\u002Feve"," (the direct import documented on this page) is deprecated in favor of ",[146,147,148],"a",{"href":32},[141,149,150],{},"@github-tools\u002Feve-extension",", the recommended way to add GitHub tools to an eve agent. This direct import keeps working and isn't being removed, but new agents should ",[146,153,154],{"href":32},"mount the extension"," instead. See ",[146,157,159],{"href":158},"\u002Fframeworks\u002Feve-extension#migrating-from-the-direct-import","migrating from the direct import",".",[162,163,164,170,171,173,174,177,178,180],"p",{},[146,165,169],{"href":166,"rel":167},"https:\u002F\u002Feve.dev",[168],"nofollow","eve"," is Vercel's filesystem-first agent framework: an agent is a folder with instructions, a model config, and tools. With ",[141,172,143],{},", that folder becomes a ",[136,175,176],{},"complete GitHub agent in 3 files",": all 53 tools registered from a single file, with durable human-in-the-loop approval that actually pauses the session until a person approves. This page documents the legacy direct-import path; for new agents, see the ",[146,179,31],{"href":32}," guide instead.",[182,183,186,194],"prompt",{":actions":184,"description":185,"icon":34},"[\"copy\",\"cursor\",\"windsurf\"]","Add GitHub tools to an eve agent (deprecated direct import)",[162,187,188,189,193],{},"Add GitHub tools to an eve agent using the deprecated @github-tools\u002Fsdk\u002Feve direct import (prefer @github-tools\u002Feve-extension for new agents, see ",[146,190,191],{"href":191,"rel":192},"https:\u002F\u002Fgithub-tools.com\u002Fframeworks\u002Feve-extension",[168],").",[195,196,197,201,204,211],"ul",{},[198,199,200],"li",{},"Install eve, ai v7, zod, and @github-tools\u002Fsdk; set GITHUB_TOKEN",[198,202,203],{},"Create agent\u002Ftools\u002Fgithub.ts exporting default createGithubTools({ preset: 'code-review' })",[198,205,206,207],{},"Configure requireApproval with once\u002Fpredicate where appropriate: ",[146,208,209],{"href":209,"rel":210},"https:\u002F\u002Fgithub-tools.com\u002Fdeprecated\u002Feve",[168],[198,212,213],{},"Use examples\u002Feve-agent as reference; run with pnpm dev:eve-agent from the monorepo root",[215,216,218],"h2",{"id":217},"the-whole-agent","The whole agent",[162,220,221],{},"Three files. That's the entire thing:",[223,224,225,250,340],"code-group",{},[226,227,233],"pre",{"className":228,"code":229,"filename":230,"language":231,"meta":232,"style":232},"language-md shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","You are a GitHub assistant. Use the GitHub tools to inspect repos, PRs, and issues.\nAsk before merging or closing anything destructive.\n","agent\u002Finstructions.md","md","",[141,234,235,244],{"__ignoreMap":232},[236,237,240],"span",{"class":238,"line":239},"line",1,[236,241,243],{"class":242},"sTEyZ","You are a GitHub assistant. Use the GitHub tools to inspect repos, PRs, and issues.\n",[236,245,247],{"class":238,"line":246},2,[236,248,249],{"class":242},"Ask before merging or closing anything destructive.\n",[226,251,256],{"className":252,"code":253,"filename":254,"language":255,"meta":232,"style":232},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineAgent } from 'eve'\n\nexport default defineAgent({\n  model: 'anthropic\u002Fclaude-sonnet-5',\n})\n","agent\u002Fagent.ts","ts",[141,257,258,286,292,310,331],{"__ignoreMap":232},[236,259,260,264,268,271,274,277,280,283],{"class":238,"line":239},[236,261,263],{"class":262},"s7zQu","import",[236,265,267],{"class":266},"sMK4o"," {",[236,269,270],{"class":242}," defineAgent",[236,272,273],{"class":266}," }",[236,275,276],{"class":262}," from",[236,278,279],{"class":266}," '",[236,281,169],{"class":282},"sfazB",[236,284,285],{"class":266},"'\n",[236,287,288],{"class":238,"line":246},[236,289,291],{"emptyLinePlaceholder":290},true,"\n",[236,293,295,298,301,304,307],{"class":238,"line":294},3,[236,296,297],{"class":262},"export",[236,299,300],{"class":262}," default",[236,302,270],{"class":303},"s2Zo4",[236,305,306],{"class":242},"(",[236,308,309],{"class":266},"{\n",[236,311,313,317,320,322,325,328],{"class":238,"line":312},4,[236,314,316],{"class":315},"swJcz","  model",[236,318,319],{"class":266},":",[236,321,279],{"class":266},[236,323,324],{"class":282},"anthropic\u002Fclaude-sonnet-5",[236,326,327],{"class":266},"'",[236,329,330],{"class":266},",\n",[236,332,334,337],{"class":238,"line":333},5,[236,335,336],{"class":266},"}",[236,338,339],{"class":242},")\n",[226,341,344],{"className":252,"code":342,"filename":343,"language":255,"meta":232,"style":232},"import { createGithubTools } from '@github-tools\u002Fsdk\u002Feve'\n\nexport default createGithubTools({\n  preset: 'maintainer',\n})\n","agent\u002Ftools\u002Fgithub.ts",[141,345,346,365,369,381,397],{"__ignoreMap":232},[236,347,348,350,352,355,357,359,361,363],{"class":238,"line":239},[236,349,263],{"class":262},[236,351,267],{"class":266},[236,353,354],{"class":242}," createGithubTools",[236,356,273],{"class":266},[236,358,276],{"class":262},[236,360,279],{"class":266},[236,362,143],{"class":282},[236,364,285],{"class":266},[236,366,367],{"class":238,"line":246},[236,368,291],{"emptyLinePlaceholder":290},[236,370,371,373,375,377,379],{"class":238,"line":294},[236,372,297],{"class":262},[236,374,300],{"class":262},[236,376,354],{"class":303},[236,378,306],{"class":242},[236,380,309],{"class":266},[236,382,383,386,388,390,393,395],{"class":238,"line":312},[236,384,385],{"class":315},"  preset",[236,387,319],{"class":266},[236,389,279],{"class":266},[236,391,392],{"class":282},"maintainer",[236,394,327],{"class":266},[236,396,330],{"class":266},[236,398,399,401],{"class":238,"line":333},[236,400,336],{"class":266},[236,402,339],{"class":242},[162,404,405],{},"Run it:",[226,407,412],{"className":408,"code":409,"filename":410,"language":411,"meta":232,"style":232},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx eve dev\n","Terminal","bash",[141,413,414],{"__ignoreMap":232},[236,415,416,420,423],{"class":238,"line":239},[236,417,419],{"class":418},"sBMFI","npx",[236,421,422],{"class":282}," eve",[236,424,425],{"class":282}," dev\n",[162,427,428,429,436,437,440],{},"You now have a GitHub agent that can read repos, review PRs, triage issues, and manage CI, with every write operation gated behind durable approval by default. The full example lives in ",[146,430,433],{"href":431,"rel":432},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fgithub-tools\u002Ftree\u002Fmain\u002Fexamples\u002Feve-agent",[168],[141,434,435],{},"examples\u002Feve-agent\u002F"," (or ",[141,438,439],{},"pnpm dev:eve-agent"," from the monorepo root).",[215,442,444],{"id":443},"install","Install",[162,446,447,448,450,451,457],{},"Add ",[141,449,169],{}," and ",[136,452,453,456],{},[141,454,455],{},"ai"," v7"," (required peer of eve v0.19+) alongside the SDK:",[223,459,460,484,505,525],{},[226,461,464],{"className":408,"code":462,"filename":463,"language":411,"meta":232,"style":232},"pnpm add @github-tools\u002Fsdk eve ai zod\n","pnpm",[141,465,466],{"__ignoreMap":232},[236,467,468,470,473,476,478,481],{"class":238,"line":239},[236,469,463],{"class":418},[236,471,472],{"class":282}," add",[236,474,475],{"class":282}," @github-tools\u002Fsdk",[236,477,422],{"class":282},[236,479,480],{"class":282}," ai",[236,482,483],{"class":282}," zod\n",[226,485,488],{"className":408,"code":486,"filename":487,"language":411,"meta":232,"style":232},"npm install @github-tools\u002Fsdk eve ai zod\n","npm",[141,489,490],{"__ignoreMap":232},[236,491,492,494,497,499,501,503],{"class":238,"line":239},[236,493,487],{"class":418},[236,495,496],{"class":282}," install",[236,498,475],{"class":282},[236,500,422],{"class":282},[236,502,480],{"class":282},[236,504,483],{"class":282},[226,506,509],{"className":408,"code":507,"filename":508,"language":411,"meta":232,"style":232},"yarn add @github-tools\u002Fsdk eve ai zod\n","yarn",[141,510,511],{"__ignoreMap":232},[236,512,513,515,517,519,521,523],{"class":238,"line":239},[236,514,508],{"class":418},[236,516,472],{"class":282},[236,518,475],{"class":282},[236,520,422],{"class":282},[236,522,480],{"class":282},[236,524,483],{"class":282},[226,526,529],{"className":408,"code":527,"filename":528,"language":411,"meta":232,"style":232},"bun add @github-tools\u002Fsdk eve ai zod\n","bun",[141,530,531],{"__ignoreMap":232},[236,532,533,535,537,539,541,543],{"class":238,"line":239},[236,534,528],{"class":418},[236,536,472],{"class":282},[236,538,475],{"class":282},[236,540,422],{"class":282},[236,542,480],{"class":282},[236,544,483],{"class":282},[162,546,547,548,550,551,554,555,558,559,562,563,160],{},"Ensure ",[141,549,455],{}," resolves to ",[136,552,553],{},"v7",". eve v0.19+ is not compatible with AI SDK v6. You still need ",[141,556,557],{},"GITHUB_TOKEN"," (or pass ",[141,560,561],{},"token"," explicitly). See ",[146,564,14],{"href":15},[162,566,567,568,578,579,582,583,586],{},"For Vercel Connect, use ",[146,569,571,574,575],{"href":570},"\u002Fguide\u002Fvercel-connect#eve-agent",[141,572,573],{},"connectGithubTools"," from ",[141,576,577],{},"@github-tools\u002Fsdk\u002Fconnect\u002Feve",". It mints the token lazily. Do not top-level ",[141,580,581],{},"await getToken(...)"," in ",[141,584,585],{},"agent\u002Ftools\u002F"," modules.",[215,588,590],{"id":589},"one-file-all-tools","One file, all tools",[162,592,593,596,597,600,601,604],{},[141,594,595],{},"createGithubTools()"," returns a ",[141,598,599],{},"defineDynamic"," value: eve resolves the tool set on ",[141,602,603],{},"session.started",", so a single default export registers every tool. Scope and gate as needed:",[226,606,608],{"className":252,"code":607,"filename":343,"language":255,"meta":232,"style":232},"import { createGithubTools } from '@github-tools\u002Fsdk\u002Feve'\n\nexport default createGithubTools({\n  preset: ['code-review', 'issue-triage'],\n  requireApproval: {\n    mergePullRequest: true,\n    createIssue: 'once',\n    addPullRequestComment: false,\n    createOrUpdateFile: ({ toolInput }) => toolInput?.owner !== 'vercel-labs',\n  },\n})\n",[141,609,610,628,632,644,675,685,699,716,729,771,777],{"__ignoreMap":232},[236,611,612,614,616,618,620,622,624,626],{"class":238,"line":239},[236,613,263],{"class":262},[236,615,267],{"class":266},[236,617,354],{"class":242},[236,619,273],{"class":266},[236,621,276],{"class":262},[236,623,279],{"class":266},[236,625,143],{"class":282},[236,627,285],{"class":266},[236,629,630],{"class":238,"line":246},[236,631,291],{"emptyLinePlaceholder":290},[236,633,634,636,638,640,642],{"class":238,"line":294},[236,635,297],{"class":262},[236,637,300],{"class":262},[236,639,354],{"class":303},[236,641,306],{"class":242},[236,643,309],{"class":266},[236,645,646,648,650,653,655,658,660,663,665,668,670,673],{"class":238,"line":312},[236,647,385],{"class":315},[236,649,319],{"class":266},[236,651,652],{"class":242}," [",[236,654,327],{"class":266},[236,656,657],{"class":282},"code-review",[236,659,327],{"class":266},[236,661,662],{"class":266},",",[236,664,279],{"class":266},[236,666,667],{"class":282},"issue-triage",[236,669,327],{"class":266},[236,671,672],{"class":242},"]",[236,674,330],{"class":266},[236,676,677,680,682],{"class":238,"line":333},[236,678,679],{"class":315},"  requireApproval",[236,681,319],{"class":266},[236,683,684],{"class":266}," {\n",[236,686,688,691,693,697],{"class":238,"line":687},6,[236,689,690],{"class":315},"    mergePullRequest",[236,692,319],{"class":266},[236,694,696],{"class":695},"sfNiH"," true",[236,698,330],{"class":266},[236,700,702,705,707,709,712,714],{"class":238,"line":701},7,[236,703,704],{"class":315},"    createIssue",[236,706,319],{"class":266},[236,708,279],{"class":266},[236,710,711],{"class":282},"once",[236,713,327],{"class":266},[236,715,330],{"class":266},[236,717,719,722,724,727],{"class":238,"line":718},8,[236,720,721],{"class":315},"    addPullRequestComment",[236,723,319],{"class":266},[236,725,726],{"class":695}," false",[236,728,330],{"class":266},[236,730,732,735,737,740,744,747,751,753,756,759,762,764,767,769],{"class":238,"line":731},9,[236,733,734],{"class":303},"    createOrUpdateFile",[236,736,319],{"class":266},[236,738,739],{"class":266}," ({",[236,741,743],{"class":742},"sHdIc"," toolInput",[236,745,746],{"class":266}," })",[236,748,750],{"class":749},"spNyl"," =>",[236,752,743],{"class":242},[236,754,755],{"class":266},"?.",[236,757,758],{"class":242},"owner ",[236,760,761],{"class":266},"!==",[236,763,279],{"class":266},[236,765,766],{"class":282},"vercel-labs",[236,768,327],{"class":266},[236,770,330],{"class":266},[236,772,774],{"class":238,"line":773},10,[236,775,776],{"class":266},"  },\n",[236,778,780,782],{"class":238,"line":779},11,[236,781,336],{"class":266},[236,783,339],{"class":242},[162,785,786,787,790,791,794,795,798],{},"Map keys become tool names: the model sees ",[141,788,789],{},"listPullRequests",", ",[141,792,793],{},"createIssue",", and so on (same names as the AI SDK package). There is ",[136,796,797],{},"no automatic file-slug prefix"," when returning a tool map.",[215,800,802],{"id":801},"durable-approval-done-right","Durable approval, done right",[162,804,805,806,809,810,813],{},"This is eve's headline advantage over the boolean ",[141,807,808],{},"needsApproval"," on the AI SDK and Workflow paths: approval ",[136,811,812],{},"pauses the session durably"," until a human responds, and policies are expressive:",[815,816,817,833],"table",{},[818,819,820],"thead",{},[821,822,823,827,830],"tr",{},[824,825,826],"th",{},"Value",[824,828,829],{},"Maps to",[824,831,832],{},"Behavior",[834,835,836,856,874,889,907],"tbody",{},[821,837,838,848,853],{},[839,840,841,844,845],"td",{},[141,842,843],{},"true"," \u002F ",[141,846,847],{},"'always'",[839,849,850],{},[141,851,852],{},"always()",[839,854,855],{},"Require approval on every call",[821,857,858,866,871],{},[839,859,860,844,863],{},[141,861,862],{},"false",[141,864,865],{},"'never'",[839,867,868],{},[141,869,870],{},"never()",[839,872,873],{},"Skip approval",[821,875,876,881,886],{},[839,877,878],{},[141,879,880],{},"'once'",[839,882,883],{},[141,884,885],{},"once()",[839,887,888],{},"Approve once per session, then auto-allow",[821,890,891,894,900],{},[839,892,893],{},"predicate",[839,895,896,897],{},"custom ",[141,898,899],{},"Approval",[839,901,902,903,906],{},"Input-dependent gate (",[141,904,905],{},"toolInput",", session context)",[821,908,909,917,920],{},[839,910,911,844,913,844,915],{},[141,912,852],{},[141,914,885],{},[141,916,870],{},[839,918,919],{},"passthrough",[839,921,922,923],{},"Import helpers from ",[141,924,925],{},"eve\u002Ftools\u002Fapproval",[162,927,928,929,932,933,935,936,938],{},"Default (no ",[141,930,931],{},"requireApproval","): all write tools → ",[141,934,852],{},". Unlisted write tools keep the ",[141,937,852],{}," fail-safe default. Read tools never require approval.",[162,940,941,942,945,946,949,950,953],{},"For durable HITL with the standard boolean\u002Fper-tool config, use ",[146,943,944],{"href":42},"durable Workflow agents"," with ",[141,947,948],{},"WorkflowAgent",". See also ",[146,951,952],{"href":91},"Control write safety"," for the AI SDK surface.",[215,955,957],{"id":956},"cherry-pick-one-tool-per-file","Cherry-pick one tool per file",[162,959,960],{},"For the filesystem-native eve layout, import individual factories:",[226,962,965],{"className":252,"code":963,"filename":964,"language":255,"meta":232,"style":232},"import { listPullRequests } from '@github-tools\u002Fsdk\u002Feve'\n\nexport default listPullRequests()\n","agent\u002Ftools\u002Flist_pull_requests.ts",[141,966,967,986,990],{"__ignoreMap":232},[236,968,969,971,973,976,978,980,982,984],{"class":238,"line":239},[236,970,263],{"class":262},[236,972,267],{"class":266},[236,974,975],{"class":242}," listPullRequests",[236,977,273],{"class":266},[236,979,276],{"class":262},[236,981,279],{"class":266},[236,983,143],{"class":282},[236,985,285],{"class":266},[236,987,988],{"class":238,"line":246},[236,989,291],{"emptyLinePlaceholder":290},[236,991,992,994,996,998],{"class":238,"line":294},[236,993,297],{"class":262},[236,995,300],{"class":262},[236,997,975],{"class":303},[236,999,1000],{"class":242},"()\n",[162,1002,1003,1004,1007,1008,1011,1012,1015,1016,1020],{},"Each factory returns a ",[141,1005,1006],{},"defineTool"," value. The filename slug becomes the tool name when exported alone. Alternatively, pass ",[141,1009,1010],{},"include: ['listPullRequests', ...]"," to ",[141,1013,1014],{},"createGithubTools"," for the same exact set from a single file, see ",[146,1017,1019],{"href":1018},"#presets-and-options","Presets and options"," below.",[215,1022,1019],{"id":1023},"presets-and-options",[162,1025,1026,1027,790,1029,790,1031,790,1034,790,1037,790,1040,790,1043,1045,1046,1048],{},"All presets (",[141,1028,657],{},[141,1030,667],{},[141,1032,1033],{},"repo-explorer",[141,1035,1036],{},"ci-ops",[141,1038,1039],{},"security-audit",[141,1041,1042],{},"release-manager",[141,1044,392],{},") work with ",[141,1047,1014],{},". Options mirror the AI SDK surface:",[815,1050,1051,1061],{},[818,1052,1053],{},[821,1054,1055,1058],{},[824,1056,1057],{},"Option",[824,1059,1060],{},"Description",[834,1062,1063,1075,1085,1098,1114,1123,1145],{},[821,1064,1065,1069],{},[839,1066,1067],{},[141,1068,561],{},[839,1070,1071,1072,1074],{},"GitHub PAT (defaults to ",[141,1073,557],{},")",[821,1076,1077,1082],{},[839,1078,1079],{},[141,1080,1081],{},"preset",[839,1083,1084],{},"Single preset or array to merge",[821,1086,1087,1092],{},[839,1088,1089],{},[141,1090,1091],{},"include",[839,1093,1094,1095,1097],{},"Tool names to add on top of ",[141,1096,1081],{}," (union), or the full set standalone",[821,1099,1100,1105],{},[839,1101,1102],{},[141,1103,1104],{},"exclude",[839,1106,1107,1108,1110,1111,1113],{},"Tool names to remove from the resolved ",[141,1109,1081],{}," + ",[141,1112,1091],{}," set",[821,1115,1116,1120],{},[839,1117,1118],{},[141,1119,931],{},[839,1121,1122],{},"Global, per-tool, or predicate approval (eve)",[821,1124,1125,1130],{},[839,1126,1127],{},[141,1128,1129],{},"overrides",[839,1131,1132,1133,790,1136,790,1139,790,1142],{},"Per-tool ",[141,1134,1135],{},"description",[141,1137,1138],{},"approval",[141,1140,1141],{},"toModelOutput",[141,1143,1144],{},"outputSchema",[821,1146,1147,1158],{},[839,1148,1149,844,1152,844,1155],{},[141,1150,1151],{},"author",[141,1153,1154],{},"committer",[141,1156,1157],{},"coAuthors",[839,1159,1160],{},"Commit attribution for file\u002Fmerge tools",[162,1162,1163,1164,790,1167,790,1170,1173,1174,1176],{},"High-volume read tools (",[141,1165,1166],{},"listPullRequestFiles",[141,1168,1169],{},"getCommit",[141,1171,1172],{},"getFileContent",") include conservative default ",[141,1175,1141],{}," projections. Full payloads still reach channels; the model sees trimmed diffs\u002Fcontent.",[215,1178,1180],{"id":1179},"idempotency","Idempotency",[162,1182,1183],{},"eve replays completed steps but re-runs steps interrupted mid-execution:",[815,1185,1186,1195],{},[818,1187,1188],{},[821,1189,1190,1193],{},[824,1191,1192],{},"Tool",[824,1194,1180],{},[834,1196,1197,1211,1221,1231],{},[821,1198,1199,1204],{},[839,1200,1201],{},[141,1202,1203],{},"createOrUpdateFile",[839,1205,1206,1207,1210],{},"Natural when content + ",[141,1208,1209],{},"sha"," unchanged",[821,1212,1213,1218],{},[839,1214,1215],{},[141,1216,1217],{},"closeIssue",[839,1219,1220],{},"Natural when already closed",[821,1222,1223,1228],{},[839,1224,1225],{},[141,1226,1227],{},"createBranch",[839,1229,1230],{},"Natural when branch exists at same SHA",[821,1232,1233,1244],{},[839,1234,1235,790,1238,790,1240,1243],{},[141,1236,1237],{},"addIssueComment",[141,1239,793],{},[141,1241,1242],{},"mergePullRequest",", …",[839,1245,1246,1249],{},[136,1247,1248],{},"Not"," idempotent",[162,1251,1252,1253,1255,1256,1258],{},"Gate non-idempotent writes behind ",[141,1254,852],{}," or ",[141,1257,885],{}," where replay safety matters.",[215,1260,1262],{"id":1261},"eve-extension-vs-direct-import-vs-ai-sdk-vs-workflow-sdk","eve extension vs direct import vs AI SDK vs Workflow SDK",[162,1264,1265,1266,1269],{},"See the full comparison table on the ",[146,1267,31],{"href":1268},"\u002Fframeworks\u002Feve-extension#eve-extension-vs-direct-import-vs-ai-sdk-vs-workflow-sdk"," page. This direct-import path occupies the \"deprecated\" column.",[215,1271,102],{"id":1272},"vercel-connect",[162,1274,1275,1276,1278,1279,1281,1282,1284],{},"Skip ",[141,1277,557],{}," entirely and mint the token from a Connect connector. ",[141,1280,573],{}," derives scopes from ",[141,1283,1081],{}," and fetches the token lazily inside each tool call:",[226,1286,1288],{"className":252,"code":1287,"filename":254,"language":255,"meta":232,"style":232},"import { defineAgent } from 'eve'\n\nexport default defineAgent({\n  model: 'anthropic\u002Fclaude-sonnet-5',\n  \u002F\u002F TODO(eve-connect-bundle): remove when eve externalizes transitive @vercel\u002Fconnect\n  build: {\n    externalDependencies: ['@vercel\u002Fconnect'],\n  },\n})\n",[141,1289,1290,1308,1312,1324,1338,1344,1353,1373,1377],{"__ignoreMap":232},[236,1291,1292,1294,1296,1298,1300,1302,1304,1306],{"class":238,"line":239},[236,1293,263],{"class":262},[236,1295,267],{"class":266},[236,1297,270],{"class":242},[236,1299,273],{"class":266},[236,1301,276],{"class":262},[236,1303,279],{"class":266},[236,1305,169],{"class":282},[236,1307,285],{"class":266},[236,1309,1310],{"class":238,"line":246},[236,1311,291],{"emptyLinePlaceholder":290},[236,1313,1314,1316,1318,1320,1322],{"class":238,"line":294},[236,1315,297],{"class":262},[236,1317,300],{"class":262},[236,1319,270],{"class":303},[236,1321,306],{"class":242},[236,1323,309],{"class":266},[236,1325,1326,1328,1330,1332,1334,1336],{"class":238,"line":312},[236,1327,316],{"class":315},[236,1329,319],{"class":266},[236,1331,279],{"class":266},[236,1333,324],{"class":282},[236,1335,327],{"class":266},[236,1337,330],{"class":266},[236,1339,1340],{"class":238,"line":333},[236,1341,1343],{"class":1342},"sHwdD","  \u002F\u002F TODO(eve-connect-bundle): remove when eve externalizes transitive @vercel\u002Fconnect\n",[236,1345,1346,1349,1351],{"class":238,"line":687},[236,1347,1348],{"class":315},"  build",[236,1350,319],{"class":266},[236,1352,684],{"class":266},[236,1354,1355,1358,1360,1362,1364,1367,1369,1371],{"class":238,"line":701},[236,1356,1357],{"class":315},"    externalDependencies",[236,1359,319],{"class":266},[236,1361,652],{"class":242},[236,1363,327],{"class":266},[236,1365,1366],{"class":282},"@vercel\u002Fconnect",[236,1368,327],{"class":266},[236,1370,672],{"class":242},[236,1372,330],{"class":266},[236,1374,1375],{"class":238,"line":718},[236,1376,776],{"class":266},[236,1378,1379,1381],{"class":238,"line":731},[236,1380,336],{"class":266},[236,1382,339],{"class":242},[226,1384,1386],{"className":252,"code":1385,"filename":343,"language":255,"meta":232,"style":232},"import { connectGithubTools } from '@github-tools\u002Fsdk\u002Fconnect\u002Feve'\n\nexport default connectGithubTools('github\u002Fmy-connector', {\n  preset: 'maintainer',\n})\n",[141,1387,1388,1407,1411,1432,1446],{"__ignoreMap":232},[236,1389,1390,1392,1394,1397,1399,1401,1403,1405],{"class":238,"line":239},[236,1391,263],{"class":262},[236,1393,267],{"class":266},[236,1395,1396],{"class":242}," connectGithubTools",[236,1398,273],{"class":266},[236,1400,276],{"class":262},[236,1402,279],{"class":266},[236,1404,577],{"class":282},[236,1406,285],{"class":266},[236,1408,1409],{"class":238,"line":246},[236,1410,291],{"emptyLinePlaceholder":290},[236,1412,1413,1415,1417,1419,1421,1423,1426,1428,1430],{"class":238,"line":294},[236,1414,297],{"class":262},[236,1416,300],{"class":262},[236,1418,1396],{"class":303},[236,1420,306],{"class":242},[236,1422,327],{"class":266},[236,1424,1425],{"class":282},"github\u002Fmy-connector",[236,1427,327],{"class":266},[236,1429,662],{"class":266},[236,1431,684],{"class":266},[236,1433,1434,1436,1438,1440,1442,1444],{"class":238,"line":312},[236,1435,385],{"class":315},[236,1437,319],{"class":266},[236,1439,279],{"class":266},[236,1441,392],{"class":282},[236,1443,327],{"class":266},[236,1445,330],{"class":266},[236,1447,1448,1450],{"class":238,"line":333},[236,1449,336],{"class":266},[236,1451,339],{"class":242},[162,1453,1454,1455,1457,1458,1461,1462,1465,1466,160],{},"See ",[146,1456,102],{"href":570}," for the connector setup checklist and multi-tenant scoping. ",[141,1459,1460],{},"connector"," also accepts a ",[141,1463,1464],{},"() => string | Promise\u003Cstring>"," resolver for picking a connector per environment or tenant, see ",[146,1467,1469],{"href":1468},"\u002Fguide\u002Fvercel-connect#dynamic-connector-selection","dynamic connector selection",[215,1471,1473],{"id":1472},"prefer-the-eve-extension-for-new-agents","Prefer the eve extension for new agents",[162,1475,1476,1478,1479,1483,1484,1486,1487,1489,1490,1493,1494,1497,1498,1501],{},[141,1477,150],{}," packages the same tools as a mountable ",[146,1480,31],{"href":1481,"rel":1482},"https:\u002F\u002Feve.dev\u002Fdocs\u002Fextensions",[168]," instead of importing ",[141,1485,143],{}," directly into ",[141,1488,585],{},": a single ",[141,1491,1492],{},"pnpm add"," and a one-line mount under ",[141,1495,1496],{},"agent\u002Fextensions\u002F",", no CLI setup. ",[136,1499,1500],{},"This is now the recommended way"," to add GitHub tools to an eve agent; everything on this page is the deprecated predecessor.",[162,1503,1504,1505,1508,1509,1511,1512,160],{},"See the full ",[146,1506,1507],{"href":32},"eve extension guide"," for install, mount, config schema, and Vercel Connect examples, and ",[146,1510,159],{"href":158}," if you have an existing agent using ",[141,1513,143],{},[215,1515,1517],{"id":1516},"external-references","External references",[195,1519,1520,1527,1533,1544],{},[198,1521,1522],{},[146,1523,1526],{"href":1524,"rel":1525},"https:\u002F\u002Fvercel.com\u002Fkb\u002Fguide\u002Fgithub-agent-eve",[168],"How to build a GitHub agent with eve and GitHub tools",[198,1528,1529],{},[146,1530,1532],{"href":166,"rel":1531},[168],"eve documentation",[198,1534,1535,1540,1541,1543],{},[146,1536,1539],{"href":1537,"rel":1538},"https:\u002F\u002Feve.dev\u002Fdocs\u002Fguides\u002Fdynamic-capabilities",[168],"Dynamic capabilities"," (bundled with the ",[141,1542,169],{}," package)",[198,1545,1546],{},[146,1547,1550],{"href":1548,"rel":1549},"https:\u002F\u002Feve.dev\u002Fdocs\u002Ftools\u002Fhuman-in-the-loop",[168],"Human-in-the-loop",[1552,1553,1554],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":232,"searchDepth":246,"depth":246,"links":1556},[1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567],{"id":217,"depth":246,"text":218},{"id":443,"depth":246,"text":444},{"id":589,"depth":246,"text":590},{"id":801,"depth":246,"text":802},{"id":956,"depth":246,"text":957},{"id":1023,"depth":246,"text":1019},{"id":1179,"depth":246,"text":1180},{"id":1261,"depth":246,"text":1262},{"id":1272,"depth":246,"text":102},{"id":1472,"depth":246,"text":1473},{"id":1516,"depth":246,"text":1517},"Deprecated. The direct @github-tools\u002Fsdk\u002Feve import registers all 53 tools via defineDynamic with durable human-in-the-loop approval. Prefer the eve extension for new agents.",[1570,1574,1577,1580],{"label":1571,"icon":34,"to":32,"color":1572,"variant":1573},"eve extension (recommended)","neutral","subtle",{"label":1575,"icon":34,"to":431,"target":1576,"color":1572,"variant":1573},"Run the example","_blank",{"label":1578,"icon":1579,"to":115,"color":1572,"variant":1573},"API reference: createGithubTools (eve)","i-lucide-braces",{"label":952,"icon":1581,"to":91,"color":1572,"variant":1573},"i-lucide-shield-check",{},{"title":122,"icon":34},{"title":1585,"description":1586},"Build a GitHub agent with eve (direct import, deprecated)","Deprecated direct-import path for eve agents. See the eve extension for the recommended approach.","q7NenH0PtAFK-MHxGVDZEOv9PDLNx2jPhZrFYesVpq8",[1589,1591],{"title":114,"path":115,"stem":116,"description":1590,"children":-1},"Type signatures for createGithubTools, createGithubAgent, createDurableGithubAgent, and createOctokit.",null,1786010333250]