Install any skill in seconds. Free to start, no credit card required.
Get Started Free →SkillForge guides an AI agent through a structured process to turn vague user needs into a complete, audited Agent Skill. It enforces discipline: never jump to generation, never treat assumptions as facts, and always audit before delivery.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 282% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 250% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 181% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 286% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 229% | 0% |
yamlname: SkillForge description: Create, adapt, and audit Agent Skills from vague user needs compatibility: opencode >= 1.0.0
SkillForge guides an AI agent through a structured process to turn vague user needs into a complete, audited Agent Skill. It enforces discipline: never jump to generation, never treat assumptions as facts, and always audit before delivery.
Do not generate a skill immediately from a vague request.
Every request must pass through the full workflow. If the user says "create a skill for X", the first output is an intent summary and a check of what already exists — not a SKILL.md file.
Activate SkillForge when the user's message indicates any of:
Do not activate for:
Analyze the user's request to extract the concrete skill purpose.
Output format:
## Skill Intent Analysis
**Request summary:**
<one-paragraph restatement of what the user wants>
**Identified purpose:**
<single sentence describing the skill's job>
**Key signals:**
- Trigger pattern: <what invokes this skill>
- Expected input: <what the user provides>
- Expected output: <what the skill produces>
- Frequency estimate: <one-time / occasional / repeated>
- Workflow specificity: <generic / custom>After Intent Analysis, determine whether the user's request requires a single skill or a composition of multiple skills working together.
Signals that indicate multi-skill composition:
If single skill is sufficient → proceed to Community Discovery (step 3).
If multi-skill composition is needed → produce a composition plan before searching for individual skills.
## Composition Plan
**Primary workflow:**
<what the user ultimately wants to accomplish>
**Sub-workflows identified:**
1. <sub-workflow> → expected output → candidate skill or MCP
2. <sub-workflow> → expected output → candidate skill or MCP
**Data flow between sub-workflows:**
- <sub-workflow 1 output> → <sub-workflow 2 input>
- <sub-workflow 2 output> → <sub-workflow 3 input>
**Orchestration pattern:** sequential / parallel / fan-out / conditional / pipeline| Pattern | When to use | Example | |---------|------------|---------| | Sequential | Each step depends on the previous output | Lint → Review → Report | | Parallel | Steps are independent, results combined | Responsive scan + A11y scan + Perf scan → Combined report | | Fan-out | One input triggers multiple independent checks | Same code reviewed by frontend, backend, security skills in parallel | | Conditional | Next step depends on previous step result | If lint fails → stop; if lint passes → review | | Pipeline | Ordered chain where each step transforms data | Fetch spec → Lint → Test → Build → Deploy gate |
When generating a multi-skill solution, classify each piece:
frontend-review, ai-claim-audit)Recommend creating an orchestrator skill when the composition has 3+ steps or conditional logic. For simple 2-step sequences, list the worker skills and let the user chain them manually.
After completing the Composition Plan, proceed to Community Discovery for each sub-workflow individually.
Check whether the user's need is already solved by a local skill, a public/community skill, or a public MCP server. Searches local sources first, then community sources if web/search tools are available.
If web/search tools are unavailable, state: "Public community search was not performed because no web/search tool is available."
One of:
.opencode/skills/ and local configLocal:
.opencode/skills/~/.config/opencode/skills/ if accessiblePublic skills:
opencode-skillsagent-skillsPublic MCP:
mcp-servermodel-context-protocolFor skills:
"OpenCode skill <workflow>""opencode skills <workflow>""agent skills <workflow> SKILL.md""site:github.com SKILL.md <workflow>""github opencode-skills <workflow>"For MCP servers:
"MCP server <workflow>""model context protocol <workflow>""site:github.com MCP server <workflow>""awesome MCP servers <workflow>""github mcp-server <workflow>"| Candidate | Type | Source | Fit | Trust/Risk | Recommendation | Notes | |-----------|------|--------|-----|------------|----------------|-------| | <name> | local_skill / public_skill / public_mcp / awesome_list / reference_only | <where found> | exact / strong / partial / weak / none | low / medium / high / unknown | use / adapt/fork / use_as_reference / prefer_mcp / combine_skill_mcp / create_new / reject | <key details> |
Type is one of: local_skill, public_skill, public_mcp, awesome_list, reference_only.
Fit is one of: exact, strong, partial, weak, none.
Trust/Risk is one of: low, medium, high, unknown (default: unknown until inspected).
Recommendation is one of: use, adapt/fork, use_as_reference, prefer_mcp, combine_skill_mcp, create_new, reject.
Use existing public skill when:
Adapt / fork when:
Use MCP when:
Use skill + MCP when:
Create new when:
Reject when:
Output exactly one verdict:
**Verdict:**
<one of: Use existing skill / Adapt/Fork existing skill / Use MCP instead / Use skill + MCP / Create new using community references / Create new from scratch / Need more info>
**Reasoning:**
<one sentence explaining which rubric tier was chosen and why>Do not output contradictory or multiple verdicts.
After the verdict, ask:
> "Choose one: > 1. Use an existing candidate > 2. Adapt/fork a candidate > 3. Use candidate only as reference > 4. Create a new skill from scratch > 5. Continue with recommended option"
If there is a clear safe recommendation, say which option is recommended.
Use this section when the user asks for skill suggestions for "this project" without specifying the exact skill. Do not guess project needs from the prompt alone — inspect the project context first.
Look for evidence in:
README.md — project purpose, stack, setuppackage.json / pnpm-lock.yaml / yarn.lock / package-lock.json — dependencies, framework, scriptsnext.config.js, vite.config.ts, tsconfig.json, .eslintrc, tailwind.configsrc/ or app/ directory structure — entry points, page/component organizationtests/ or __tests__/ — testing patterns and coveragedocs/ or wiki/ — documentation gaps.opencode/skills/ — existing skillsAGENTS.md / CLAUDE.md / GEMINI.md / CODEX.md — existing agent instructions.github/workflows/ — CI pipelines## Project Context Discovery
### Files inspected
- <path>
- <path>
### Project signals found
- stack/framework: <detected>
- app type: <web app / library / CLI / API / monorepo / other>
- existing workflows: <test, lint, build, deploy, review, docs>
- pain points suggested by repo: <based on config gaps, missing tooling, TODO comments, sparse docs>
- existing skills: <list or none>
- missing skill opportunities: <detected from project gaps>
### Unknowns
- <unclear aspects that need user input>Rank possible skills from S to F based on evidence found.
## Skill Opportunity Ranking
| Tier | Skill idea | Why it fits this project | Evidence from repo | Skill vs MCP | Risk |
|------|-----------|--------------------------|-------------------|-------------|------|
| S | <name> | <strong repo evidence> | <specific files/configs> | skill / MCP / skill + MCP | low / medium / high |
| A | <name> | <good repo evidence> | <specific files/configs> | skill / MCP / skill + MCP | low / medium / high |
| B | <name> | <some evidence> | <specific files/configs> | skill / MCP / skill + MCP | low / medium / high |
| C | <name> | <weak evidence> | <specific files/configs> | skill / MCP / skill + MCP | low / medium / high |
| F | <name> | <speculative> | <labeled as inference> | skill / MCP / skill + MCP | high / unknown |For each recommendation, classify as:
Do not recommend MCP just because it sounds more powerful.
If web/search tools are available, search public skills and MCP servers related to the top skill ideas and include candidates in the table.
If web/search tools are not available, state:
> "Public community search was not performed because no web/search tool is available."
Do not recommend a specific skill idea unless there is evidence from at least one of:
Label all inferred items as such.
After ranking, do not create files. Ask:
> "Choose one: > 1. Generate the S-tier skill > 2. Explore community candidates first > 3. Pick another ranked skill > 4. Provide more project context > 5. Stop"
Determine whether there are true blockers — details without which the skill cannot be correctly built. If the workflow can proceed with sensible defaults, use "Configuration Questions" instead of "Blocking Questions."
Default behavior: When optional details are missing, proceed with safe defaults and label them clearly. Examples:
Do not block skill creation for optional project preferences when safe defaults exist.
Output format when blockers exist:
## Blocking Questions
1. <question> — <why this blocks progress>
2. <question> — <why this blocks progress>Output format when defaults suffice:
## Configuration Questions
1. <question> (optional — default: <default>)
2. <question> (optional — default: <default>)Limit to 3 questions maximum. If no questions remain, state: "No blocking questions. Proceeding to Skill Spec."
Produce a detailed specification of the skill before writing any skill files. The spec is the contract between the user and the implementation.
Output format:
## Skill Spec
**Name:** `<skill-name>`
**Trigger description:**
<when this skill activates>
**Workflow steps:**
1. <step> — <what happens>
2. <step> — <what happens>
...
**Input contract:**
- <expected input detail>
**Output contract:**
- <expected output detail>
**Key behaviors:**
- <behavior 1>
- <behavior 2>
**Edge cases:**
- <edge case 1>
- <edge case 2>
**Do-not behaviors:**
- <prohibited behavior 1>
- <prohibited behavior 2>
**Command execution:**
- <allowed commands, if any — default: none>The user must approve the Skill Spec before proceeding to generation.
Guidance for generated read-only review skills:
Generate the skill's files based on the approved Skill Spec.
Files to generate (always at minimum):
.opencode/skills/<skill-name>/SKILL.md — main skill file with full workflow.opencode/skills/<skill-name>/README.md — usage documentation.opencode/skills/<skill-name>/templates/ — any reusable templates the skill needsOutput format:
## Generated Files
### `.opencode/skills/<skill-name>/SKILL.md`
<path written to>
### `.opencode/skills/<skill-name>/README.md`
<path written to>
### Templates
<paths written to, or "none required">Announce each file as it is written.
Audit every generated file against the Quality Audit Rubric (see below). Report pass/fail per criterion. Any failure must be fixed before proceeding.
Output format:
## Skill Quality Audit
**Skill:** <skill-name>
| Criterion | Status | Notes |
|-----------|--------|-------|
| Metadata present | PASS / FAIL | |
| Purpose clear | PASS / FAIL | |
| Workflow complete | PASS / FAIL | |
| Output formats defined | PASS / FAIL | |
| Do-not rules present | PASS / FAIL | |
| Trigger clarity | PASS / FAIL | |
| No assumptions as facts | PASS / FAIL | |
| Safety constraints | PASS / FAIL | |
| Naming convention followed | PASS / FAIL | |
**Overall:** PASS / FAIL
**Fixes applied:** <list of fixes, or "none needed">Tell the user how to install and verify the skill.
Output format:
## Usage
**Install:** Place the skill folder under `.opencode/skills/` in your project.
**Verify:** Run a test prompt that matches the trigger pattern and confirm the skill activates.
**Files created:**
- <path>
- <path>frontend-review, api-spec, db-migrationreview-frontend → frontend-review)Each generated skill file is audited against these criteria:
| Criterion | Definition | |-----------|------------| | Metadata present | YAML front matter or metadata block with name, description, compatibility | | Purpose clear | A single paragraph explaining why the skill exists and when it activates | | Workflow complete | All workflow steps are documented with clear transition conditions | | Output formats defined | Every workflow step has a documented output format | | Do-not rules present | Explicit prohibitions on dangerous or unwanted behaviors | | Trigger clarity | The trigger pattern is precise enough to avoid false positives | | No assumptions as facts | The skill does not assert untested assumptions as established facts | | Safety constraints | Limits on destructive operations, external writes, or sensitive data exposure | | Naming convention followed | Name follows the Skill Name Rules above |
A skill must pass all criteria to be considered complete.
.opencode/skills/<skill-name>/ without user consent.Read access:
.opencode/skills/ directory and all subdirectoriesWrite access:
.opencode/skills/<new-skill-name>/ — creating new skill files onlyProhibited:
.opencode/skills/ unless the user explicitly consentsGating:
Other measured skills in the registry, with their headline benchmark lift.