main as instruction files. Container skills are synced into every container for use by the running agent.
Four types of skills
Operational skills
Operational skills live in.claude/skills/ on main. They contain only a SKILL.md file with instructions for Claude Code — no code changes.
.claude/skills
setup
SKILL.md
debug
SKILL.md
customize
SKILL.md
update-nanoclaw
SKILL.md
update-skills
SKILL.md
SKILL.md format
name(required) — the skill command name (e.g.,setup,debug)description(required) — when Claude Code should invoke this skill
Utility skills
Utility skills are standalone tools that ship code files alongside theSKILL.md. The SKILL.md tells Claude how to install the tool; the code lives in the skill directory itself (e.g., in a scripts/ subfolder).
.claude/skills
claw
SKILL.md
scripts
claw
${CLAUDE_SKILL_DIR} in the SKILL.md to reference files in the skill directory.
Feature skills
Feature skills are distributed asskill/* branches on the upstream repository. Each branch contains all the code changes for that integration: new files, modified source files, updated package.json dependencies, .env.example additions — everything.
skill/telegram branch
src/channels/telegram.ts
src/channels/telegram.test.ts
src/index.ts
src/config.ts
package.json
.env.example
SKILL.md in the marketplace repo (qwibitai/nanoclaw-skills) that provides setup instructions. When you run /add-telegram, Claude reads the SKILL.md and merges the skill branch.
Container skills
Container skills live incontainer/skills/ and are synced into every container’s .claude/skills/ directory. These run inside the agent container, not on the host. They teach the container agent how to use tools, format output, or perform tasks.
container/skills
agent-browser
SKILL.md
capabilities
SKILL.md
slack-formatting
SKILL.md
status
SKILL.md
SKILL.md frontmatter format as operational skills. Some are restricted to the main channel by checking for the /workspace/project mount (only present for main groups).
| Skill | Description | Access |
|---|---|---|
/agent-browser | Browse the web, fill forms, extract data | All groups |
/capabilities | Report installed skills, tools, MCP tools, container utilities, and group info | Main channel only |
/slack-formatting | Slack mrkdwn syntax reference for formatting messages in Slack channels | All groups |
/status | Session context, workspace mounts, tool availability, and scheduled task snapshot | Main channel only |
What’s in a skill branch
A feature skill branch is branched frommain and contains commits that add the integration. The branch includes:
- New files — channel implementations, tests, setup guides
- Modified source files — changes to
src/index.ts,src/config.ts, routing, etc. - Updated
package.json— new npm dependencies - Updated
.env.example— new environment variables - Updated tests — new test cases for the integration
How skills compose
When you apply multiple feature skills, git merge handles composition:src/index.ts to add their channel), git merges the changes automatically. If they modify the same lines, it’s a real merge conflict — Claude resolves it.
This is standard git behavior. No custom merge machinery is needed.
Skill dependencies
Some skills depend on others. For example,skill/telegram-swarm requires skill/telegram. Dependent skill branches are branched from their parent, not from main.
This means skill/telegram-swarm includes all of Telegram’s changes plus its own additions. When you merge skill/telegram-swarm, you get both — no need to merge Telegram separately.
Dependencies are implicit in git history — no separate dependency file is needed.
State tracking
Applied skills are tracked through git history. When you merge a skill branch, the merge commit records what was applied and when.- Idempotency — git won’t re-merge changes that are already in your history
- Audit trail — every skill application is a merge commit with a timestamp
- Easy reversal — revert the merge commit to remove a skill
Testing skills
Tests live alongside the code in the skill branch. When a skill is applied, its tests are part of your codebase.Unit tests
Test the new code added by the skill:Integration tests
Test that the skill integrates correctly with existing code:Validation
After applying a skill, always run the full test suite:Next steps
- See Creating skills for how to create your own skills
- Review Examples of real skills
- Read the Skills system overview for the full picture