Pack manifest spec
Packs are defined by a manifest JSON. The publishing safety gate validates this manifest before release.
Top-level fields
json
{
"schemaVersion": 4,
"authorUserId": "u_abc123",
"title": "Excel totals row",
"slug": "excel-sum",
"description": "Adds a totals row to an Excel file",
"requiredCapabilities": ["file"],
"requiredCliProvider": null,
"inputSchema": { ... },
"steps": [ ... ]
}
Required capabilities
- file — local file read/list/write
- browser — Playwright automation
- image — Codex image generation
- memory — read/write the memory graph
- mail — send/receive through bom-mail
Warning
Using a capability you did not declare fails publishing. Declaring file-transfer automatically activates shell and native file tooling.
Step definition example
json
{
"id": "summarize",
"executor": "Llm",
"requiredCliProvider": null,
"promptTemplate": "Summarise the following in 3 lines: {{step.input}}",
"outputContract": { "type": "object", "properties": { "summary": { "type": "string" } } }
}
Placeholders
PackPromptRenderer accepts only {{step}}, {{product}}, {{perProduct}}, {{skill}}, {{common}}, {{runId}}, {{productIndex}}, {{extraContext}} families. Unknown placeholders hard-fail.
Safety gate
Publishing rejects, among other things:
- Unknown capabilities
- allowedTools mismatch
- Hardcoded credentials or secret paths
- Hardcoded tokens or data-send URLs
- Remote script execution