From skill-forge
Scaffolds and builds Claude Code skills from plans or descriptions, generating SKILL.md files, sub-skills, scripts, references, agents, and templates.
npx claudepluginhub agricidaniel/skill-forgeThis skill uses the workspace's default tool permissions.
Determine what we're building from:
Scaffolds new Claude Code skills from scratch via 5-phase workflow: input validation, research from Anthropic docs/cache, conflict checks, and structured generation.
Guides creation of Agent Skills via workflows for discovery, archetype selection, SKILL.md structure, frontmatter schema, and validation for Claude Code, Cursor, VS Code.
Guides creation, refinement, and best practices for Claude Code Skills including SKILL.md structure, router patterns, workflows, references, XML formatting, and progressive disclosure.
Share bugs, ideas, or general feedback.
Determine what we're building from:
/skill-forge plan (preferred)If no plan exists, run a quick planning pass (ask 3 key questions):
The most critical step. The description field determines activation.
Framework for writing descriptions:
[Capability statement] + [Detailed capabilities] + [Trigger phrases]
Rules:
Use references/description-guide.md for the full framework.
Structure the body following this template:
# [Skill Name] -- [Tagline]
[1-2 sentence overview]
## Quick Reference
| Command | What it does |
|---------|-------------|
| /name cmd1 | Description |
| /name cmd2 | Description |
## Orchestration Logic
[How commands route to sub-skills]
[Decision trees for conditional routing]
## [Domain-Specific Section]
[Core rules, thresholds, quality gates]
## Reference Files
[List of on-demand reference files]
## Sub-Skills
[List of sub-skills with one-line descriptions]
Critical SKILL.md rules:
For each sub-skill, generate a SKILL.md with:
---
name: parent-child
description: >
[What it does]. Use when user says "[trigger 1]", "[trigger 2]",
"[trigger 3]", or "[trigger 4]".
---
Sub-skill body guidelines:
references/ directoryFor each script:
#!/usr/bin/env python3
"""
Purpose: [What this script does]
Input: [Expected input format]
Output: [Expected output format]
Usage: python scripts/script_name.py [args]
"""
import argparse
import json
import sys
from typing import Any
def main(args: argparse.Namespace) -> dict[str, Any]:
"""Main execution function."""
# Validate inputs
# Do the work
# Return structured output
pass
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="[Script description]")
parser.add_argument("input", help="[Input description]")
parser.add_argument("--output", "-o", help="Output file path")
args = parser.parse_args()
try:
result = main(args)
print(json.dumps(result, indent=2))
except Exception as e:
print(json.dumps({"error": str(e)}), file=sys.stderr)
sys.exit(1)
Script rules:
For each reference file:
Agent files use YAML frontmatter (different from skills):
---
name: [skill-name]-[role]
description: >
[What this agent analyzes].
<example>User says: "[trigger]"</example>
model: inherit
color: blue
tools:
- Read
- Grep
- Glob
---
You are a [role] specialist.
## Your Role
[What this agent does]
## Process
1. [Steps...]
## Output Format
Return structured markdown with findings and recommendations.
Key differences from skills: Agent name is 3-50 chars, descriptions CAN use
<example> blocks, agent-only fields include tools, color, permissionMode,
maxTurns, memory. Body becomes the system prompt (second person).
Create install.sh that copies files to ~/.claude/skills/ and ~/.claude/agents/.
Run python scripts/validate_skill.py <path> on the generated skill.
Check all quality gates from the main SKILL.md.
Present the user with:
For quick scaffolding, use:
python scripts/init_skill.py <skill-name> --tier <1-4> --path <output-path>
This creates the full directory structure with placeholder content.