create-library-template
Author or modify a Workflow Template Library template. Use when creating a template, migrating an example to a template, editing template-metadata or install.form, or preparing a template PR.
Source facts
- Repository
- elastic/workflows
- Last source activity
- July 27, 2026 at 14:53
- Detected SKILL.md language
- English
- Stars
- 60
- Forks
- 36
Install options
The review-first prompt is selected by default. You can switch to a direct command or download a local copy.
Review the source files
Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.
Showing SKILL.md
SKILL.md
Source instructions · Read-only preview- name
- create-library-template
- description
- Author or modify a Workflow Template Library template. Use when creating a template, migrating an example to a template, editing template-metadata or install.form, or preparing a template PR.
# Create a Workflow Template Library template
## Where the rules are
**Read [`CONTRIBUTING.md`](../../../CONTRIBUTING.md) § "Authoring a template" before writing anything — do not work from memory.** It is the single source of truth for the file layout, the `template-metadata` block, the categories vocabulary (`library/categories.yaml`), `install.form` and how `__install__.*` references render (the most common source of broken templates), step-type rules, and style. Local validation and the PR checklist are in § "Validating locally" and § "Pull request flow" of the same file.
Templates live at `library/workflows/<slug>/<slug>.yaml` — one directory per slug; directory, file name, and `template-metadata.slug` must match.
## Migration references
Some templates were migrated from a plain workflow in `examples/`. Study a pair or two before authoring — the diff shows exactly what "templatizing" means (add the `template-metadata` block, promote operator-specific values and connector ids to `install.form`, drop banner comments, tidy step comments):
| Template (`library/workflows/`) | Original example (`examples/`) |
|---|---|
| `create-slack-channel/create-slack-channel.yaml` | `integrations/slack/create-slack-channel.yaml` |
| `hash-threat-check/hash-threat-check.yaml` | `security/detection/hash-threat-check.yaml` |
| `ip-reputation-check/ip-reputation-check.yaml` | `security/enrichment/ip-reputation-check.yaml` |
| `mark-alert-as-acknowledged/mark-alert-as-acknowledged.yaml` | `security/detection/mark-alert-as-acknowledged.yaml` |
| `root-cause-analysis/root-cause-analysis.yaml` | `observability/root-cause-analysis-rca-workflow.yaml` |
| `semantic-knowledge-search/semantic-knowledge-search.yaml` | `search/semantic-knowledge-search.yaml` |
| `web-search/web-search.yaml` | `search/web-search.yaml` |
`ip-reputation-check` is the golden example referenced throughout CONTRIBUTING.md.
## Workflow
1. Read the CONTRIBUTING.md sections above.
2. Pick the closest migration pair from the table and mirror its structure.
3. Author the template; follow every rule in § "Authoring a template" (especially the `__install__.*` rendering rules).
4. Validate per § "Validating locally" and open the PR per § "Pull request flow", including the validation output and a test plan.
View on GitHub