Skills
Skills are modular capability packs that teach lsbot how to use external tools. Each skill is a directory containing a SKILL.md file — a markdown document with YAML frontmatter that declares requirements, metadata, and instructions.
Quick Start
CLI Reference
lsbot skills / lsbot skills list
List all discovered skills with their eligibility status.
| Flag | Description |
|---|---|
--eligible | Show only ready-to-use skills |
-v, --verbose | Show missing requirements column |
--json | Output as JSON |
Example:
lsbot skills info <name>
Show detailed information for a single skill — description, source path, requirements with per-item status, and install hints.
lsbot skills check
Summary view — counts by status, lists ready skills and what's missing.
lsbot skills enable <name>
Re-enable a previously disabled skill. Removes the name from skills.disabled in bot.yaml.
lsbot skills disable <name>
Disable a skill. Adds the name to skills.disabled in bot.yaml. The skill remains on disk but is excluded from eligibility checks.
JSON Output
All read commands support --json for scripting:
Skill Discovery
Skills are loaded from three directories in precedence order. When two directories contain a skill with the same name, the higher-precedence source wins.
| Priority | Location | Description |
|---|---|---|
| 1 (lowest) | <binary>/../skills/ or ./bundled-skills/ | Bundled skills shipped with the binary |
| 2 | ~/.lingti/skills/ | User-installed (managed) skills |
| 3 (highest) | ./skills/ | Project-specific (workspace) skills |
The bundled directory is resolved automatically:
$LINGTI_BUNDLED_SKILLS_DIRenvironment variable (if set)<executable-dir>/../skills/<executable-dir>/skills/./bundled-skills/(development mode)
Additional directories can be configured in bot.yaml:
Creating a Skill
1. Create the directory
2. Write SKILL.md
3. Verify
SKILL.md Format
A SKILL.md file has two parts:
- YAML frontmatter (between
---delimiters) — machine-readable metadata - Markdown body — instructions for the AI agent
Frontmatter Fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Unique skill identifier |
description | string | yes | Short description (shown in list, truncated to ~36 chars) |
homepage | string | no | URL to documentation or project page |
Metadata Fields
Nested under metadata: in the frontmatter.
| Field | Type | Default | Description |
|---|---|---|---|
emoji | string | 📦 | Emoji shown next to skill name |
os | []string | (all) | Allowed operating systems: darwin, linux, windows |
always | bool | false | Skip all gating — always mark as eligible |
requires.bins | []string | [] | Required binaries — all must exist in PATH |
requires.any_bins | []string | [] | At least one must exist in PATH |
requires.env | []string | [] | Required environment variables — all must be set |
install | []InstallSpec | [] | How to install missing requirements |
InstallSpec Fields
Each entry in the install array:
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for this install method |
kind | string | Package manager: brew, apt, go, npm, download |
formula | string | Homebrew formula (for kind: brew) |
package | string | Package name (for kind: apt or kind: npm) |
module | string | Go module path (for kind: go) |
url | string | Download URL (for kind: download) |
label | string | Human-readable label shown in skills info |
bins | []string | Binaries this method installs |
OpenClaw Compatibility
Skills from the OpenClaw project work out of the box. The parser automatically handles OpenClaw's nested metadata format:
This is equivalent to the flat format:
Eligibility Gating
When a skill is discovered, it goes through a series of gates to determine if it's eligible (ready to use):
A skill that fails any gate is marked as missing (with details of what's missing). A skill explicitly listed in skills.disabled is marked as disabled.
Configuration
Skills configuration lives in bot.yaml under the skills key:
Config file location:
- macOS:
~/Library/Preferences/Lingti/bot.yaml - Linux:
~/.config/lingti/bot.yaml - Other:
~/.lingti/bot.yaml
Directory Layout
Bundled Skills
Lingti-bot ships with 8 bundled skills:
| Skill | Emoji | Requires | Description |
|---|---|---|---|
1password | 🔐 | op | 1Password CLI for secrets management |
discord | 🎮 | — | Discord bot control and moderation |
github | 🐙 | gh | GitHub CLI for issues, PRs, CI, and API queries |
obsidian | 💎 | obsidian-cli | Work with Obsidian vaults |
peekaboo | 👀 | peekaboo | macOS UI automation (screenshots, clicks, typing) |
slack | 💬 | — | Slack workspace control |
tmux | 🧵 | tmux | Remote-control tmux sessions for interactive CLIs |
weather | 🌤️ | curl | Weather forecasts via wttr.in and Open-Meteo |
Examples
Override a bundled skill
Create a skill with the same name in ~/.lingti/skills/ to override the bundled version:
The managed version takes precedence over the bundled one.
Project-specific skill
Add a skill that only applies to the current project:
Skill that requires an API key
If OPENAI_API_KEY is not set, the skill shows as missing with a clear indication of what's needed.