capgo-release-management
Guides the agent through Capgo OTA release workflows including bundle uploads, compatibility checks, channels, cleanup, and encryption key setup. Use when managing Capgo bundle and channel operations. Do not use for native build requests or organization administration.
By cap-go · 593 installs
npx skills add cap-go/capgo-skills --skill capgo-release-management
Source repository · Upstream listing
Capgo Release Management
Ship, promote, roll back, and clean up Capgo OTA bundles from the CLI.
Facts below were checked against @capgo/cli 8.77 (October 2026). Every command accepts a, apikey . The appId can be omitted inside a Capacitor project.
When to Use
TRIGGER when:
The user uploads, lists, deletes, or cleans up bundles, or asks which version a channel serves.
The user creates or configures channels, promotes staging to production, starts, pauses, or rolls back a progressive rollout, or rolls back a bad release.
The user asks whether a change is OTA safe ( bundle compatibility , bundle releaseType ).
The user sets up bundle encryption ( key create , key save , key v2 ).
Do not use when:
The work is app side updater code or config ( notifyAppReady , autoUpdate , setChannel ). Use capgo live updates .
A native binary is needed. Use capgo native builds .
The user manages organizations, members, 2FA, or API key policy. Use capgo organization management .
The user wants an end to end release pipeline design. Use capgo release workflows .
Command Map
Goal Command
Upload and link bundle upload [appId] path ./dist channel production (comma separate several channels)
Is it OTA safe? bundle releaseType [appId] channel production prints OTA or native
Detailed native diff bundle compatibility [appId] channel production [ text]
What is live channel currentBundle production [appId] quiet
Promote channel promote staging production [appId]
Roll back channel set production [appId] bundle <previous version
Rollout bundle upload ... rollout 10 , then channel set ... rollout percentage 50 / rollout promote / rollout rollback
Create channel channel add beta [appId] [ default] [ self assign]
Channel policy channel set <ch disable auto update major\ minor\ patch\ metadata\ none plus ios/ android/ dev/ prod/ emulator/ device toggles
List bundle list [appId] , channel list [appId]
Clean up bundle cleanup [appId] bundle 1.0 keep 3
Delete bundle delete <version [appId] , channel delete <ch [appId]
Preview QR app set [appId] preview once, then get qr [appId] channel beta or bundle upload ... qr preview
Encryption keys key create , key save key ./.capgo key v2.pub , key delete old
Custom zip / external bundle zip [appId] json , bundle encrypt <zip <checksum , bundle upload external <url
All of these are npx @capgo/cli@latest <command . Commands that do not exist (they come from old docs or other tools): channel create , bundle revert , upload sign , key verify , and a top level capgo upload without bundle .
Procedure
1. Inspect first
Report the current live version and the OTA/native verdict before you change anything. If the verdict is native , stop and hand off to capgo native builds (or the user's native pipeline).
2. Upload
The version comes from package.json unless you pass bundle <semver . It must be unique, greater than 0.0.0 , and never a previously deleted version.
Use delta for instant apply apps. The CLI refuses delta uploads with more than 10,000 files. Use no delta in that case.
Use fail on incompatible in CI. Use accept incompatible only when the JS guards missing plugins. These two flags and ignore metadata check cannot be combined.
3. Promote and roll out
Promote: npx @capgo/cli@latest channel promote staging production com.example.app . It runs the same compatibility checks as channel set bundle .
Gradual rollout: upload with rollout <pct , then watch the stats before you run rollout promote .
Only change which channel is the default ( channel set <ch state default , or channel add default ) when the user explicitly wants to move production traffic.
4. Roll back
Devices pick up the change on their next update check.
5. Encryption (optional, for sensitive apps)
In CI, keep the private key in the CI secret store, write it to ./.capgo key v2 in the job, and pass the same key v2 ./.capgo key v2 . The private key never leaves the runner. Add .capgo key v2 to .gitignore and never commit it. A changed key needs a new native build: devices with the old publicKey fail with key id mismatch .
Traps
On a channel that has a rollout configured, a plain bundle upload channel production sets the rollout target , and stable is unchanged. Replace stable explicitly with channel set bundle .
bundle cleanup ignore channel also deletes the linked channels. Never add it without asking.
bundle delete is permanent, and the deleted version cannot be reused. Prefer relinking an older bundle to roll back.
releaseType only sees native package metadata, not raw ios/ or android/ edits.
self assign on upload changes the channel's settings, not just this bundle.
Verification
1. npx @capgo/cli@latest channel currentBundle production com.example.app quiet prints the expected version.
2. npx @capgo/cli@latest probe platform ios (run in the project) reports whether an update would be served.
3. npx @capgo/cli@latest app debug com.example.app shows a test device downloading and setting the bundle.
4. For encrypted uploads, a device on the new native build applies the update with no key id mismatch error.
Error Handling
String Fix
❌ Version X already exists Bump bundle , use auto bump patch , or pass version exists ok in CI re runs
Cannot upload the same bundle content The checksum is already on that channel. Rebuild with changes, or pass ignore checksum check
Bundle NOT compatible with <channel channel Native packages differ. Do a native build first, or use accept incompatible if the code guards it
notifyAppReady() is missing in the build folder (...) Fix the app entry point (see capgo live updates )
index.html is missing in the root folder of <dir Wrong path
Cannot find channel <name Check channel list . Names are case sensitive
Channel strategy <x is not known Use major , minor , patch , metadata , or none
No Capgo API key found. Run ... first, then retry this command. npx @capgo/cli@latest login , set CAPGO TOKEN , or pass a
Insufficient permissions for <key The API key role is too low for this app. Ask an admin for an upload capable key
Cannot upload bundle ( try again with tus option) Retry with tus , and raise timeout for large bundles
Resources
Bundle reference: https://capgo.app/docs/cli/reference/bundle/
Channel reference: https://capgo.app/docs/cli/reference/channel/
Progressive rollouts: https://capgo.app/docs/live updates/progressive rollouts/
Encryption: https://capgo.app/docs/live updates/encryption/
Compatibility: https://capgo.app/docs/live updates/compatibility/