SKILL.md instructions (read by the AI before starting a task) and optional helper scripts and reference docs. Skills are mounted read-only inside every sandbox at /mnt/skills/ and exposed to the model through the system prompt.
Why skills
- Repeatable quality. The docx skill bundles tracked-changes via OOXML redlining — you get consistent Word output every time, across any model.
- Model-agnostic. Claude, GPT-4o, Qwen, Mistral — same skill, same output shape. Write once, use everywhere.
- Pluggable. Built-in skills are baked into the Docker image. User skills are uploaded as ZIPs and bind-mounted per user.
- Auto-discovery. The server builds an
<available_skills>XML block and injects it into the system prompt. The model picks the right skill without being named.
How a skill runs
- On chat start,
skill_manager.get_user_skills(email)resolves which skills this user has enabled. - The system prompt gets an
<available_skills>block listing names, descriptions, and paths. - The model picks a skill based on the task and reads the skill’s
SKILL.mdviaviewtool. - The skill’s scripts live under
/mnt/skills/{category}/{name}/scripts/— the model runs them viabash_tool.
Categories
| Category | Mount | Source |
|---|---|---|
public | /mnt/skills/public/{name}/ | Baked into the Docker image |
example | /mnt/skills/examples/{name}/ | Baked; opt-in via Settings Wrapper |
user | /mnt/skills/user/{name}/ | ZIP from Settings Wrapper, cached on host |
Next
User guide
What each skill does, how they appear to the model.
Full reference
13 built-in skills + 14 examples with capabilities.
Dynamic injection
The internals — cache layers, fallbacks, mounts.
Creating a skill
Folder layout, SKILL.md format, publishing.
