MCPInstall

capgo-live-updates

Sets up and debugs Capgo live (OTA) updates in a Capacitor app with @capgo/capacitor-updater. Use when the user wants to ship web-layer fixes without app store review, install or configure the updater plugin, choose an autoUpdate mode, call notifyAppReady, wire manual download/next/set flows, set channels from the app, or debug updates that never apply, roll back, or report codes such as nonewversionavailable, disableautoupdatetomajor, cannotupdateviaprivatechannel, or onpremiseapp. Do not use for CLI-only bundle/channel operations (capgo-release-management), Capgo Cloud native builds (capgo-native-builds), or migrations from another OTA vendor.

Installs
851
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/cap-go/capgo-skills --skill capgo-live-updates
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads capgo-live-updates automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Capgo Live Updates

Wire @capgo/capacitor-updater into a Capacitor app, ship the first bundle, and keep rollback safe.

Facts below were checked against @capgo/capacitor-updater 8.52 and @capgo/cli 8.77 (October 2026).

When to Use

TRIGGER when:

  • The user wants OTA / live updates, hotfixes without store review, or "Capgo" in a Capacitor app.
  • The updater plugin needs installing, upgrading, or configuring in capacitor.config.*.
  • The user asks about notifyAppReady, autoUpdate modes, directUpdate, autoSplashscreen, setChannel, getLatest, download, next, set, or reset.
  • Updates upload fine but devices never get them, roll back, or loop.

Do not use when:

  • The work is only CLI bundle, channel, rollout, or encryption-key commands. Use capgo-release-management.
  • The user needs a signed IPA/APK/AAB from Capgo Cloud. Use capgo-native-builds.
  • The user is moving from Capawesome Cloud (capawesome-live-update-migration) or Ionic Appflow (ionic-appflow-migration).
  • The user wants the whole release pipeline (OTA, native builds, and store publishing). Use capgo-release-workflows.
  • The request is about general CLI routing or MCP setup. Use capgo-cli-usage.

Reference Index

Only load a reference when its topic is in play.

FileLoad when
references/configuration.mdEditing plugins.CapacitorUpdater in capacitor.config.*, choosing autoUpdate modes, self-hosted URLs
references/js-api.mdWriting manual update flows, listeners, channel switching, or rollback code
references/channels-and-rollouts.mdChannels, device self-assignment, progressive rollouts, version targeting
references/ci-cd.mdUploading from GitHub Actions, GitLab CI, or another CI
references/troubleshooting.mdA device does not update, rolls back, or the backend returns an error code

Version Rule (read first)

The updater major version follows the Capacitor major version.

CapacitorInstall
8.xnpm install @capgo/capacitor-updater@latest (8.x line)
7.xnpm install @capgo/capacitor-updater@lts-v7
6.xnpm install @capgo/capacitor-updater@lts-v6
5.xnpm install @capgo/capacitor-updater@lts-v5
4.xnpm install @capgo/capacitor-updater@lts-v4

Capacitor 9 trap: Capacitor 9 is still prerelease (@capacitor/core@next). As of October 2026 there is no updater line for Capacitor 9. The 8.x line declares peerDependencies: @capacitor/core ^8.0.0. The @capgo/capacitor-updater@9.0.0 on npm is an old Capacitor 5 release from 2023 and is marked deprecated, so never install it for Capacitor 9. Before you advise on a Capacitor 9 project, check the current tags with npm view @capgo/capacitor-updater dist-tags. If no Capacitor 9 line is listed, tell the user that.

Secrets and Confirmation

  • Never ask the user to paste a Capgo API key, signing password, .p8 key, keystore, or service-account JSON into the chat. Ask them to run npx @capgo/cli@latest login themselves (it opens the browser or asks for the key in a masked prompt), or to set CAPGO_TOKEN in their shell or CI secret store.
  • Do not put secrets in command arguments: they end up in shell history and process lists. Use environment variables, the saved login, or the CLI's interactive prompts.
  • If a secret appears in the conversation anyway, do not repeat it, do not write it to a file, and tell the user to revoke it and create a new one.
  • npx @capgo/cli@latest downloads and runs the newest CLI from npm. Run it only inside the user's project and with their go-ahead. In CI, pin an exact version.
  • Ask before any command that changes remote state: uploading a bundle, changing or promoting a channel, deleting apps, bundles, channels, or keys, requesting a build that uploads to a store, and exporting or deleting credentials. Say what will change and for which app and channel.

Procedure

1. Inspect before editing

  • Read package.json to get the @capacitor/core major and any existing @capgo/capacitor-updater.
  • Read capacitor.config.ts|json to get appId, webDir, and any existing plugins.CapacitorUpdater.
  • Find the app entry point (main.ts, main.tsx, App.vue setup, app.component.ts, and so on). That is where notifyAppReady() goes.
  • Check for another OTA SDK. If one is present, stop and switch to the matching migration skill.

2. Connect the project (preferred path)

The guided onboarding registers the app, installs the plugin, patches the entry point, builds, uploads, and verifies on a device:

npx @capgo/cli@latest init

Ask the user to run it in their terminal: it signs in through the browser (or uses the key saved by login), asks for the app ID, and uploads a first bundle, so get their go-ahead first. Do not ask for the API key in the chat. In monorepos, add --package-json, --main-file, and --capacitor-config.

3. Manual install (when not using init)

npm install @capgo/capacitor-updater@latest   # pick the tag from the Version Rule table
npx cap sync
npx @capgo/cli@latest app add com.example.app

Minimum config (autoUpdate defaults to true, which equals "atBackground"):

plugins: {
  CapacitorUpdater: {
    autoUpdate: true,
  },
},

4. Call notifyAppReady() immediately

import { CapacitorUpdater } from '@capgo/capacitor-updater';

CapacitorUpdater.notifyAppReady();
  • Call it at the very top of the entry file, before any network call or async init. If it is not called within appReadyTimeout (default 10000 ms), the bundle is marked failed and the previous one is restored.
  • Crashes or API errors after this call do not trigger a rollback.
  • bundle upload checks for this call and fails with notifyAppReady() is missing in the build folder (...). Fix the source. Only use --ignore-notify-app-ready / --no-code-check when the user accepts the rollback risk.

5. Ship a bundle

npm run build
npx @capgo/cli@latest bundle upload com.example.app --path ./dist --channel production

For instant-apply modes ("atInstall", "onLaunch", "always"), upload with --delta and set autoSplashscreen: true with @capacitor/splash-screen launchAutoHide: false. See references/configuration.md.

6. Decide OTA vs native before each release

OTA can only change web assets. A new or upgraded native plugin, a Capacitor bump, or an edit under ios/, android/, or native config needs a store build. Check with:

npx @capgo/cli@latest bundle releaseType com.example.app --channel production   # prints OTA or native

releaseType compares native package metadata only. It cannot see raw edits under ios/ or android/.

Traps

  • Store compliance: OTA may change only interpreted web code and assets, and must not change the app's primary purpose. This comes from the interpreted-code clause in Apple's Developer Program License Agreement, App Review Guideline 2.5.2, and Google Play's Device and Network Abuse policy. Never use OTA to ship features that need review, and do not force an update to block app usage.
  • Privacy manifest: iOS needs NSPrivacyAccessedAPICategoryUserDefaults with reason CA92.1 in PrivacyInfo.xcprivacy.
  • Config key is publicKey, not privateKey. The private key (.capgo_key_v2) stays with the uploader and must never be in the app or the repo.
  • resetWhenUpdate (default true) clears downloaded bundles when a new native build is installed. If you disable it, a store build older than the OTA bundle can break things.
  • Testing on a dev build: a channel blocks dev, emulator, or prod devices by flag (disable_dev_build, disable_emulator, ...). Check the channel options before you assume the plugin is broken.
  • Live reload (Ionic/Quasar): the updater does not serve live-reload URLs. Turn live reload off when testing updates.
  • set() destroys the JS context. No code after it runs. Prefer next() to apply on the next background.
  • Encryption is not secrecy: an unencrypted bundle is a public web asset. Encryption protects storage and delivery, but the public key ships in the app. See capgo-release-management for key create / key save.

Verification

  1. npx @capgo/cli@latest doctor shows the installed updater version and flags anything outdated.
  2. grep -rn "notifyAppReady" src/ finds exactly one early call in the entry point.
  3. npx cap sync succeeds, then build and install the native app once on a real device.
  4. Upload a visibly changed bundle. Run npx @capgo/cli@latest app debug com.example.app while you background and reopen the app. The log should show the check, the download, and set.
  5. npx @capgo/cli@latest probe --platform ios (or android) reports whether the backend would deliver an update to this config and explains why not.

Error Handling

Symptom / stringFix
notifyAppReady() is missing in the build folderAdd the call to the entry point, rebuild, then upload again
index.html is missing in the root folder of <dir>--path points at the wrong folder. Use the built webDir
no_new_version_availableNormal: the device is already current
disable_auto_update_to_major / _minor / _patchChannel strategy blocks the jump. Align CapacitorUpdater.version or change --disable-auto-update
cannot_update_via_private_channelEnable self-assign on the channel (channel set <ch> --self-assign)
on_premise_app (HTTP 429)The appId is not in Capgo, the app is flagged on-prem, or the plan is cancelled
Update downloads then reverts on next launchnotifyAppReady() ran too late or not at all, or the bundle throws before it runs

The full code list is in references/troubleshooting.md.

Resources

FAQ

What does the capgo-live-updates skill do?

Sets up and debugs Capgo live (OTA) updates in a Capacitor app with @capgo/capacitor-updater. Use when the user wants to ship web-layer fixes without app store review, install or configure the updater plugin, choose an autoUpdate mode, call notifyAppReady, wire manual download/next/set flows, set channels from the app, or debug updates that never apply, roll back, or report codes such as nonewversionavailable, disableautoupdatetomajor, cannotupdateviaprivatechannel, or onpremiseapp. Do not use for CLI-only bundle/channel operations (capgo-release-management), Capgo Cloud native builds (capgo-native-builds), or migrations from another OTA vendor.

How do I install capgo-live-updates?

Run npx skills add https://github.com/cap-go/capgo-skills --skill capgo-live-updates in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/capgo-live-updates/ (personal) or .claude/skills/capgo-live-updates/ (project).

Which AI agents can use capgo-live-updates?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is capgo-live-updates safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains capgo-live-updates?

It is published by cap-go in cap-go/capgo-skills. It has 851 recorded installs.

More from cap-go/capgo-skills

View all →

capacitor-best-practices

cap-go/capgo-skills

Review and set up Capacitor apps against current best practices (Capacitor 8.5 stable, 9 alpha via @next). Use for a Capacitor codebase review, capacitor.config.ts audit, new project setup, aligning @capacitor/core/cli/ios/android and plugin majors, plugin patterns (availability checks, checkPermissions/requestPermissions, error code handling, web fallbacks), or release prep; or on " " plugin is not implemented on ios, Could not find the web assets directory, platform has not been added yet, a dev server.url shipped to production, lost edits in android/app/src/main/assets/public, SPM vs CocoaPods, or AppDelegate/UIScene drift. Do not use for security audits (capacitor-security), performance (capacitor-performance), tests (capacitor-testing), crashes (debugging-capacitor), major upgrades (capacitor-app-upgrades), SPM migration (cocoapods-to-spm), UIScene adoption (capacitor-uiscene-migration), or live updates (capgo-live-updates).

ionic-design

cap-go/capgo-skills

Builds and reviews Ionic Framework UI in Capacitor apps (Ionic 9 current, Ionic 8 still common) - page structure (ion-header/ion-content/ion-footer), lists, modern form syntax (label/labelPlacement on ion-input/ion-select), sheet modals, tabs + ion-router-outlet, CSS variable theming, dark palettes (palettes/dark.system.css, .ion-palette-dark), iOS vs MD mode, and Ionic 8 - 9 breaking changes (React Router 6, Vue Router 5, Angular 18-22 zoneless, removed ion-picker-legacy, boolean autocorrect, npx @ionic/migrate). Use when writing Ionic components, theming an Ionic app, fixing platform-mode styling, or upgrading @ionic/react, @ionic/vue, @ionic/angular. Do not use for Konsta UI (konsta-ui), Tailwind setup (tailwind-capacitor), raw safe-area CSS (safe-area-handling), keyboard resize (capacitor-keyboard), or Ionic Appflow/Enterprise migrations (ionic-appflow-migration, ionic-enterprise-sdk-migration).

Frontend & Design1.6K installs

capacitor-plugins

cap-go/capgo-skills

Pick, install, and wire up Capacitor plugins for native features (camera, filesystem, geolocation, biometrics, in-app purchases, social login, SQLite, calendar, contacts, health, BLE, NFC, etc.). Covers official @capacitor/ packages (Capacitor 8.5 stable, 9 alpha on next) plus the 145-package @capgo/ index, native permission keys (Info.plist, AndroidManifest, variables.gradle minSdk), npx cap sync / cap ls verification, and errors like '"Camera" plugin is not implemented on ios', 'unable to find plugin', UNIMPLEMENTED, and OS-PLUG- codes. Use for "which plugin should I use for X", adding a plugin, or a plugin call failing after install. Do not use for push setup (capacitor-push-notifications), splash assets (capacitor-splash-screen), keyboard layout (capacitor-keyboard), deep links (capacitor-deep-linking), OTA updates (capgo-live-updates), upgrading plugin source code (capacitor-plugin-upgrades), or adding SPM to a plugin (capacitor-plugin-spm-support).

Frontend & Design1.6K installs

debugging-capacitor

cap-go/capgo-skills

Diagnoses and fixes runtime bugs in Capacitor iOS/Android apps - white/blank screen on launch, startup crashes, "X" plugin is not implemented on ios/android, net::ERRCLEARTEXTNOTPERMITTED, App Transport Security blocks, CORS on capacitor://localhost, permission denials, live reload not connecting, and Capacitor 8.5+ UIScene regressions (appUrlOpen, universal links, pause/resume silent because AppDelegate callbacks stopped). Covers Safari Web Inspector, chrome://inspect, Xcode/LLDB, Android Studio, npx cap run --url (Capacitor 9) vs -l --host (8), xcrun simctl openurlprivacypush, xcrun devicectl device process launchopenURL, xctrace. Do not use for only reading device logs (ios-android-logs), the UIScene migration itself (capacitor-uiscene-migration), deep-link setup (capacitor-deep-linking), speed (capacitor-performance), crash SDKs (capacitor-native-observability), tests (capacitor-testing), or upgrades/build errors (capacitor-app-upgrades, cocoapods-to-spm).

capacitor-testing

cap-go/capgo-skills

Testing guide for Capacitor apps and plugins. Covers web-layer unit and component tests with Vitest and mocked Capacitor plugins (vi.mock('@capacitor/core'), registerPlugin), Playwright for the web build, Appium E2E with NATIVEAPP / WEBVIEW context switching, native plugin unit tests with Swift Testing vs XCTest (what can migrate, CAPPluginCall patterns, xcodebuild test on a simulator) and Android JUnit, plus an agent-driven verification loop on simulators and devices (build, install, launch, screenshot, UI hierarchy, tap, logs) with xcrun simctl, xcrun devicectl, adb, Xcode MCP device tools, and live reload via npx cap run --url (Capacitor 9) or -l --host --port (Capacitor 8). Use when adding tests, mocking plugins, "does it work on device", verifying a UI change on a simulator, migrating XCTest to Swift Testing, or setting up test CI. Do not use for crash log capture (ios-android-logs), WebView debugging sessions (debugging-capacitor), or build pipelines (capacitor

Testing & QA1.3K installs

safe-area-handling

cap-go/capgo-skills

Fixes notch, Dynamic Island, home indicator, display cutout, and system bar overlap in Capacitor apps. Covers viewport-fit=cover + env(safe-area-inset-), the Capacitor 8 SystemBars core plugin (insetsHandling, injected --safe-area-inset- CSS variables for Android WebView < 140, removal of android.adjustMarginsForEdgeToEdge), Android 15/16 enforced edge-to-edge (overlaysWebView and backgroundColor of @capacitor/status-bar no longer work at targetSdk 36), iOS contentInset, and insets that change at runtime on rotation, iPad/foldable resizable windows. Use when headers sit under the status bar, tab bars hide behind the gesture bar, env() returns 0 on Android, or layout broke after upgrading to Capacitor 8 / targetSdk 35+. Do not use for keyboard overlap (capacitor-keyboard), Ionic/Konsta component theming (ionic-design, konsta-ui), Tailwind utility setup (tailwind-capacitor), or iOS multi-window/resizability adoption (capacitor-ios-resizability).

Mobile1.3K installs

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.