Skills
Package procedural knowledge as Agent Skills that the chatbot can discover and load on demand.
Skills are folders of instructions, scripts, and resources that the chatbot can load on demand to perform specialized tasks. They follow the open Agent Skills format — the same one used by Claude Code, Cursor, Goose, and other compatible agents.
Each skill ships as a .zip archive containing a SKILL.md file (metadata + instructions) and optional supporting files (scripts/, references/, assets/). You upload it once, assign it to one or more workspaces, and the model learns about it via the system prompt. When a user asks something that matches the skill's description, the model reads SKILL.md through a built-in view tool and follows the instructions.
Progressive Disclosure
The chatbot uses a three-tier loading strategy so the base context stays small no matter how many skills are installed:
| Tier | What's loaded | When | Typical cost |
|---|---|---|---|
| Catalog | name and description of each enabled skill | Every chat turn, via the system prompt | ~100 tokens per skill |
| Instructions | Full SKILL.md body | When the model decides the skill is relevant | Under 5,000 tokens (by convention) |
| Resources | Scripts, references, assets | Only when SKILL.md references them | Varies |
This means an organization with 20 installed skills does not pay the context cost of 20 full instruction sets upfront — only the ones actually used in a given conversation.
Skill Format
A skill is a directory containing a required SKILL.md plus optional subdirectories:
skill-name/
├── SKILL.md # Required: YAML frontmatter + markdown instructions
├── scripts/ # Optional: executable code
├── references/ # Optional: long-form documentation loaded on demand
├── assets/ # Optional: templates, images, data files
└── ...SKILL.md starts with YAML frontmatter between --- delimiters:
---
name: web-design-guidelines
description: Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", or "check my site against best practices".
---
# Web Interface Guidelines
Review files for compliance with Web Interface Guidelines.
## How It Works
1. ...Frontmatter fields
| Field | Required | Constraints |
|---|---|---|
name | Yes | 1–64 characters, lowercase a-z, digits, and hyphens. Must match the skill's identity, cannot be changed after upload. |
description | Yes | 1–1024 characters. Describes what the skill does and when to use it. Good descriptions include both positive triggers ("Use this skill when...") and negative triggers ("Do NOT use for..."). |
license | No | License name or reference to a bundled license file. |
compatibility | No | Environment requirements (e.g. "Requires Python 3.14+"). Max 500 characters. |
metadata | No | Free-form key-value map stored verbatim. |
See the full specification for all the details.
Writing good descriptions
The description is the only hook the model sees until it activates the skill. Make it specific and keyword-rich. A skill that just says "Helps with PDFs" will rarely trigger; one that says "Extract text and tables from PDFs, fill forms, merge documents. Use when the user mentions .pdf files or asks to produce one." triggers reliably.
Uploading a Skill
Prepare the archive
Zip the skill's directory. Either a flat layout (SKILL.md at the root of the zip) or a single wrapper folder (skill-name/SKILL.md at the root) both work — the uploader strips the wrapper automatically.
Open the admin page
Go to Admin → Skills and click Add Skill.
Upload the archive
Select the .zip file, optionally tick Enabled, and pick which workspaces should see the skill. Click Create skill.
The uploader extracts every entry, validates SKILL.md, and stores each file as a separate attachment keyed to the skill's path. name and description are read directly from the frontmatter; you do not fill them in manually.
Size and safety limits
| Limit | Value |
|---|---|
| Max total uncompressed size | 25 MB |
| Max number of files in archive | 2,000 |
| Max entry path length | 512 characters |
| Rejected entry types | Absolute paths, .. segments, symlinks |
Assigning to Workspaces
Skills are organization-scoped by default and only become visible in a chat when they are (a) enabled and (b) assigned to the chat's workspace. There are two ways to manage the assignment:
- From the skill side: open the skill and edit its Workspaces list.
- From the workspace side: open the workspace's Edit form and pick skills from the Skills multi-select.
Both views stay in sync — they edit the same underlying assignment.
How Activation Works
Skills plug into two existing pieces of the chatbot runtime:
-
System-prompt catalog. At the start of each chat turn, the platform appends an
<available_skills>block to the system prompt listing every enabled + assigned skill. The model sees thename,description, and the filelocationinside the sandbox mount. -
The
viewtool. When the model decides a skill is relevant, it calls the built-inviewtool with the skill'sSKILL.mdpath (e.g./mnt/skills/web-design-guidelines/SKILL.md). The tool returns the file contents as numbered lines. Subsequentviewcalls can inspect other files in the skill directory. Directory paths return a 2-level listing.
The first time a chat reads a SKILL.md, the platform records the activation so the UI can surface which skills the assistant has already consulted in the conversation.
Sandbox vs. Pure-Prose Skills
Skills work in two modes:
-
Pure-prose skills (e.g. review checklists, writing guidelines, domain knowledge) need no infrastructure. The
viewtool readsSKILL.mddirectly from storage and the model follows the instructions inline. These skills work even in workspaces without sandbox execution enabled. -
Script-backed skills (e.g. a PDF processor that runs Python) require a sandbox. When the workspace's organization has a sandbox image configured and the workspace has sandbox enabled, every assigned skill is additionally mounted read-only at
/mnt/skills/<name>/inside the sandbox. The model can then invoke the skill's scripts via thebashtool alongsideview.
The path layout is identical in both modes, so the same SKILL.md can target either environment without modification.
Downloading a Skill
Every skill has a Download button on its show page. It streams a fresh .zip with the current contents wrapped under a top-level skill-name/ directory — identical in shape to what the uploader expects. This makes it easy to pull a skill down, edit it locally, and re-upload.
Round-tripping
On upload the name field of a skill is locked; you can replace the archive contents freely but the name in the new SKILL.md must match the existing skill. This keeps mount paths and workspace assignments stable across edits.
Example Skills
The vercel-labs/agent-skills repository hosts ready-to-use .zip fixtures. A good starting point for testing is web-design-guidelines.zip — a pure-prose skill that reviews UI code against a set of web design guidelines.
For more examples and skill authoring conventions, see the Agent Skills specification.