Why Create Skills?
Before (repeating yourself):When to Create a Skill
Create a skill when you find yourself:- Repeating the same instructions across multiple conversations
- Working with domain-specific knowledge (company policies, API schemas, workflows)
- Using the same multi-step procedures repeatedly
- Needing consistent behavior for specific tools or frameworks
- Sharing best practices across a team
Quick Start
Easiest Way: Let OpenHands Help
The simplest way to create a skill is to ask OpenHands to help you:skill-creator skill will guide you through an interactive process:
- Asks questions about your use cases and requirements
- Suggests appropriate skill structure (references, scripts, assets)
- Helps you write effective trigger keywords and descriptions
- Ensures you follow best practices automatically
- Creates the complete skill structure for you
Manual Approach
If you prefer to create the skill structure manually:-
Create the skill directory:
-
Create the SKILL.md file:
- Add content (see structure and guidelines below)
- Test it by using a trigger keyword in your prompt
Determining Scope
Before writing your skill, define its scope clearly:Ask These Questions
-
What specific task does this skill handle?
- ❌ Too broad: “Help with coding”
- ✅ Focused: “Lint Python code using ruff with our company rules”
-
What knowledge is required?
- Code style guidelines
- API documentation
- Domain-specific schemas
- Multi-step procedures
-
What resources are needed?
- Scripts for deterministic tasks
- Reference documents for detailed information
- Asset files for templates or boilerplate
-
Who will use this skill?
- Just you (keep it simple)
- Your team (add more documentation)
- Public sharing (comprehensive examples)
Scope Examples
Good scope (focused):- “Configure pre-commit hooks for Python projects”
- “Generate financial reports using our SQL schema”
- “Deploy to our Kubernetes staging environment”
- “Help with Python”
- “Work with databases”
- “Deploy applications”
Choosing Name and Triggers
The skill name and trigger keywords determine when OpenHands loads your skill.Naming Your Skill
Choose a clear, descriptive name:- Use lowercase with hyphens:
python-linting,k8s-deploy,api-docs - Be specific:
ruff-linternot justlinter - Match common terms: Use vocabulary your users know
Defining Triggers
Triggers are keywords that automatically activate your skill. Choose words users naturally say when they need this skill.Keyword Triggers
Keyword Triggers
List specific words or phrases that should activate the skill:Best practices:
- Include 2-5 trigger keywords
- Use terms users actually say
- Include tool names (e.g., “ruff”, “pytest”)
- Include action words (e.g., “lint”, “test”, “deploy”)
Description-Based Triggering
Description-Based Triggering
The skill description is crucial for trigger matching. Write it in third person and include specific phrases:Key elements:
- Start with “This skill should be used when…”
- Quote specific user phrases: “deploy to Kubernetes”
- List concrete scenarios
- Mention related tools or frameworks
Examples of Good Triggers
Defining the Skill Body
The skill body contains the instructions OpenHands will follow. Write in imperative form (command form) rather than second person.Basic Structure
Writing Style
Use imperative/infinitive form: ✅ “Check the configuration file” ✅ “Validate input before processing” ✅ “Run tests after deployment” Avoid second person: ❌ “You should check the configuration” ❌ “You need to validate input” ❌ “You must run tests”Keep It Focused
SKILL.md content:- Core concepts and workflows (1,500-2,000 words ideal)
- Essential procedures
- Quick reference information
- Pointers to additional resources
- Exhaustive API documentation (use
references/instead) - Detailed edge cases (use
references/instead) - Long examples (use
references/instead)
Best Practices and Tips
Use Numbered Step Workflows
For multi-step procedures, use numbered lists:-
Apply to staging:
-
Verify pod status:
-
Check logs:
- Keeps context window smaller when skill loads
- OpenHands reads references only when needed
- Easier to maintain and update specific sections
Create Scripts for Predictable Steps
For tasks that are repeatedly rewritten or need deterministic behavior, create executable scripts:- Same code being rewritten repeatedly
- Deterministic reliability required
- Complex parsing or validation
- Multi-step automation
- Token efficient (scripts can run without being read)
- Deterministic behavior
- Reusable across projects
- Can be versioned and tested
Include Quick Reference Tables
Use tables for configuration options, command flags, or status codes:Provide Concrete Examples
Show real examples, not abstract descriptions:Use Progressive Disclosure
Structure information from simple to complex:- SKILL.md: Essential workflows and core concepts
- references/: Detailed patterns, advanced techniques, edge cases
- scripts/: Automation for predictable tasks
- assets/: Templates and boilerplate files
Complete Example
Here’s a complete skill for Python code review:Testing Your Skill
After creating your skill:-
Verify structure:
-
Check frontmatter: Ensure YAML is valid with
name,description, andtriggers -
Test trigger keywords: Use a trigger word in a prompt:
- Verify loading: OpenHands should indicate the skill was loaded
- Iterate: Improve based on actual usage
Common Mistakes to Avoid
Next Steps
- Add your skill to your workspace
- Share skills with the community
- Learn the AgentSkills format for advanced features
- Explore example skills for inspiration
Further Reading
For advanced skill creation techniques and SDK integration:- Plugins - Bundle multiple skills with hooks and MCP config
- SDK Skills Guide - Programmatic skill creation
- Skills Architecture - Technical details
- Official Skill Registry - Community examples

