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
Skills are stored in.claude/skills/ and consist of:
- SKILL.md - Instructions for Claude Code on how to execute the skill
- Code packages - Files to add or modify (for deterministic skills)
- Intent files - Describe what changed and why (for merge operations)
- Tests - Validation that the skill was applied correctly
Skill types
There are two main types of skills:Interactive skills
Skills that guide Claude Code through a multi-step process with user interaction. Example:/setup - Runs installation, asks questions, handles errors
Characteristics:
- Heavy use of
AskUserQuestionfor user input - Multi-phase execution (preflight, setup, validation)
- Error recovery and troubleshooting
- No deterministic code changes
Deterministic skills
Skills that use the skills engine to make reproducible code changes, then guide setup. Example:/add-telegram - Applies code package, then configures Telegram
Characteristics:
- Phase 1: Check if already applied
- Phase 2: Apply code changes via skills engine
- Phase 3: Interactive setup and configuration
- Phase 4: Validation and testing
- Tracked in
.nanoclaw/state.yaml
Creating your first skill
Choose a skill name
Skill names should be descriptive and use kebab-case:
add-telegram- Adds Telegram channel supportadd-slack- Adds Slack channel supportcustomize- Interactive customization guidedebug- Troubleshooting helper
Write SKILL.md
Create Frontmatter fields:
.claude/skills/your-skill-name/SKILL.md with frontmatter:name(required) - The skill command namedescription(required) - When to invoke this skill
Add code packages (optional)
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: