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 skill with a specific template: Available templates: - basic - Just SKILL.md (default) - with-scripts - SKILL.md + scripts directory - with-assets - SKILL.md + scripts + assets directories…

, name):\n return False, \"Name must be lowercase alphanumeric and hyphens only\"\n\n if not re.match(r'^[a-z]', name):\n return False, \"Name must start with a letter\"\n\n if name.endswith(\"-\"):\n return False, \"Name cannot end with a hyphen\"\n\n if \"--\" in name:\n return False, \"Name cannot contain consecutive hyphens\"\n\n return True, None\n\n\ndef generate_skill_md(\n name: str,\n description: str = \"\",\n version: str = \"1.0.0\",\n license_id: str = DEFAULT_LICENSE,\n author: str = DEFAULT_AUTHOR,\n tags: list[str] = None\n) -> str:\n \"\"\"Generate SKILL.md content with proper frontmatter.\"\"\"\n if not description:\n description = f\"A skill for {name.replace('-', ' ')}\"\n\n if tags is None:\n tags = []\n\n # Build frontmatter\n frontmatter_lines = [\n \"---\",\n f\"name: {name}\",\n f\"description: {description}\",\n f\"version: {version}\",\n f\"license: {license_id}\",\n ]\n\n if author:\n frontmatter_lines.append(f'author: \"{author}\"')\n\n if tags:\n frontmatter_lines.append(\"tags:\")\n for tag in tags:\n frontmatter_lines.append(f\" - {tag}\")\n\n frontmatter_lines.append(\"---\")\n\n frontmatter = \"\\n\".join(frontmatter_lines)\n\n # Instructions template\n instructions = dedent(f'''\n ## Instructions\n\n Describe what this skill does and how an agent should use it.\n\n ### When to Use\n\n - Describe scenarios when this skill is helpful\n - List specific use cases\n\n ### How to Use\n\n Explain how to invoke the skill:\n\n ```\n Example prompt that triggers this skill\n ```\n\n ## Examples\n\n **Example 1:**\n ```\n User: [example user request]\n Agent: [example agent response]\n ```\n\n ## Limitations\n\n - List any limitations or constraints\n - Note required dependencies\n\n ## Dependencies\n\n - Python 3.9+ (if applicable)\n - List any external dependencies\n ''').strip()\n\n return f\"{frontmatter}\\n\\n{instructions}\\n\"\n\n\ndef generate_readme(name: str, description: str = \"\") -> str:\n \"\"\"Generate README.md content.\"\"\"\n if not description:\n description = f\"A skill for {name.replace('-', ' ')}\"\n\n return dedent(f'''\n # {name}\n\n {description}\n\n ## Installation\n\n This skill can be installed in any agent harness that supports the Agent Skills Specification.\n\n ## Usage\n\n See `SKILL.md` for instructions.\n\n ## License\n\n MIT\n ''').strip() + \"\\n\"\n\n\ndef generate_main_py(name: str) -> str:\n \"\"\"Generate a template main.py script.\"\"\"\n return dedent(f'''\n #!/usr/bin/env python3\n \"\"\"\n {name}\n\n Main script for the {name} skill.\n \"\"\"\n\n import argparse\n import sys\n from pathlib import Path\n\n\n def main():\n parser = argparse.ArgumentParser(\n description=\"{name.replace('-', ' ').title()}\"\n )\n parser.add_argument(\n \"input\",\n type=str,\n help=\"Input to process\"\n )\n parser.add_argument(\n \"--verbose\", \"-v\",\n action=\"store_true\",\n help=\"Verbose output\"\n )\n\n args = parser.parse_args()\n\n # TODO: Implement your skill logic here\n print(f\"Processing: {{args.input}}\")\n\n return 0\n\n\n if __name__ == \"__main__\":\n sys.exit(main())\n ''').strip() + \"\\n\"\n\n\ndef create_skill(\n output_dir: Path,\n name: str,\n template: str = \"basic\",\n description: str = \"\",\n version: str = \"1.0.0\",\n license_id: str = DEFAULT_LICENSE,\n author: str = DEFAULT_AUTHOR,\n tags: list[str] = None\n) -> list[str]:\n \"\"\"\n Create a skill directory with the specified template.\n\n Returns list of created files.\n \"\"\"\n skill_dir = output_dir / name\n created_files = []\n\n # Check if directory exists\n if skill_dir.exists():\n raise FileExistsError(f\"Directory already exists: {skill_dir}\")\n\n # Create base directory\n skill_dir.mkdir(parents=True)\n\n # Create SKILL.md\n skill_md_path = skill_dir / \"SKILL.md\"\n skill_md_content = generate_skill_md(\n name=name,\n description=description,\n version=version,\n license_id=license_id,\n author=author,\n tags=tags\n )\n skill_md_path.write_text(skill_md_content)\n created_files.append(str(skill_md_path.relative_to(output_dir)))\n\n # Create README.md\n readme_path = skill_dir / \"README.md\"\n readme_content = generate_readme(name, description)\n readme_path.write_text(readme_content)\n created_files.append(str(readme_path.relative_to(output_dir)))\n\n # Add scripts directory for with-scripts and with-assets templates\n if template in [\"with-scripts\", \"with-assets\"]:\n scripts_dir = skill_dir / \"scripts\"\n scripts_dir.mkdir()\n\n main_py_path = scripts_dir / \"main.py\"\n main_py_content = generate_main_py(name)\n main_py_path.write_text(main_py_content)\n main_py_path.chmod(0o755) # Make executable\n created_files.append(str(main_py_path.relative_to(output_dir)))\n\n # Add assets directory for with-assets template\n if template == \"with-assets\":\n assets_dir = skill_dir / \"assets\"\n assets_dir.mkdir()\n\n gitkeep_path = assets_dir / \".gitkeep\"\n gitkeep_path.write_text(\"\")\n created_files.append(str(gitkeep_path.relative_to(output_dir)))\n\n return created_files\n\n\ndef interactive_mode(output_dir: Path) -> int:\n \"\"\"Run in interactive mode, prompting for all inputs.\"\"\"\n print(\"\\n=== Skill Scaffolder ===\\n\")\n\n # Get name\n while True:\n try:\n name = input(\"Skill name: \").strip().lower()\n except (EOFError, KeyboardInterrupt):\n print(\"\\nCancelled.\")\n return 1\n\n valid, error = validate_name(name)\n if valid:\n break\n print(f\" Invalid: {error}\")\n\n # Get description\n description = input(\"Description (optional): \").strip()\n\n # Get template\n print(f\"Templates: {', '.join(TEMPLATES)}\")\n template_input = input(f\"Template [{TEMPLATES[0]}]: \").strip().lower()\n template = template_input if template_input in TEMPLATES else TEMPLATES[0]\n\n # Get license\n license_id = input(f\"License [{DEFAULT_LICENSE}]: \").strip() or DEFAULT_LICENSE\n\n # Get author\n author = input(\"Author (optional): \").strip()\n\n # Get tags\n tags_input = input(\"Tags (comma-separated, optional): \").strip()\n tags = [t.strip().lower() for t in tags_input.split(\",\") if t.strip()] if tags_input else []\n\n print()\n\n try:\n created = create_skill(\n output_dir=output_dir,\n name=name,\n template=template,\n description=description,\n license_id=license_id,\n author=author,\n tags=tags\n )\n\n print(f\"Created skill: {name}/\")\n for f in created:\n print(f\" {f}\")\n print()\n print(\"Next steps:\")\n print(\" 1. Edit SKILL.md with your skill's instructions\")\n print(\" 2. Add any supporting files\")\n print(\" 3. Run skill-validator to check compliance\")\n print()\n return 0\n\n except FileExistsError as e:\n print(f\"Error: {e}\")\n return 1\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"Create new Agent Skills from templates\"\n )\n parser.add_argument(\n \"name\",\n type=str,\n nargs=\"?\",\n help=\"Name of the skill to create\"\n )\n parser.add_argument(\n \"--template\", \"-t\",\n type=str,\n choices=TEMPLATES,\n default=\"basic\",\n help=f\"Template to use (default: basic)\"\n )\n parser.add_argument(\n \"--description\", \"-d\",\n type=str,\n default=\"\",\n help=\"Skill description\"\n )\n parser.add_argument(\n \"--version\", \"-v\",\n type=str,\n default=\"1.0.0\",\n help=\"Skill version (default: 1.0.0)\"\n )\n parser.add_argument(\n \"--license\", \"-l\",\n type=str,\n default=DEFAULT_LICENSE,\n help=f\"License (default: {DEFAULT_LICENSE})\"\n )\n parser.add_argument(\n \"--author\", \"-a\",\n type=str,\n default=\"\",\n help=\"Author name\"\n )\n parser.add_argument(\n \"--tags\",\n type=str,\n default=\"\",\n help=\"Comma-separated tags\"\n )\n parser.add_argument(\n \"--output\", \"-o\",\n type=Path,\n default=Path.cwd(),\n help=\"Output directory (default: current directory)\"\n )\n parser.add_argument(\n \"--interactive\", \"-i\",\n action=\"store_true\",\n help=\"Run in interactive mode\"\n )\n parser.add_argument(\n \"--json\",\n action=\"store_true\",\n help=\"Output result as JSON\"\n )\n\n args = parser.parse_args()\n\n # Interactive mode\n if args.interactive or not args.name:\n return interactive_mode(args.output)\n\n # Validate name\n valid, error = validate_name(args.name)\n if not valid:\n if args.json:\n import json\n print(json.dumps({\"success\": False, \"error\": error}))\n else:\n print(f\"Error: {error}\")\n return 1\n\n # Parse tags\n tags = [t.strip().lower() for t in args.tags.split(\",\") if t.strip()] if args.tags else []\n\n try:\n created = create_skill(\n output_dir=args.output,\n name=args.name,\n template=args.template,\n description=args.description,\n version=args.version,\n license_id=args.license,\n author=args.author,\n tags=tags\n )\n\n if args.json:\n import json\n print(json.dumps({\n \"success\": True,\n \"skill\": args.name,\n \"template\": args.template,\n \"files\": created\n }, indent=2))\n else:\n print(f\"\\nCreated skill: {args.name}/\")\n for f in created:\n print(f\" {f}\")\n print()\n print(\"Next steps:\")\n print(\" 1. Edit SKILL.md with your skill's instructions\")\n print(\" 2. Add any supporting files\")\n print(\" 3. Run skill-validator to check compliance\")\n print()\n\n return 0\n\n except FileExistsError as e:\n if args.json:\n import json\n print(json.dumps({\"success\": False, \"error\": str(e)}))\n else:\n print(f\"Error: {e}\")\n return 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n","content_type":"text/x-python; charset=utf-8","language":"python","size":11814,"content_sha256":"f04cd4fa32ea010ab3741be28a5c1718dd810ebfcc03c81196d5b301d5e8c238"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":2},"content":[{"text":"Instructions","type":"text"}]},{"type":"paragraph","content":[{"text":"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.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"When to Use","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Starting a new skill from scratch","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Ensuring proper skill structure and naming","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Quickly prototyping new skill ideas","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Teaching others how to structure skills","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"How to Use","type":"text"}]},{"type":"paragraph","content":[{"text":"Create a new skill with a name:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Create a new skill called \"pdf-tools\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Create a skill with a specific template:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Create a new skill called \"data-analyzer\" using the with-scripts template","type":"text"}]},{"type":"paragraph","content":[{"text":"Available templates:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"basic","type":"text","marks":[{"type":"strong"}]},{"text":" - Just SKILL.md (default)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"with-scripts","type":"text","marks":[{"type":"strong"}]},{"text":" - SKILL.md + scripts directory","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"with-assets","type":"text","marks":[{"type":"strong"}]},{"text":" - SKILL.md + scripts + assets directories","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Output","type":"text"}]},{"type":"paragraph","content":[{"text":"Creates a complete skill directory:","type":"text"}]},{"type":"paragraph","content":[{"text":"Basic template:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"pdf-tools/\n├── SKILL.md\n└── README.md","type":"text"}]},{"type":"paragraph","content":[{"text":"With-scripts template:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"pdf-tools/\n├── SKILL.md\n├── README.md\n└── scripts/\n └── main.py","type":"text"}]},{"type":"paragraph","content":[{"text":"With-assets template:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"pdf-tools/\n├── SKILL.md\n├── README.md\n├── scripts/\n│ └── main.py\n└── assets/\n └── .gitkeep","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Examples","type":"text"}]},{"type":"paragraph","content":[{"text":"Basic skill:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"User: Create a new skill called \"code-formatter\"\nAgent: Creating skill \"code-formatter\" with basic template...\n\n Created:\n ✓ code-formatter/SKILL.md\n ✓ code-formatter/README.md\n\n Next steps:\n 1. Edit SKILL.md with your skill's instructions\n 2. Add any supporting files\n 3. Run skill-validator to check compliance","type":"text"}]},{"type":"paragraph","content":[{"text":"Interactive mode:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"User: Create a new skill\nAgent: I'll help you create a new skill.\n\n Skill name: code-formatter\n Description: Format code in various languages\n Template: with-scripts\n License: MIT\n\n Creating...\n ✓ Created code-formatter with with-scripts template","type":"text"}]},{"type":"paragraph","content":[{"text":"With metadata:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"User: Create a new skill called \"api-tester\" with description \"Test REST APIs\" and author \"acme-corp\"\nAgent: Creating skill \"api-tester\"...\n ✓ Created with custom metadata:\n - Description: Test REST APIs\n - Author: acme-corp\n - License: MIT (default)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Limitations","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Skill names must be lowercase with hyphens only (1-64 chars)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Names must start with a letter","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Will not overwrite existing directories","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Templates are minimal - intended as starting points","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Dependencies","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Python 3.9+","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"No external dependencies (uses Python stdlib)","type":"text"}]}]}]}]},"metadata":{"date":"2026-11-02","name":"skill-create","tags":["creation","templates","tooling","development"],"author":"@anthropic-agent-skills","source":{"stars":1,"repo_name":"registry","origin_url":"https://github.com/SkillsCatalog/registry/blob/HEAD/skills/skill-create/SKILL.md","repo_owner":"SkillsCatalog","body_sha256":"83d1f4803d5bfcc3e868ed6699c296b64e9c03f31da1ed027e94df1d2bb1aca3","cluster_key":"42347867c2e6f6301034701f64a645fcda90b828e1fe138f86df05c00672feb4","clean_bundle":{"format":"clean-skill-bundle-v1","source":"SkillsCatalog/registry/skills/skill-create/SKILL.md","text_bytes":12764,"source_commit":"e83c630d59313e1899255ca0bb9046abcb6e66cc","skills_sh_rank":17676,"attachment_count":2,"text_attachments":2,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"skills/skill-create/SKILL.md","import_metadata":{"date":"2026-11-02","author":"@anthropic-agent-skills","version":"1.0.0","category":"general","category_label":"General"},"exact_dupes_collapsed_into_this":0},"license":"MIT","version":"1.0.0","category":"general","import_tag":"skills-sh-top20k-2026-11","description":"Create new Agent Skills from templates with best-practice structure, pre-populated SKILL.md, and optional scripts/assets directories."}},"renderedAt":1793671550837}

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 skill with a specific template: Available templates: - basic - Just SKILL.md (default) - with-scripts - SKILL.md + scripts directory - with-assets - SKILL.md + scripts + assets directories…