Skills
Skills are reusable, markdown-based instruction sets that you can attach to models or invoke on-the-fly in chat. Unlike Tools (which are executable Python scripts), Skills are plain-text instructions that teach a model how to approach a task — such as code review guidelines, writing style rules, or troubleshooting playbooks.
How Skills Work
Skills use a lazy-loading architecture to keep the model's context window efficient:
- Manifest injection — When a skill is active (either bound to a model or mentioned in chat), only a lightweight manifest containing the skill's name and description is injected into the system prompt.
- On-demand loading — The model receives a
view_skillbuiltin tool. When it determines it needs a skill's full instructions, it callsview_skillwith the skill name to load the complete content.
This design means that even if dozens of skills are available, only the ones the model actually needs are loaded into context.
Creating a Skill
Navigate to Workspace → Skills and click + New Skill.
| Field | Description |
|---|---|
| Name | A human-readable display name (e.g., "Code Review Guidelines"). |
| Skill ID | A unique slug identifier, auto-generated from the name (e.g., code-review-guidelines). Editable during creation, read-only afterwards. |
| Description | A short summary shown in the manifest. The model uses this to decide whether to load the full instructions. |
| Content | The full skill instructions in Markdown. This is the content loaded by view_skill. |
Click Save & Create to finalize.
Using Skills
In Chat ($ Mention)
Type $ in the chat input to open the skill picker. Select a skill, and it will be attached to the message as a skill mention (similar to @ for models or # for knowledge). The skill manifest is injected for that conversation, and the model can call view_skill to load the full instructions when needed.
Bound to a Model
You can permanently attach skills to a model so they are always available:
- Go to Workspace → Models.
- Edit a model and scroll to the Skills section.
- Check the skills you want this model to always have access to.
- Click Save.
When a user chats with that model, the selected skills' manifests are automatically injected.
Import and Export
Importing from Markdown
Click Import on the Skills workspace page and select a .md file. If the file contains YAML frontmatter with name and/or description fields, those values are auto-populated into the creation form.
Example frontmatter:
---
name: code-review-guidelines
description: Step-by-step instructions for thorough code reviews
---
# Code Review Guidelines
1. Check for correctness...
Exporting
- Single skill: Click the ellipsis menu (...) on a skill and select Export to download it as a JSON file.
- Bulk export: Click the Export button at the top of the Skills page to export all accessible skills as a single JSON file.
Skill Management
From the Skills workspace list, you can perform the following actions via the ellipsis menu (...) on each skill:
| Action | Description |
|---|---|
| Edit | Open the skill editor to modify content, name, or description. |
| Clone | Create a copy with -clone appended to the ID and "(Clone)" to the name. |
| Export | Download the skill as a JSON file. |
| Delete | Permanently remove the skill. Also available via Shift+Click on the delete icon for quick deletion. |
Active / Inactive Toggle
Each skill has an active/inactive toggle visible on the list page. Inactive skills are excluded from manifests and cannot be loaded by the model, even if they are bound to one or mentioned in chat.
Code Execution Backends
The backend you choose affects what your skills can do — from simple text transformations (Pyodide) to full OS-level shell access (Open Terminal). Each has different trade-offs in library support, isolation, persistence, and multi-user safety.
See the Code Execution overview for a detailed comparison of all available backends and guidance on choosing the right one for your deployment.
Setting Up Open Terminal
Open Terminal is a FastAPI application that automatically exposes an OpenAPI specification. This means it works out of the box as an OpenAPI Tool Server — Open WebUI auto-discovers its endpoints and registers them as tools. No manual tool creation needed.
1. Start an Open Terminal instance
Follow the Open Terminal setup guide to launch an instance using Docker or pip.
2. Connect to Open WebUI
Add your Open Terminal instance as a Tool Server by following the OpenAPI Tool Server Integration Guide. You can connect it as:
- A User Tool Server (in Settings → Tools) — connects from your browser, ideal for personal or local instances
- A Global Tool Server (in Admin Settings → Tools) — connects from the backend, available to all users
Once connected, the Open Terminal tools (execute, file upload, file download) appear automatically in the chat interface.
For the best experience, pair Open Terminal with a Skill that teaches the model how to use the tool effectively — for example, instructing it to always check exit codes, handle errors gracefully, and use streaming for long-running commands.
See the Open Terminal documentation for the full API reference and detailed setup instructions.
Access Control
Skills use the same Access Control system as other workspace resources:
- Private by default: Only the creator can see and edit a new skill.
- Share with users or groups: Use the Access button in the skill editor to grant
readorwriteaccess to specific users or groups. - Read-only access: Users with only read access can view the skill content but cannot edit it. The editor displays a "Read Only" badge.
Required Permissions
- Workspace → Skills Access: Required to access the Skills workspace and create/manage skills.
- Sharing → Share Skills: Required to share skills with individual users or groups.
- Sharing → Public Skills: Required to make skills publicly accessible.
See Permissions for details on how to configure these.