Skip to main content
A skill is a directory under skills/ containing a SKILL.md file. It bundles structured agent instructions, an allowed_tools policy, optional resource and reference files, static assets, and executable scripts. The format follows the agentskills.io specification. Use veryfront/skill for parser, registry, tool, and policy helpers in framework code.

Prerequisites

  • A Veryfront project with at least one agent (see Agents).
  • The skills/ directory exists at the project root, or ai.skills.discovery.paths is set in Configuration.

Quick start

Create a skill directory with a SKILL.md file:
The SKILL.md file uses YAML frontmatter for metadata and Markdown for instructions:

Skill structure

Each skill lives in its own directory under skills/:

Frontmatter fields

Discovery

Skills are discovered automatically from the skills/ directory at server startup and on HMR file changes. No registration is needed.

Agent tools

Every agent gets load_skill. Local and project runtimes also expose the two supporting skill tools: Hosted chat providers use nested load_skill input. After loading a skill, hosted chat can read only a reference listed by that skill through load_skill({ load: { skillId, file } }). It does not execute skill scripts directly. When a hosted chat prompt provides a discovery cursor, call load_skill({ inventory: { cursor: <CURSOR> } }). Otherwise, call load_skill({ inventory: {} }) when the prompt does not show the complete authorized skill inventory. The result contains a bounded skillIds page. If it also contains nextCursor, call load_skill({ inventory: { cursor: nextCursor } }) until the response omits nextCursor. Then call load_skill({ load: { skillId } }) with a listed ID. Direct local tool consumers use flat load input. Call load_skill({ skillId: "<SKILL_ID>" }) to load a skill. After loading it, call load_skill_reference({ skillId: "<SKILL_ID>", reference: "<PATH>" }) to read a listed reference, resource, or asset. Standalone project runtime consumers can page the authorized inventory with flat input. Call load_skill({}) for the first page, then call load_skill({ cursor: <CURSOR> }) when the response includes nextCursor. Load a listed skill with load_skill({ skillId: "<SKILL_ID>" }). Discovered skills visible to the agent are advertised by default:
Use skills: ["code-review"] to advertise only that skill. Use skills: [] to advertise none. This changes the prompt catalog only. load_skill remains available and can load any visible skill by ID. Expose the agent through an AG-UI route, then ask it to use the skill:
The agent should call load_skill before applying the skill instructions.

Tool restrictions

The allowed_tools field restricts which tools an agent can use while a skill is active. Use exact IDs or prefix wildcards:

CLI commands

Verify it worked

  1. Run veryfront skills validate skills/my-skill. A passing skill prints no errors and exits with status 0.
  2. Restart veryfront dev. The dev log should list each registered skill under its directory name.
  3. Send a message that should trigger the skill (for example, a code-review skill should engage when the message asks to “review this diff”). The AG-UI response should reference the skill’s instructions or call only the tools listed in allowed_tools.