| name | new-pack |
| description | Scaffold a new template pack with manifest.yaml skeleton, empty templates/ dir, and a matching test file. Use when adding a new pack to the registry. |
| disable-model-invocation | true |
new-pack
Create a new pack skeleton following the existing 8-pack structure.
Steps
-
Ask the user for the pack name in kebab-case (e.g. observability).
-
Create packs/<name>/manifest.yaml:
name: <name>
version: "0.1.0"
description: <one-line description>
templates: []
conditions: {}
loops: {}
strip_suffix: ".j2"
dependencies: []
action_shas: []
-
Create an empty packs/<name>/templates/ directory (add a .gitkeep if needed).
-
Create tests/test_<name_snake>_pack.py modelled on tests/test_base_pack.py — verify:
- The pack loads via the discovery mechanism
- Manifest validates against
schema/manifest-schema.yaml
- A minimal render against
nboot-spec.json produces the expected files
-
Verify discovery:
uv run nboot list-packs
uv run pytest tests/test_<name_snake>_pack.py -v
-
Remind the user to update docs/reference/ if pack documentation is autogenerated there.
Reference
packs/base/manifest.yaml — fullest example (conditions, loops, dependencies)
packs/scaffold/manifest.yaml — simplest example
schema/manifest-schema.yaml — the contract every manifest must satisfy