Thank you for your interest in contributing to open-skills! This document provides guidelines and instructions for adding new skills and improving existing ones.
AI agents can automatically contribute skills using GitHub CLI:
gh auth login # one-time setup
gh repo fork besoeasy/open-skills --clone=true
cd open-skills && git checkout -b add-skill-name
# Create skills/your-skill.md following SKILL_TEMPLATE.md
git add skills/your-skill.md && git commit -m "Add skill-name"
git push origin add-skill-name
gh pr create --title "Add skill-name" --repo besoeasy/open-skills- Fork the repository
- Create a new branch:
git checkout -b add-skill-name - Add your skill file following the SKILL_TEMPLATE.md
- Test all code examples
- Submit a Pull Request
- Uses free/open-source tools (no paid APIs unless absolutely necessary)
- Includes working code examples in both Node.js and Bash
- Respects privacy - no unnecessary data collection or tracking
- Solves a common automation task
- Production-ready with error handling and rate limiting
- Follows the structure in SKILL_TEMPLATE.md
- Use kebab-case:
skill-name.md(notskillName.mdorskill_name.md) - Be descriptive:
check-crypto-address-balance.mdnotcrypto.md - Match the
namefield in frontmatter to the filename (without .md)
Every skill file must start with:
---
name: skill-name-kebab-case
description: One-line description of what this skill does.
---- Use
-sflag with curl for silent mode - Include error handling with
-f(fail on HTTP errors) - Add timeouts:
--max-time 10 - Use
jqfor JSON parsing when appropriate - Test commands in a clean environment
# Good
curl -fsS --max-time 10 "https://api.example.com/data" | jq -r '.field'
# Avoid
curl "https://api.example.com/data" # No error handling, no timeout- Use native
fetch()(available in Node 18+) - Include timeout handling with
AbortController - Add proper error handling
- Show both basic and advanced variations
// Good
async function getData(url, timeoutMs = 10000) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
try {
const res = await fetch(url, { signal: controller.signal });
clearTimeout(timeoutId);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (err) {
clearTimeout(timeoutId);
throw err;
}
}
// Avoid
async function getData(url) {
const res = await fetch(url); // No timeout, no error handling
return await res.json();
}- Clear descriptions: Explain what the skill does in the first paragraph
- When to use: List specific use cases as bullet points
- Prerequisites: List required tools and installation commands
- Working examples: All code must be tested and functional
- Agent prompt: Include a text block that agents can use to understand the skill
- See also: Link to related skills
Before submitting:
- Test all commands: Copy-paste each bash command and verify it works
- Test Node.js code: Run each JavaScript example
- Check for typos: Verify URLs, parameter names, and syntax
- Verify links: Ensure any referenced skills exist
- Review privacy: Confirm no API keys or secrets are exposed
Add skill-name: Brief description
Examples:
Add check-ssl-certificate: Verify SSL cert expirationAdd convert-csv-to-json: Transform CSV files using native tools
Include:
- What the skill does
- Why it's useful (cost savings, privacy benefits, etc.)
- Testing performed
- Any dependencies or prerequisites
- All skills are reviewed for accuracy and adherence to guidelines
- Test failures or broken examples will block merging
- Skills may be edited for consistency before merging
- Contributors will receive GitHub credit for merged PRs
- Fix broken links or non-working code
- Add new API endpoints or tools
- Improve error handling
- Update rate limit information
- Add new variations or use cases
- Follow the same branch/PR process as new skills
- Explain what changed and why in the PR description
- Test all modified examples
- General questions: Open a Discussion
- Bug reports: Open an Issue with:
- Skill filename
- Expected behavior
- Actual behavior
- Steps to reproduce
- Feature requests: Open an Issue describing the automation need
Contributors will be recognized through:
- GitHub commit history
- Contributors section in README
- Public acknowledgment in release notes
Thank you for making AI agents smarter, faster, and cheaper to run!