Agent skill
BuildSkill
Create and validate skills for forge modules. USE WHEN create skill, new skill, write skill, validate skill, check skill, skill structure, skill conventions.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/buildskill-n4m3z-forge-core
SKILL.md
BuildSkill
Create and validate skills following forge conventions. Skills are markdown files (SKILL.md) with YAML frontmatter that teach AI coding tools new capabilities.
Workflow Routing
| Workflow | Trigger | Section |
|---|---|---|
| Create | "create a skill", "new skill", "write a skill" | Create Workflow |
| Validate | "validate skill", "check skill structure" | Validate Workflow |
Skill Conventions
SKILL.md Structure
Every skill is a single SKILL.md file with YAML frontmatter:
---
name: SkillName
description: What it does. USE WHEN trigger phrase one, trigger phrase two, or trigger phrase three.
---
Frontmatter rules:
name:-- PascalCase for multi-word (e.g.,VaultOperations,DailyPlan), natural casing for single words (e.g.,Log,Draft,Init)version:-- semantic version (required for module skills, optional for personal/vault skills)description:-- single line, under 1024 characters, includesUSE WHENwith intent-based triggers joined by commas/OR- Optional:
argument-hint:for skills invoked with/SkillName <args>(e.g.,"[natural language description]") - No separate
triggers:orworkflows:arrays in YAML
Body Structure
# SkillName
Brief description of what the skill does.
## Instructions (or ## Usage)
Step-by-step procedure. Use plain numbered lists for sequential operations.
1. First action
2. Second action
3. Third action
## Constraints
- Boundary conditions and rules
- What NOT to do
Instruction format: Use plain numbered lists (1, 2, 3) — not labeled steps (### Step 1:, ### Phase 2:, ### Step M1:). Headings within Instructions are for separating modes or major sections, not for individual steps. This follows the Fabric/PAI pattern convention.
For skills with multiple workflows: Use ## Workflow Routing table in the body linking to sections within the same file. Keep everything in one SKILL.md unless it exceeds ~200 lines. Extract reference material (schema templates, configuration examples, lookup tables) into companion files loaded via @ -- SKILL.md should focus on flow and routing, not static data.
Where Skills Live
| Location | Purpose |
|---|---|
skills/SkillName/ |
Module skills (shipped with a module) |
| User vault workspace | Personal/experimental skills |
All parent directories must be registered in plugin.json under the skills array for Claude Code discovery. Other providers (Gemini, Codex, OpenCode) use make install from the module's Makefile.
Naming Conventions
| Component | Convention | Examples |
|---|---|---|
| Skill directory | PascalCase | BuildSkill, DailyPlan, VaultOperations |
| Single-word skill | Natural case | Log, Draft, Init, Update |
| SKILL.md | Always SKILL.md |
-- |
CLI Tool Integration
When a skill wraps a CLI tool (Rust binary, shell script), include:
- Tool location -- where the binary lives
- Usage examples -- concrete
bashblocks showing invocation - Intent-to-flag mapping -- table translating natural language to CLI flags
- Output format -- what the tool returns (JSONL, plain text, etc.)
Canon + Sidecar Pattern
Module skills use two files side by side:
| File | Purpose | Contains |
|---|---|---|
SKILL.md |
Canon -- frontmatter + skill body | name:, description:, version:, instructions |
SKILL.yaml |
Sidecar -- everything else | sources:, provider keys, Obsidian metadata |
SKILL.yaml must NOT duplicate SKILL.md fields -- no name: or description: in the sidecar. It carries supplementary data:
sources: # upstream documentation links
- https://example.com/docs
claude: # merged into installed SKILL.md frontmatter
argument-hint: "[file path]" # hint shown during / autocomplete
disable-model-invocation: true # prevents Claude auto-loading
user-invocable: false # hides from / menu
allowed-tools: Read, Grep, Glob # tools usable without permission
model: claude-sonnet-4-6 # model override when skill is active
context: fork # run in subagent context
agent: Explore # subagent type (with context: fork)
user: # free-form namespace (personal metadata)
priority: high
claude: key details: install-skills reads all key-value pairs under claude: and merges them into the installed SKILL.md frontmatter. Any Claude Code skill frontmatter field can go here. Put them in the sidecar instead of SKILL.md to protect them from Obsidian Linter reformatting. Codex uses TOML-based multi-agent configuration, not YAML skill frontmatter — check the provider docs for the latest supported keys.
The sidecar is also the landing zone for Obsidian Linter — any title:, aliases:, tags:, or other vault metadata the Linter injects lands here, not in the canon. The user: namespace is free-form for personal metadata.
Minimal sidecar (skills without external references or provider-specific config):
sources: []
Every SKILL.yaml must have sources: even if empty. Add claude: keys only when needed (argument-hint, model override, etc.).
Why separate files? Obsidian's Linter reformats frontmatter on save -- it adds title:, reorders keys, and may strip unrecognized fields like name:. Separating prevents cross-contamination.
Multi-Provider Routing
Provider routing is controlled by the module's defaults.yaml, not by individual SKILL.yaml files. The install-skills binary reads provider-keyed allowlists to decide which skills deploy where:
# defaults.yaml
skills:
claude:
SkillName:
gemini:
SkillName:
codex:
SkillName:
opencode:
SkillName:
Skills listed under a provider key are installed for that provider. Skills omitted from a provider's list are skipped. This allows Claude-only skills (e.g., those using TeamCreate or agent teams) to be excluded from Gemini/Codex/OpenCode without per-skill configuration.
Create Workflow
Step 1: Understand the request
Determine:
- What does this skill do?
- What should trigger it? (intent phrases for
USE WHEN) - Does it wrap a CLI tool, or is it purely procedural?
- Which module should it live in?
If the user hasn't specified, ask using AskUserQuestion.
Step 2: Write the SKILL.md
Follow the structure from Skill Conventions above.
Checklist while writing:
- Frontmatter has
name:anddescription:withUSE WHEN - Description is single-line, under 1024 characters
- Body starts with
# SkillNameheading - Clear step-by-step instructions (numbered steps for sequential operations)
- If wrapping a CLI tool: usage examples, intent-to-flag mapping, output format
- Constraints section with boundary conditions
- No unnecessary complexity -- minimum needed for the task
- If module skill: SKILL.yaml sidecar with
sources:field - Skill listed in module's
defaults.yamlunder each target provider
Step 3: Create the skill directory and file
mkdir -p skills/SkillName
Write the SKILL.md using the Write tool.
Step 4: Register
For Claude Code: ensure the skill's parent directory is listed in plugin.json under skills.
For other providers: run make install from the module's Makefile.
Step 5: Verify
- Test invocation: does the description trigger correctly?
- Review: does the procedure work end-to-end?
Validate Workflow
Step 1: Read the target skill
Read the SKILL.md file.
Step 2: Check frontmatter
-
name:present and uses correct casing -
description:is single-line withUSE WHENclause -
description:is under 1024 characters - No deprecated fields (
triggers:,workflows:arrays) - Optional fields (
argument-hint:,version:) are correctly formatted
Step 3: Check body structure
- Starts with
# SkillNameheading (matchesname:frontmatter) - Has clear instructions (numbered steps, usage section, or workflow routing)
- If multiple workflows:
## Workflow Routingtable present - Constraints or rules section for boundary conditions
- No unnecessary sections or boilerplate
Step 4: Check CLI tool integration (if applicable)
- Tool path is documented
- Usage examples with
bashblocks - Intent-to-flag mapping table (if tool has flags)
- Output format described
Step 5: Report
COMPLIANT -- all checks pass.
NON-COMPLIANT -- list failures with specific fixes. Offer to fix automatically.
Constraints
- Every skill MUST have
name:anddescription:in frontmatter - Description MUST include
USE WHENtrigger phrases - PascalCase for multi-word skill names, natural case for single words
- Skill directory name must match the
name:field - Prefer one SKILL.md per skill -- split reference material into companion files (
@) when SKILL.md exceeds ~200 lines or contains dense static data (schema templates, config examples, lookup tables)
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?