mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-10-30 04:15:45 +08:00
---
title: "Skills"
description: "Use Skills in LangBot to load specialized know-how on demand, extending your AI Agent without bloating its context."
---
A Skill is an **on-demand instruction bundle**: when the user's request matches, the Agent calls the `activate` tool to pull the skill's instructions into context, then follows them. Skills that aren't activated don't consume context.
Use Skills to give the Agent a **specialized workflow, template, or script** — "analyze a Python project", "fill a PDF form", "code review" — instead of stuffing every prompt into the System Prompt.
## How Skills Compare to Plugins and MCP
| What you want to do | Use this |
|---------------------|----------|
| A workflow triggered on demand (optional scripts and templates) | Skill |
| Connect an existing MCP tool service | MCP Server |
| Long-lived capability with config page, events, knowledge base | Plugin |
See [Runtimes and Extensions](../sandbox/runtime-relationships) for the full picture.
## Installing Skills
<Note>
Skills require the sandbox. `box.enabled` must be `true` and at least one backend (Docker / Nsjail / E2B) must be available — otherwise you can't install, activate, or edit skills. See [Sandbox Configuration](../sandbox/config).
</Note>
### From LangBot Space (Preferred)
[LangBot Space](https://space.langbot.app) is the official LangBot marketplace, with a curated list of ready-to-use skills. In the WebUI Skills page, browse and install them with one click — no need to write a `SKILL.md` or prepare any resource files.
This covers most cases. For custom workflows, use the option below.
### Create Your Own
**WebUI** — create, upload a zip, or import from GitHub on the Skills page.
**Sandbox + `register_skill`**:
1. Prepare the directory and `SKILL.md` under the sandbox `/workspace`
2. Have the Agent call `register_skill(path="/workspace/my-skill")`
Both options write to the skill store managed by Box Runtime.
## Enabling in a Pipeline
Once a skill is installed, the pipeline extension config decides which skills the Agent can see:
- Enable "all skills", or
- Bind only specific skills
Binding only affects the `<available_skills>` list (what the Agent can choose from). The full instructions are always injected only after `activate` is called.
## Writing a SKILL.md
A skill is a directory plus a `SKILL.md`. The frontmatter holds metadata; the body is what the Agent receives after activation:
```markdown
---
name: code-reviewer
display_name: Code Review Assistant
description: Reviews code and gives improvement suggestions; triggered when the user mentions review, code review, or code improvement
---
## Steps
1. Use `read` to browse the relevant files
2. Check readability, potential bugs, and security issues
3. Provide improvement suggestions, sorted by priority
```
LangBot currently reads these three fields:
| Field | Required | Notes |
|-------|----------|-------|
| `name` | When creating/registering | Unique ID, 1–64 chars |
| `description` | Strongly recommended | The Agent uses this to decide when to activate — the more specific, the better |
| `display_name` | No | Shown in the UI |
`description` is the Agent's only signal for picking a skill. Make it concrete about **what it does, when it applies, and what trigger words to watch for**.
For the full spec see [agentskills.io](https://agentskills.io/home). Other fields (`license`, `metadata`, ...) can stay in the file for future compatibility but are not currently read.
**Skills with resources** place `scripts/`, `templates/`, etc. next to `SKILL.md`. After activation the Agent accesses them at `/workspace/.skills/{skill-name}/`.
### Tools the Agent Sees
| Tool | Purpose |
|------|---------|
| `activate` | Called automatically by the Agent when it sees a match — pulls SKILL.md into context |
| `register_skill` | Registers a directory prepared in the sandbox as a new skill |
## Common Issues
| Symptom | What to check |
|---------|---------------|
| Skill list is empty | `box.enabled`, Box Runtime status, `box.local.skills_root` |
| Agent doesn't activate a skill | Whether `description` is specific, whether the pipeline has the skill bound, whether the model supports function calling |
| Files missing after activation | Files must live inside the Skill package; the path is `/workspace/.skills/{skill-name}/` |
| `register_skill` errors | The path must be under `/workspace`, and the directory or subdirectories within two levels must contain `SKILL.md` |
<Note>
Skills currently target the built-in Agent and depend on function calling plus a sandbox backend. External runners (Dify, n8n, Langflow, Coze, etc.) should use their platform's equivalent mechanism.
</Note>