eve
Search…⌘ KAsk AIAsk AIGitHub<br>Search…⌘ K
The framework for building agents
Like Next.js for agents. Build durable agents with one folder.<br>For you<br>For your agent<br>$npx eve@latest init my-agentnpx eve@latest init my-agent
Your agent/ is a directory<br>An instructions.md file is all you need to run an agent. Skills, tools, channels, and the rest are optional building blocks you add as it grows.
instructions.md<br>An instructions.md file is a complete agent. Describe its role in Markdown, then run eve.<br>div]:mb-0">code]:grid [&>code]:min-w-max shiki geist line-numbers shiki geist rounded-none border-0 bg-transparent px-0 py-4 [&_.line]:before:!mr-4 [&_.line]:before:!w-5 [&_.line]:before:!text-left [&_pre]:overflow-x-hidden! [&_code]:w-full! [&_code]:min-w-0! [&_code]:[grid-template-columns:minmax(0,1fr)]! [&_.line]:whitespace-pre-wrap [&_.line]:[overflow-wrap:anywhere]" style="font-feature-settings:"liga" 0, "calt" 0;font-variant-ligatures:none;background-color:var(--shiki-color-background, transparent);color:var(--shiki-color-text, inherit)" tabindex="0"># Identity
You are an expert weather assistant.<br>You can fetch the weather for any<br>city in the world.
agent.tsoptional<br>eve uses a default model. Add agent.ts when you want to choose a model or configure the runtime.<br>div]:mb-0">code]:grid [&>code]:min-w-max shiki geist line-numbers shiki geist rounded-none border-0 bg-transparent px-0 py-4 [&_.line]:before:!mr-4 [&_.line]:before:!w-5 [&_.line]:before:!text-left [&_pre]:overflow-x-hidden! [&_code]:w-full! [&_code]:min-w-0! [&_code]:[grid-template-columns:minmax(0,1fr)]! [&_.line]:whitespace-pre-wrap [&_.line]:[overflow-wrap:anywhere]" style="font-feature-settings:"liga" 0, "calt" 0;font-variant-ligatures:none;background-color:var(--shiki-color-background, transparent);color:var(--shiki-color-text, inherit)" tabindex="0">import { defineAgent } from "eve";
export default defineAgent({<br>model: "openai/gpt-5.4-mini",<br>});
skills/research.mdoptional<br>Skills are Markdown playbooks loaded only when relevant, so the agent gets focused guidance without carrying it in every prompt.<br>div]:mb-0">code]:grid [&>code]:min-w-max shiki geist line-numbers shiki geist rounded-none border-0 bg-transparent px-0 py-4 [&_.line]:before:!mr-4 [&_.line]:before:!w-5 [&_.line]:before:!text-left [&_pre]:overflow-x-hidden! [&_code]:w-full! [&_code]:min-w-0! [&_code]:[grid-template-columns:minmax(0,1fr)]! [&_.line]:whitespace-pre-wrap [&_.line]:[overflow-wrap:anywhere]" style="font-feature-settings:"liga" 0, "calt" 0;font-variant-ligatures:none;background-color:var(--shiki-color-background, transparent);color:var(--shiki-color-text, inherit)" tabindex="0">---<br>name: research<br>description: Research unfamiliar topics
When the task is novel or ambiguous,<br>gather evidence first, then answer.
tools/get_weather.tsoptional<br>Drop a TypeScript file in tools/ and the model can call it — the filename becomes the tool name, no registration required.<br>div]:mb-0">code]:grid [&>code]:min-w-max shiki geist line-numbers shiki geist rounded-none border-0 bg-transparent px-0 py-4 [&_.line]:before:!mr-4 [&_.line]:before:!w-5 [&_.line]:before:!text-left [&_pre]:overflow-x-hidden! [&_code]:w-full! [&_code]:min-w-0! [&_code]:[grid-template-columns:minmax(0,1fr)]! [&_.line]:whitespace-pre-wrap [&_.line]:[overflow-wrap:anywhere]" style="font-feature-settings:"liga" 0, "calt" 0;font-variant-ligatures:none;background-color:var(--shiki-color-background, transparent);color:var(--shiki-color-text, inherit)" tabindex="0">import { defineTool } from "eve/tools";<br>import z from "zod";
export default defineTool({<br>description: "Get the weather for a city",<br>inputSchema: z.object({<br>cityName: z.string(),<br>}),<br>async execute(input) {<br>const res = await fetch(<br>`${process.env.WEATHER_API_URL}/current?city=${input.cityName}`<br>);<br>const data = await res.json();<br>return data.current_condition[0];<br>},<br>});
sandbox/sandbox.tsoptional<br>Every agent includes an isolated sandbox. Add sandbox/sandbox.ts to swap in any backend or customize its setup.<br>div]:mb-0">code]:grid [&>code]:min-w-max shiki geist line-numbers shiki geist rounded-none border-0 bg-transparent px-0 py-4 [&_.line]:before:!mr-4 [&_.line]:before:!w-5 [&_.line]:before:!text-left [&_pre]:overflow-x-hidden! [&_code]:w-full! [&_code]:min-w-0! [&_code]:[grid-template-columns:minmax(0,1fr)]! [&_.line]:whitespace-pre-wrap [&_.line]:[overflow-wrap:anywhere]" style="font-feature-settings:"liga" 0, "calt" 0;font-variant-ligatures:none;background-color:var(--shiki-color-background, transparent);color:var(--shiki-color-text, inherit)" tabindex="0">import { defineSandbox } from<br>"eve/sandbox";
export default defineSandbox({<br>async bootstrap({ sandbox }) {<br>await sandbox.run(<br>"git clone repo /workspace"<br>);<br>},<br>});
channels/slack.tsoptional<br>Add channel files to use the same agent in Slack, Discord, Teams, or the web.<br>div]:mb-0">code]:grid [&>code]:min-w-max shiki geist line-numbers shiki geist rounded-none border-0 bg-transparent px-0 py-4...