Create Skill
When to Use
Creating a new skill for Forge, a department, or a project.
Location
| Scope | Path |
|---|---|
| Cross-cutting / Forge-level | Forge/Skills/{Skill_Name}/SKILL.md |
| Department-specific | {Dept}/Skills/{Skill_Name}/SKILL.md |
| Function-specific | {Dept}/{Function}/Skills/{Skill_Name}/SKILL.md |
Choose the narrowest scope that fits. If only one function uses it, it’s a function skill.
Structure
SKILL.md Template
Authoring Rules
- Action-oriented naming. Name the skill in the format {Verb} {Noun}. For example “Create Skill”, “Reindex Typesense”
- ≤ 500 words. SKILL.md is loaded into context per-session — every word costs tokens. Put only the procedure outline and essential constraints here.
- Scripts over prose. Any logic that can be implemented in TypeScript or a Bash script MUST be a script, not agent instructions. The SKILL.md just says “run the script” and documents its inputs/outputs.
- TypeScript only. No Python, no plain JS. Choose the pattern per the Write Typescript skill — bundled project (MCP servers, long-running services) or standalone script (skill utilities,
npx tsx script.ts). - Declare prerequisites explicitly. Every SKILL.md must include a
## Prerequisitessection listing required tools, dependencies, access, env vars, and assumptions that must already exist. If there are no prerequisites, writeNone. - Preconfigured by default. A skill’s prerequisites are assumed to be preconfigured. Do not design skills that silently install or repair their own dependencies unless setup is explicitly part of the skill.
- References for depth. Detailed specs, examples, or lookup tables go in
References/— never inline them in SKILL.md. - Self-contained definitions. Don’t reference undefined concepts. A reader should understand the skill without chasing cross-references.
- Compress over enumerate. If items follow a repeatable pattern, state the pattern rule once. If the same information appears in two forms, keep only the denser one.
- One skill, one concern. If the procedure has two unrelated workflows, split into two skills.
- No hardcoded values. Never hardcode hosts, API keys, ports, or collection names in scripts or SKILL.md examples. Always read from environment variables. Use the idiomatic env var access for the language you’re writing in. Fail loudly if a required env var is missing.
Procedure
- Determine scope → pick location (Forge / department / function)
- Create folder and SKILL.md from template, including an explicit
## Prerequisitessection - If the skill has executable logic, write it as a TypeScript script
- Ensure the listed prerequisites match the actual implementation and environment assumptions
- Add skill name to the Available Skills list in the Persistent Knowledge database prompt (where the Available Skills list resides)
- Spawn the Page Manager bot via
spawnAgentwith{ botGroup: 'forge', botHandle: 'page-manager' }to list all the files in the sidebar - Build:
cd .internal && npm run build - Commit all files together and push to origin
- Remind user to run Update Agents to sync the skill list to bots