Released 2026-11-04 · Compare with 1.0.0-rc.3
Breaking Changes
- Every agent now gets a default
edit_filetool, the code extension dropscode__apply_patch, andbashresults and eve's system prompt now match pi's.
edit_file, exported fromeve/tools/edit_file, edits one sandbox file with exact text replacements matched the same way as pi'sedittool. The model sendspathand a list of{ oldText, newText }edits, each matched once against the original file, with a fallback that ignores trailing whitespace and normalizes smart quotes, dashes, and special spaces. Files that are not valid UTF-8 are rejected rather than rewritten, and a file keeps its mode, such as its executable bit, on sandboxes that write files with a default mode. Remove it withdefaultTools: falseor anagent/tools/edit_file.tsthat exportsdisableTool(); an authoredagent/tools/edit_file.tsreplaces it.
edit_filechanges existing files withoutwrite_file. If you disabled or wrappedwrite_fileto limit writes, or gatewrite_filein an approval policy, do the same foredit_file.write_filecan also overwrite a file the session read and then changed withedit_file, without anotherread_filecall. A change made by anything else since the read still requires one.
The code extension (eve/extensions/code) no longer mountscode__apply_patch, and theeve/extensions/code/toolsentry point is removed. Importgrepfromeve/tools/grepinstead ofeve/extensions/code/tools. Move an override of the old tool, whetheragent/tools/code__apply_patch.tsoragent/extensions/code/tools/apply_patch.ts, toagent/tools/edit_file.tsand spreadeditFilefromeve/tools/edit_file.edit_filetakespathandeditsinstead of a patch, so a wrapper that readsinput.patchneeds updating. Acode__apply_patch.tsfile that exportsdisableTool()failseve buildwithdisables a slot with no lower-precedence source; to keep agents from editing, exportdisableTool()fromagent/tools/edit_file.tsinstead.
installCodeTooling()no longer installs TypeScript or the post-edit diagnostics worker, andCODE_TOOLING_REVALIDATION_KEYchanged, so sandbox templates keyed on it rebuild once.
The code extension adds the workspace root'sAGENTS.md, orCLAUDE.mdwhen there is none, to the conversation, and its coding instructions now follow pi's tool guidance. The extension reads the file once per session, with one sandbox command on the first turn, which starts the sandbox. A file over 64,000 bytes is cut off with a note that tells the model where to read the rest.
A successfulbashcommand shows only its output, or(no output), and a command that exits non-zero ends with[exit code: N]and reaches the model as an error result.bashwaits 60 seconds by default before it leaves a command running in the background, and a truncatedstdoutorstderrnow names a file in the sandbox that holds its full output.
toolOutput.errorText(value)fromeve/tools, or a{ type: "error-text", value }literal, lets any tool'stoModelOutputshow the model a failure while the call still completes, so channels and hooks get the full output oncall.settled. The MCP channel returns such a result as its text withisError: true.
eve no longer adds a "Tool execution" note about parallel tool calls to every agent's system prompt. Tool calls in one response still run in parallel. Without the note, Sonnet 5.5 solved a concurrency task in 93% of replayed eve-code runs instead of 75%, matching how pi, which runs tool calls in parallel without telling the model, performs.
Thanks @badlogic for pi, whose MIT-licensededittooledit_fileadapts. (#5892)
Features
- Add
EVE_EVAL_OIDC_TOKENto reach a protected Vercel deployment fromeve eval --urlthrough Trusted Sources. (#4894) webSearch({ provider: "tako" })selects Tako Search through AI Gateway, which returns web pages and Tako data cards with their rows in one call."tako"also works as afallbackforwebSearch({ provider: "native" }). (#5880)
Bug Fixes
- Fix signed inbox handles so follow-up messages can skip repeated hook lookups when
EVE_INBOX_HANDLE_SECRETis set and the world supports guarded hook resumes. (#5904) - A prompt that OpenAI refuses for possible cybersecurity (
cyber_policy) or biological (bio_policy) risk now fails only its turn instead of ending the session. (#5772) - Fail closed for repository-based authorization policies when GitHub commands use a caller's unscoped token.
User-modeauthorizecallbacks always receiverepository: null, regardless of the command's declaration. Use GitHub App tokens with a fullowner/namedeclaration for repository allowlists. Policies that intentionally permit the caller's full GitHub access can continue to authorize throughauth. (#5903)