Skills

Author load-on-demand procedures the model pulls into context with load_skill.

A skill is a model-loadable procedure that follows the SKILL.md convention. It is a markdown document, optionally a packaged directory with supporting files, that the model pulls into context on demand rather than carrying on every turn. eve advertises each skill's description, and the model loads the full body only when a turn calls for it. This is progressive disclosure, the same model the broader Agent Skills standard uses, so a skill authored against that standard ports over as-is.

How loading works

eve scans the files under agent/skills/ and exposes each one's description to the model alongside a framework-owned load_skill tool. When a request matches a skill's description (or you name the skill outright), the model calls load_skill, and eve appends that skill's markdown to the active turn's context.

Static skills do not require a sandbox: load_skill returns their instructions directly from the compiled agent. Dynamic skills and access to supporting package files require a sandbox. Builds may also prewarm sandbox templates that contain static package files. Supporting files are available under $HOME/.agents/skills/<skill>/, with /workspace/skills/<skill>/ as the fallback when $HOME is unavailable. Sibling references inside SKILL.md, such as references/checklist.md, are relative to the directory containing that specific SKILL.md.

The description is a routing hint, not a label. Write it as the task that should trigger activation:

Use when the user needs a release checklist or changelog workflow.

Loading a skill adds instructions, never a new execution surface. Tools stay visible whether a skill is loaded or not. If you need typed runtime behavior, reach for a tool instead.

Markdown vs defineSkill

The smallest skill is a flat markdown file. The content is the procedure, and the name comes from the path.

agent/skills/forecast.md
Use the weather tool before answering forecast or temperature questions.

A flat markdown skill can skip the description frontmatter. When it does, eve advertises the first non-empty, non-code-fence line of the body with any leading #, >, *, or - marker stripped. If the body has no such line, eve falls back to the literal Instructions for the <name> skill., which is a weak routing hint, so add a description when you want the model to route on intent.

A packaged skill is a directory with a SKILL.md plus sibling files like references/, assets/, and scripts/. The packaged SKILL.md must carry description frontmatter; it has no filename slug to fall back on.

agent/skills/research/SKILL.md
---
description: Research unfamiliar topics before answering with confidence.
---

When the task is novel or ambiguous, gather evidence first, then answer with the
key facts and the remaining uncertainty.

eve reads description, optional license, and string metadata; other SKILL.md frontmatter is accepted as a no-op.

When markdown can't express what you need (typed values, generated content, or inline sibling files), author the skill in TypeScript with defineSkill from eve/skills:

agent/skills/research.ts
import { defineSkill } from "eve/skills";

export default defineSkill({
  description: "Research unfamiliar topics before answering with confidence.",
  markdown:
    "When the task is novel or ambiguous, gather evidence first, then answer with the key facts and the remaining uncertainty.",
  files: {
    "references/checklist.md": "# Checklist\n\n- Find primary sources.\n",
  },
});

eve generates SKILL.md from markdown, and each files entry becomes a package-relative sibling. Start with plain markdown and move to defineSkill only when you hit its limits.

A static defineSkill module is evaluated during compilation and its resolved definition is stored in the manifest; a dynamic skill module is also retained as a runtime entry. See Authored module lifecycle.

Find and install community skills

eve registry search includes skills.sh as the built-in @skills source. Search by task, review the source, then install the returned skill into your project:

eve registry search react --registry @skills
eve add @skills/vercel-labs/agent-skills/vercel-react-best-practices

skills.sh skills are community-authored project files. Review their source and the resulting diff before running the agent. See Install integrations for registry configuration and install behavior.

Skills are scoped per agent

Skills are scoped to the agent that declares them. A subagent's skills/ are invisible to the root agent, and the reverse holds too. To share one skill definition across agents, package it in a workspace extension and mount that extension in each agent. Put shared executable helpers in lib/.

Read skill files at runtime

Loading a skill adds its SKILL.md to context. To reach a packaged skill's sibling files (references, assets, scripts) from inside a tool or hook, use ctx.getSkill(id):

const research = ctx.getSkill("research");
const checklist = await research.file("references/checklist.md").text();

The handle exposes the skill's name and file(relativePath); file content is read lazily from the active sandbox, relative to that skill package directory.

Dynamic skills

To serve a different skill per principal, tenant, or channel (the caller's own team playbook, say), wrap defineSkill in a defineDynamic resolver keyed on ctx.session.auth. See Dynamic capabilities.