
Skill Create
- 587 installs
- 1 repo stars
- Updated January 3, 2026
- skillscatalog/registry
skill-create is an Agent Skill that scaffolds a new Agent Skill folder with SKILL.md, manifest integrity hashing, and optional script templates for developers who need to ship reusable coding-agent capabilities faster.
About
skill-create is a version 1.0.0 Agent Skill from skillscatalog/registry that automates bootstrapping compliant skill directories for Agent Skills-compatible tools. The bundled create_skill.py script (11,814 bytes) generates folder structure, a 2,796-byte SKILL.md manifest entry, and optional templates while recording sha256 integrity hashes per agentskills.io manifest v1.0. Developers reach for skill-create when standardizing new agent capabilities across Claude Code, Cursor, or Codex instead of hand-authoring YAML frontmatter and hash manifests. The generator skill-manifest-generator/1.0.0 produced the registry metadata, giving teams a repeatable path from idea to installable skill package with verified file integrity.
- Scaffolds skills from 3 templates: basic, with-scripts, and with-assets
- Ships create_skill.py CLI with interactive and flag-based usage
- Emits agentskills.io-style manifest metadata with per-file SHA-256 integrity
- Supports custom descriptions and naming via command-line arguments
Skill Create by the numbers
- 587 all-time installs (skills.sh)
- +1 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #91 of 782 Skill Development skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/skillscatalog/registry --skill skill-createAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 587 |
|---|---|
| repo stars | ★ 1 |
| Security audit | 3 / 3 scanners passed |
| Last updated | January 3, 2026 |
| Repository | skillscatalog/registry ↗ |
How do you scaffold Agent Skills with manifest integrity?
Scaffold a new Agent Skill folder with SKILL.md, manifest integrity, and optional script templates so your coding agent can ship reusable capabilities faster.
Who is it for?
Agent skill authors in skillscatalog/registry who want compliant SKILL.md folders with sha256 manifests instead of manual boilerplate.
Skip if: Developers building application features who do not author Agent Skills or need runtime MCP server configuration instead of skill scaffolding.
When should I use this skill?
The user wants to create a new Agent Skill folder with SKILL.md, manifest integrity, and optional script templates in a registry repository.
What you get
SKILL.md file, manifest v1.0 integrity hashes, skill folder structure, and optional scripts/create_skill.py scaffolding.
- SKILL.md scaffold
- Manifest v1.0 with sha256 hashes
- Optional helper scripts
By the numbers
- skill-create version 1.0.0 with manifest v1.0 schema
- Bundles create_skill.py at 11,814 bytes and SKILL.md at 2,796 bytes
- Records per-file sha256 integrity hashes in the registry manifest
Files
Instructions
Use this skill to create new Agent Skills from templates. It generates a properly structured skill directory with a valid SKILL.md file and optional scripts/assets folders.
When to Use
- Starting a new skill from scratch
- Ensuring proper skill structure and naming
- Quickly prototyping new skill ideas
- Teaching others how to structure skills
How to Use
Create a new skill with a name:
Create a new skill called "pdf-tools"Create a skill with a specific template:
Create a new skill called "data-analyzer" using the with-scripts templateAvailable templates:
- basic - Just SKILL.md (default)
- with-scripts - SKILL.md + scripts directory
- with-assets - SKILL.md + scripts + assets directories
Output
Creates a complete skill directory:
Basic template:
pdf-tools/
├── SKILL.md
└── README.mdWith-scripts template:
pdf-tools/
├── SKILL.md
├── README.md
└── scripts/
└── main.pyWith-assets template:
pdf-tools/
├── SKILL.md
├── README.md
├── scripts/
│ └── main.py
└── assets/
└── .gitkeepExamples
Basic skill:
User: Create a new skill called "code-formatter"
Agent: Creating skill "code-formatter" with basic template...
Created:
✓ code-formatter/SKILL.md
✓ code-formatter/README.md
Next steps:
1. Edit SKILL.md with your skill's instructions
2. Add any supporting files
3. Run skill-validator to check complianceInteractive mode:
User: Create a new skill
Agent: I'll help you create a new skill.
Skill name: code-formatter
Description: Format code in various languages
Template: with-scripts
License: MIT
Creating...
✓ Created code-formatter with with-scripts templateWith metadata:
User: Create a new skill called "api-tester" with description "Test REST APIs" and author "acme-corp"
Agent: Creating skill "api-tester"...
✓ Created with custom metadata:
- Description: Test REST APIs
- Author: acme-corp
- License: MIT (default)Limitations
- Skill names must be lowercase with hyphens only (1-64 chars)
- Names must start with a letter
- Will not overwrite existing directories
- Templates are minimal - intended as starting points
Dependencies
- Python 3.9+
- No external dependencies (uses Python stdlib)
{
"$schema": "https://agentskills.io/schemas/manifest.v1.json",
"manifestVersion": "1.0",
"generatedAt": "2026-01-03T03:55:59.147373Z",
"generator": "skill-manifest-generator/1.0.0",
"skill": {
"name": "skill-create",
"version": "1.0.0"
},
"integrity": {
"algorithm": "sha256",
"hash": "d580282b9222fa342ce073b5bb18a8957cd5c57e3fe1af9f17305c087ba1c4b8"
},
"files": [
{
"path": "SKILL.md",
"size": 2796,
"sha256": "83d1f4803d5bfcc3e868ed6699c296b64e9c03f31da1ed027e94df1d2bb1aca3",
"type": "manifest"
},
{
"path": "scripts/create_skill.py",
"size": 11814,
"sha256": "f04cd4fa32ea010ab3741be28a5c1718dd810ebfcc03c81196d5b301d5e8c238",
"type": "script"
}
],
"externalReferences": [],
"structure": {
"maxDepth": 1,
"totalFiles": 2,
"totalBytes": 14610,
"folders": [
"scripts"
]
},
"license": {
"spdxId": "MIT"
}
}
#!/usr/bin/env python3
"""
Skill Scaffolder
Creates new Agent Skills from templates with proper structure.
Usage:
python scaffold_skill.py my-skill
python scaffold_skill.py my-skill --template with-scripts
python scaffold_skill.py my-skill --description "My awesome skill"
python scaffold_skill.py --interactive
"""
import argparse
import os
import re
import sys
from datetime import datetime
from pathlib import Path
from textwrap import dedent
from typing import Optional
TEMPLATES = ["basic", "with-scripts", "with-assets"]
DEFAULT_LICENSE = "MIT"
DEFAULT_AUTHOR = ""
def validate_name(name: str) -> tuple[bool, Optional[str]]:
"""
Validate skill name according to spec.
Rules:
- 1-64 characters
- lowercase alphanumeric and hyphens only
- must start with a letter
- cannot end with hyphen
- no consecutive hyphens
"""
if not name or len(name) == 0:
return False, "Name is required"
if len(name) > 64:
return False, f"Name exceeds 64 characters (got {len(name)})"
if not re.match(r'^[a-z0-9-]+$', name):
return False, "Name must be lowercase alphanumeric and hyphens only"
if not re.match(r'^[a-z]', name):
return False, "Name must start with a letter"
if name.endswith("-"):
return False, "Name cannot end with a hyphen"
if "--" in name:
return False, "Name cannot contain consecutive hyphens"
return True, None
def generate_skill_md(
name: str,
description: str = "",
version: str = "1.0.0",
license_id: str = DEFAULT_LICENSE,
author: str = DEFAULT_AUTHOR,
tags: list[str] = None
) -> str:
"""Generate SKILL.md content with proper frontmatter."""
if not description:
description = f"A skill for {name.replace('-', ' ')}"
if tags is None:
tags = []
# Build frontmatter
frontmatter_lines = [
"---",
f"name: {name}",
f"description: {description}",
f"version: {version}",
f"license: {license_id}",
]
if author:
frontmatter_lines.append(f'author: "{author}"')
if tags:
frontmatter_lines.append("tags:")
for tag in tags:
frontmatter_lines.append(f" - {tag}")
frontmatter_lines.append("---")
frontmatter = "\n".join(frontmatter_lines)
# Instructions template
instructions = dedent(f'''
## Instructions
Describe what this skill does and how an agent should use it.
### When to Use
- Describe scenarios when this skill is helpful
- List specific use cases
### How to Use
Explain how to invoke the skill:
```
Example prompt that triggers this skill
```
## Examples
**Example 1:**
```
User: [example user request]
Agent: [example agent response]
```
## Limitations
- List any limitations or constraints
- Note required dependencies
## Dependencies
- Python 3.9+ (if applicable)
- List any external dependencies
''').strip()
return f"{frontmatter}\n\n{instructions}\n"
def generate_readme(name: str, description: str = "") -> str:
"""Generate README.md content."""
if not description:
description = f"A skill for {name.replace('-', ' ')}"
return dedent(f'''
# {name}
{description}
## Installation
This skill can be installed in any agent harness that supports the Agent Skills Specification.
## Usage
See `SKILL.md` for instructions.
## License
MIT
''').strip() + "\n"
def generate_main_py(name: str) -> str:
"""Generate a template main.py script."""
return dedent(f'''
#!/usr/bin/env python3
"""
{name}
Main script for the {name} skill.
"""
import argparse
import sys
from pathlib import Path
def main():
parser = argparse.ArgumentParser(
description="{name.replace('-', ' ').title()}"
)
parser.add_argument(
"input",
type=str,
help="Input to process"
)
parser.add_argument(
"--verbose", "-v",
action="store_true",
help="Verbose output"
)
args = parser.parse_args()
# TODO: Implement your skill logic here
print(f"Processing: {{args.input}}")
return 0
if __name__ == "__main__":
sys.exit(main())
''').strip() + "\n"
def create_skill(
output_dir: Path,
name: str,
template: str = "basic",
description: str = "",
version: str = "1.0.0",
license_id: str = DEFAULT_LICENSE,
author: str = DEFAULT_AUTHOR,
tags: list[str] = None
) -> list[str]:
"""
Create a skill directory with the specified template.
Returns list of created files.
"""
skill_dir = output_dir / name
created_files = []
# Check if directory exists
if skill_dir.exists():
raise FileExistsError(f"Directory already exists: {skill_dir}")
# Create base directory
skill_dir.mkdir(parents=True)
# Create SKILL.md
skill_md_path = skill_dir / "SKILL.md"
skill_md_content = generate_skill_md(
name=name,
description=description,
version=version,
license_id=license_id,
author=author,
tags=tags
)
skill_md_path.write_text(skill_md_content)
created_files.append(str(skill_md_path.relative_to(output_dir)))
# Create README.md
readme_path = skill_dir / "README.md"
readme_content = generate_readme(name, description)
readme_path.write_text(readme_content)
created_files.append(str(readme_path.relative_to(output_dir)))
# Add scripts directory for with-scripts and with-assets templates
if template in ["with-scripts", "with-assets"]:
scripts_dir = skill_dir / "scripts"
scripts_dir.mkdir()
main_py_path = scripts_dir / "main.py"
main_py_content = generate_main_py(name)
main_py_path.write_text(main_py_content)
main_py_path.chmod(0o755) # Make executable
created_files.append(str(main_py_path.relative_to(output_dir)))
# Add assets directory for with-assets template
if template == "with-assets":
assets_dir = skill_dir / "assets"
assets_dir.mkdir()
gitkeep_path = assets_dir / ".gitkeep"
gitkeep_path.write_text("")
created_files.append(str(gitkeep_path.relative_to(output_dir)))
return created_files
def interactive_mode(output_dir: Path) -> int:
"""Run in interactive mode, prompting for all inputs."""
print("\n=== Skill Scaffolder ===\n")
# Get name
while True:
try:
name = input("Skill name: ").strip().lower()
except (EOFError, KeyboardInterrupt):
print("\nCancelled.")
return 1
valid, error = validate_name(name)
if valid:
break
print(f" Invalid: {error}")
# Get description
description = input("Description (optional): ").strip()
# Get template
print(f"Templates: {', '.join(TEMPLATES)}")
template_input = input(f"Template [{TEMPLATES[0]}]: ").strip().lower()
template = template_input if template_input in TEMPLATES else TEMPLATES[0]
# Get license
license_id = input(f"License [{DEFAULT_LICENSE}]: ").strip() or DEFAULT_LICENSE
# Get author
author = input("Author (optional): ").strip()
# Get tags
tags_input = input("Tags (comma-separated, optional): ").strip()
tags = [t.strip().lower() for t in tags_input.split(",") if t.strip()] if tags_input else []
print()
try:
created = create_skill(
output_dir=output_dir,
name=name,
template=template,
description=description,
license_id=license_id,
author=author,
tags=tags
)
print(f"Created skill: {name}/")
for f in created:
print(f" {f}")
print()
print("Next steps:")
print(" 1. Edit SKILL.md with your skill's instructions")
print(" 2. Add any supporting files")
print(" 3. Run skill-validator to check compliance")
print()
return 0
except FileExistsError as e:
print(f"Error: {e}")
return 1
def main():
parser = argparse.ArgumentParser(
description="Create new Agent Skills from templates"
)
parser.add_argument(
"name",
type=str,
nargs="?",
help="Name of the skill to create"
)
parser.add_argument(
"--template", "-t",
type=str,
choices=TEMPLATES,
default="basic",
help=f"Template to use (default: basic)"
)
parser.add_argument(
"--description", "-d",
type=str,
default="",
help="Skill description"
)
parser.add_argument(
"--version", "-v",
type=str,
default="1.0.0",
help="Skill version (default: 1.0.0)"
)
parser.add_argument(
"--license", "-l",
type=str,
default=DEFAULT_LICENSE,
help=f"License (default: {DEFAULT_LICENSE})"
)
parser.add_argument(
"--author", "-a",
type=str,
default="",
help="Author name"
)
parser.add_argument(
"--tags",
type=str,
default="",
help="Comma-separated tags"
)
parser.add_argument(
"--output", "-o",
type=Path,
default=Path.cwd(),
help="Output directory (default: current directory)"
)
parser.add_argument(
"--interactive", "-i",
action="store_true",
help="Run in interactive mode"
)
parser.add_argument(
"--json",
action="store_true",
help="Output result as JSON"
)
args = parser.parse_args()
# Interactive mode
if args.interactive or not args.name:
return interactive_mode(args.output)
# Validate name
valid, error = validate_name(args.name)
if not valid:
if args.json:
import json
print(json.dumps({"success": False, "error": error}))
else:
print(f"Error: {error}")
return 1
# Parse tags
tags = [t.strip().lower() for t in args.tags.split(",") if t.strip()] if args.tags else []
try:
created = create_skill(
output_dir=args.output,
name=args.name,
template=args.template,
description=args.description,
version=args.version,
license_id=args.license,
author=args.author,
tags=tags
)
if args.json:
import json
print(json.dumps({
"success": True,
"skill": args.name,
"template": args.template,
"files": created
}, indent=2))
else:
print(f"\nCreated skill: {args.name}/")
for f in created:
print(f" {f}")
print()
print("Next steps:")
print(" 1. Edit SKILL.md with your skill's instructions")
print(" 2. Add any supporting files")
print(" 3. Run skill-validator to check compliance")
print()
return 0
except FileExistsError as e:
if args.json:
import json
print(json.dumps({"success": False, "error": str(e)}))
else:
print(f"Error: {e}")
return 1
if __name__ == "__main__":
sys.exit(main())
Related skills
How it compares
Choose skill-create to bootstrap compliant skill folders with integrity manifests instead of meta skills that only describe conventions without a generator script.
FAQ
What files does skill-create generate?
skill-create generates a skill folder with SKILL.md, agentskills.io manifest v1.0 metadata, and sha256 integrity hashes per file. The registry bundles create_skill.py at 11,814 bytes to automate scaffolding and optional script templates.
Which manifest schema does skill-create use?
skill-create uses the agentskills.io manifest v1.0 schema with sha256 integrity hashing. The skill-create package itself is version 1.0.0 and was generated by skill-manifest-generator/1.0.0 in skillscatalog/registry.
Is Skill Create safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.