Bundle releases
Every skill, agent and MCP server has its own version. A bundle release is an immutable snapshot that pins exact member versions together with the upstream commit they came from. Consumers install and roll back the whole set, so a shared config and the task skills that read it never drift apart.
quanru/lifeos@2.0.0 ← bundle release (immutable)
├─ quanru/lifeos-config @1.4.0
├─ quanru/lifeos-review @1.2.3
└─ quanru/lifeos-boards @1.1.0
source: github.com/quanru/lifeos-skill @ 9f3c2a1
Install, upgrade, roll back
skills install quanru/lifeos --claude # latest installable release
skills install quanru/lifeos@2.0.0 --claude # an exact snapshot
skills install quanru/lifeos@1.0.0 --claude # roll back: replaces the whole set
Installing records the snapshot in amitte.lock.json. Installing another version rewrites every member and removes members the target release doesn't contain, so what's on disk always equals exactly one release. Nothing is written until every member has been downloaded.
Reporting a problem
skills bundle status # bundle version, upstream commit, every member version
skills bundle status --check # also: is it still installable? is there a newer release?
skills bundle status --json # paste into a bug report
Cutting a release (publishers)
Add amitte-bundle.json at the root of your repo:
{
"bundle": "lifeos",
"version": "2.0.0",
"title": "LifeOS",
"source_repo": "https://github.com/quanru/lifeos-skill",
"members": ["skills/config", "skills/review", "skills/boards"]
}
Each member is a directory with manifest.json + skill.md. Then:
skills login
skills release --dry-run # preview
skills release
skills release:
- records
git rev-parse HEADas the upstream commit, and refuses a dirty working tree (the recorded commit must describe what's published; override with--allow-dirty); - publishes any member version that isn't on the registry yet, and refuses if a version is there with different content (versions are immutable: bump them);
- cuts the release, pinning exactly those versions.
You can also cut a release from the web bundle wizard (the optional Release section), or via POST /v1/bundles/<you>/<bundle>/releases with { version, source_repo?, source_commit?, members: [{ id, version }] }.
Guarantees
- Immutable. A release version is never edited or overwritten. A fix ships as a new release.
- Consistent. If a member declares a dependency on another member (
"dependencies": [{ "id": "quanru/lifeos-config", "range": "~1.4.0" }]), the release must pin a version that satisfies it, or it's rejected. - Yours. Members must be your own published, public versions in your namespace.
- Fail-closed. If a pinned member is later revoked or hidden, that release is marked unavailable and installers refuse it instead of substituting another version.
latestskips to the newest release that's still installable.