What is a pack?
A pack is a versioned, immutable bundle of agents, commands, hooks, skills, and capability declarations that baselane installs into a repo or a machine. It is the same unit npm calls a package: baselane just calls it a pack.
Every pack is validated before it's stored or installed. This applies to a built-in pack, one an org built with the pack builder, or one drafted from a repo's own conventions. An invalid pack is rejected with the specific reason. It is never installed halfway.
Skills are vendored, not referenced
Installing a pack, say an org's shared security-review pack, copies
its skills straight into .claude/ in the target repo or machine. It
does not leave them as a remote reference to resolve later. A clone of the repo is a clone of
everything baselane installed into it. There is nothing else to fetch to rebuild it. See
how to edit a pack for why you never hand-edit those vendored
copies.
Immutable by version
Once published to a registry, a given pack version is fixed forever: publishing
security-review@1.0.0 a second time is rejected outright, exactly like
npm. To ship a fix, publish 1.1.0 instead. Repos still on
1.0.0 then show as behind and get a one-click PR to bump.
Example
{
"id": "security-review",
"version": "1.0.0",
"title": "Security Review",
"summary": "Checks a repo for common security issues before merge.",
"context": { "markdown": "## Security review\n" },
"agents": [],
"commands": [],
"hooks": []
}
This is the smallest valid pack.json: an id, a version, and the three required arrays, which may be empty.