Minor Changes
-
8c55ea7: Skills now load through
eve__skill({ name }), which every agent with a skill has in place ofload_skill, and a skill withdeferred: true(inSKILL.mdfrontmatter or ondefineSkill, static or dynamic) leaves the system prompt and is found witheve__searchinstead.- The
load_skilltool and theeve/tools/load_skillexport are removed. Delete anyagent/tools/load_skill.tsoverride or approval policy that names it; an authoredagent/tools/load_skill.tsis now an ordinary tool. - A skill load's
load-skillaction now carries the skill'sname, and itsinputis the model's{ name }instead of{ skill }. Its result is aload-skill-resultwith the samenameinstead of atool-resultnamedload_skill. Its client message part has thetoolNameeve__skillinstead ofeve:load-skill, with the skill's name intoolMetadata.eve.name. Sessions recorded by earlier versions replay withnamefilled in frominput.skill. - Eval facts report skill loads in
skillLoads, whicht.loadedSkillreads. They no longer count towardtoolCallCount,usedNoTools, ormaxToolCalls. - Skill names must use only ASCII letters, digits, underscores, and dashes, start with a letter or digit, and have at most 64 characters. The compiler rejects a static skill with another name, and eve skips a dynamic skill resolver that returns one.
- The
-
8c55ea7: An agent with deferred entries or connections now has
eve__searchto find tools markeddeferred: true, agents markedtool: "deferred", and every connection tool, andeve__toolto call them, without growing the model's tool list. An agent with skills haseve__skillto load them, andeve__searchalso finds deferred skills. An agent with none of these gets no catalog tools, so its tool list is unchanged apart fromload_skillbecomingeve__skill. They replaceconnection_searchandconnection_execute, and stream events, approvals, hooks, and traces now name each connection tool call<connection>__<tool>.eve__searchnever asks the user to sign in: it lists a connection that needs sign-in under the connection's own name, andeve__toolon that name, such aseve__tool({ name: "linear" }), asks the user to sign in.eve__searchtakes a requiredquery; a query such aslinear__searches only that connection's tools.Breaking changes:
- The tools eve adds itself now live in the
evenamespace:task_waitiseve__task_wait,task_canceliseve__task_cancel, andfinal_output, the tool a session with an output schema calls to deliver its structured result, iseve__reply. The catalog tools areeve__search,eve__tool, andeve__skill. Update evals, approval policies, hooks, and channel code that matchtask_wait,task_cancel, orfinal_outputby name. A turn held ontask_waitwhen you upgrade stays held until the next message or a cancel. - eve reserves the
evenamespace. A tool, subagent, skill, connection, or extension mount namedeveor starting witheve__now fails to build, or fails when the agent loads or a dynamic entry resolves; rename it.search,execute,task_wait,task_cancel, andfinal_outputare ordinary names again. - A connection owns its name and every name starting with
<name>__. A tool, subagent, or connection under another connection's prefix is rejected at build time, and a dynamic one when it resolves. - Dynamic tool map keys must be legal tool names: ASCII letters, digits,
_, and-, starting with a letter, up to 64 characters. - Connection approvals are keyed by
<connection>__<tool>instead of a[connection, tool]pair, so saved "always approve" decisions for connection tools reset. - A
connection_executecall still waiting for approval when you upgrade fails when someone answers it, with "The tool "connection_execute" is no longer available, so the call didn't run." - Eval tool-name helpers (
calledTool,notCalledTool,toolOrder, andrequireToolCall) now throw, saying what to assert instead, foreve__toolandeve__skill, whose calls are reported under the entry they reach and as skill loads, and for a retired eve tool name (load_skill,task_wait,task_cancel,final_output,connection_search,connection_execute) unless the root agent declares a tool by that name or has a dynamic tool resolver. Before,notCalledToolon one of these names always passed.usedNoToolsandmaxToolCallscounteve__searchcalls; skill loads no longer do. - Removed: the
parentCallIdfield ontool-callactions inactions.requestedevents, and theagent.action.parent_call_idspan attribute. The subagentparentCallIdonsession.startedinvocation metadata is unchanged.
- The tools eve adds itself now live in the
-
2cc43ca: GitHub work moves out of
eve/extensions/codeinto a new built-in extension,eve/extensions/git. The code extension used to tell every agent that "GitHub credentials are not available to ordinarybash" and to route GitHub work through itsghtool, which only works with Connect-brokeredgithubconfig. Agents whose shell already hasghcredentials were steered to a tool that could not authenticate.git({})adds the GitHub instructions and agit__prskill that commits, pushes, and opens a draft with the shell'sgh pr create --draft.git({ github })adds the Connect-brokeredgit__ghtool and switchesgit__prto the signed-commit workflow. The tool and sandbox helpers are exported fromeve/extensions/git/toolsandeve/extensions/git/sandbox.Deprecated:
code({ github }). While it is set, the code extension still contributescode__gh, its GitHub instructions, and the signed-commitcode__prskill. Without it,code({})no longer contributescode__gh,code__pr, or any GitHub instructions; mounteve/extensions/gitfor the pull request skill.ghfromeve/extensions/code/toolsand the GitHub shell helpers fromeve/extensions/code/sandboxstill work but are deprecated. -
14f2af0: Add dynamic schedule updates for timing and complete payload replacement, with prepared-payload approval for model calls. Payload replacement makes the updating caller the new creator; custom schedule providers must implement
update, andpreparePayloadnow receives acreateorupdateoperation. -
0ef5c4c:
eve add channel/slacknow resumes interrupted setup, reopens workspace installation for existing connectors, fixes stale routes without detaching, and avoids sharing a Slack app with another project or creating one with a taken name. Theeve/setupSlack provisioning API now takes a connector selection frominspectSlackbotConnectorsrather than inspecting a second time; a failed Vercel create reports its original error instead of a misleading cleanup failure.
Patch Changes
- 32aaf68: Accept create-session responses from remote agents on eve 0.66–0.68 (protocol 1). A newer parent no longer fails a call that the older remote already accepted and is running.
- 8c55ea7: Catalog calls now read as what happened:
eve__searchshowsSearch tools for “linear issues”and then how much it found, a skill load showsLoad skill <name>and thenLoaded skill <name>, and a connection's sign-in entry showsSign in to Linear. Linear activities, Chat SDK typing indicators, and ACP tool calls now show each call's label instead of its raw tool name, andeve/clienttool parts carry that text astoolMetadata.eve.label. - 47f1f18:
grepandapply_patchineve/extensions/codenow work in sandboxes whose workspace is not/workspace, such as/app.apply_patchno longer requires a git checkout:rootis optional and defaults to the workspace root, and outside git it still reports whitespace problems the patch introduced. It also accepts unified-diff range headers such as@@ -118,8 +118,8 @@ def second():, using the function context to pick between identical blocks. - afe7058:
eve__toolnow runs a tool from the agent's tool list, other than eve's own catalog and task tools and tools a provider or client runs, instead of returning an error, so a model that routes a listed tool through it no longer wastes a step. - f8ea556:
webSearch({ provider: "native" })uses the model vendor's own hosted search for AI Gateway models: OpenAI web search for OpenAI models, Anthropic web search for Anthropic models, and Google Search grounding for Gemini 3 and later, instead of Exa. Other Gateway models don't getweb_searchwith this setting unless you setfallback, for examplewebSearch({ provider: "native", fallback: "exa" }). Gemini models before Gemini 3, including direct ones, no longer get Google Search, which made the model drop every other tool. - 73adcdf: Dynamic schedules now use Vercel's local scheduler and queue delivery under
vc dev, so cron and one-time occurrences fire automatically. The local consumer loads only for Vercel-backed dynamic collections; standaloneeve devkeeps its in-memory scheduling backend. - f15eaa6: Remove the stream-writer WebSocket default added in 0.73.0, which never took effect. Behavior is unchanged.
- 192732a: Remote-agent create requests now report that work may have completed when a successful response has an incompatible protocol or unreadable body. These failures stop automatic workflow retries, and protocol mismatches include the remote session ID for checking the outcome.
- c25caf3: Datadog Experiment reports now link each eval to its sampled runtime traces using Datadog-indexed IDs. Linked traces include classified structural spans and, when capture is enabled, turn-level task input and output; zero-duration Experiment spans are normalized to a positive duration. Canonical runtime spans remain unchanged.