From skill-forge
Scaffolds and builds Claude Code skills from plans or descriptions, generating SKILL.md files, sub-skills, scripts, references, agents, and templates.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-forge:skill-forge-buildThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Determine what we're building from:
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.
npx claudepluginhub agricidaniel/skill-forgeGuides creation, refinement, and best practices for Claude Code Skills including SKILL.md structure, router patterns, workflows, references, XML formatting, and progressive disclosure.
Guides creation of Claude Code SKILL.md files with YAML frontmatter, progressive disclosure, and naming conventions. Use when authoring or auditing agent skills.
Creates, reviews, tests, and packages Anthropic Agent Skills for Claude.ai and Claude Code from docs or projects, with templates, auditing, and trigger testing.