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.