skillforge — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skillforge (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
name: SkillForge
description: Create, adapt, and audit Agent Skills from vague user needs
compatibility: opencode >= 1.0.0SkillForge 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 Output
## 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#### Orchestration Patterns
| 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 |
#### Composition Skill Types
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.
#### Composition Rules
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."
#### Search Mode
One of:
.opencode/skills/ and local config#### Source Categories
Local:
.opencode/skills/~/.config/opencode/skills/ if accessiblePublic skills:
opencode-skillsagent-skillsPublic MCP:
mcp-servermodel-context-protocol#### Search Query Guidance
For 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 Table
| 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.
#### Decision Rubric
Use existing public skill when:
Adapt / fork when:
Use MCP when:
Use skill + MCP when:
Create new when:
Reject when:
#### Safety Rules for Community Resources
#### Verdict
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.
#### User Choice Prompt
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.
#### Files to Inspect
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#### Output Format
## 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>#### Skill Opportunity Ranking
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 |#### Skill vs MCP Decision
For each recommendation, classify as:
Do not recommend MCP just because it sounds more powerful.
#### Community Discovery After Project Discovery
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."
#### Evidence Requirement
Do not recommend a specific skill idea unless there is evidence from at least one of:
Label all inferred items as such.
#### Approval Before Generation
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:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.