Philosophy
Skills over features. Instead of adding features (e.g. support for Telegram) to the codebase, contributors submit skills like/add-telegram that transform your fork. You end up with clean code that does exactly what you need.
From the NanoClaw README:
NanoClaw isn’t a monolithic framework; it’s software that fits each user’s exact needs. Instead of becoming bloatware, NanoClaw is designed to be bespoke. You make your own fork and have Claude Code modify it to match your needs.
How skills work
There are four types of skills:- Feature skills — git branches (
skill/*) containing all code changes for an integration, plus aSKILL.mdin the marketplace repo. Applying a feature skill is agit merge. - Utility skills — self-contained tools that ship code files alongside the
SKILL.mdin.claude/skills/<name>/. No branch merge needed — the code lives in the skill directory (e.g.,scripts/). Example:/claw. - Operational skills —
SKILL.mdfiles in.claude/skills/onmain. These are instruction-only: they guide Claude Code through workflows like setup, debugging, and updates. No code changes. - Container skills — loaded inside agent containers at runtime from
container/skills/. They teach the container agent how to use tools, format output, or perform tasks.
Creating your first skill
Choose a skill type
Feature skill — if your skill adds code changes to the codebase (new channel, integration, tool):
- Code changes live on a
skill/*branch - SKILL.md with setup instructions goes in the marketplace repo
- Code lives alongside the SKILL.md in
.claude/skills/{name}/ - No branch merge needed — self-contained in the skill directory
- Use
${CLAUDE_SKILL_DIR}to reference files
- Lives in
.claude/skills/{name}/SKILL.mdonmain - No code changes, just instructions
- Lives in
container/skills/{name}/
For feature skills: make code changes on a branch
Branch from The branch should contain all the code needed for the integration — new files, modified source files, updated dependencies,
main and make your code changes directly:.env.example additions.For utility skills: create a self-contained directory
Create
.claude/skills/{name}/ with a SKILL.md and supporting code files (e.g., in a scripts/ subfolder). Use ${CLAUDE_SKILL_DIR} to reference files in the skill directory. Put code in separate files, not inline in the SKILL.md.For operational skills: write SKILL.md
Create a
SKILL.md in .claude/skills/{name}/ on main. The skill should contain instructions Claude follows to execute a workflow.For container skills: add to container/skills/
Create
container/skills/{name}/SKILL.md. Keep skills focused — the agent’s context window is shared across all container skills.Best practices
Writing clear instructions
Principle from
/setup: When something is broken or missing, fix it. Don’t tell the user to go fix it themselves unless it genuinely requires their manual action (e.g. scanning a QR code, pasting a secret token).- Use
AskUserQuestionfor all user-facing questions - Provide clear, step-by-step commands
- Include error recovery steps
- Show expected output and how to verify success
Handling user input
Always useAskUserQuestion instead of asking in prose: