Builtin Skills
Prowl embeds skills directly into the binary via internal/skills/builtin/.
These are always available without user configuration.
How It Works
- Each skill lives in
internal/skills/builtin/<skill-name>/SKILL.md. - The tree is embedded at compile time via
//go:embed builtin/*ininternal/skills/embed.go. DiscoverBuiltin()walks the embedded FS, parses eachSKILL.md, and sets paths with theprowl://skills/prefix (e.g.,prowl://skills/jq/SKILL.md).- The View tool resolves
prowl://paths from the embedded FS, not disk. - User skills with the same name override builtins (last occurrence wins in
Deduplicate()).
Adding a New Builtin Skill
- Create
internal/skills/builtin/<skill-name>/SKILL.mdwith YAML frontmatter (name,description) and markdown instructions. The directory name must match thenamefield. - No extra wiring needed —
//go:embed builtin/*picks up new directories automatically. - Add a test assertion in
TestDiscoverBuiltinininternal/skills/skills_test.goto verify discovery. - Build and test:
go build . && go test ./internal/skills/...
Existing Builtin Skills
| Skill | Directory | Description |
|---|---|---|
prowl-config |
builtin/prowl-config/ |
Prowl configuration help |
prowl-hooks |
builtin/prowl-hooks/ |
Authoring, configuring and debugging hooks |
jq |
builtin/jq/ |
jq JSON processor usage guide |