
OpenClaw Live Updater
FreeMaintain a reliable OpenClaw deployment with automated updates.
Free · Opens the source repo
What OpenClaw Live Updater does
OpenClaw Live Updater is designed for developers and maintainers who need to ensure that their OpenClaw main checkout remains clean, up-to-date, and operational. This skill automates the process of keeping a read-only deployment mirror of OpenClaw, ensuring that it is always on the latest commit of the main branch while preventing destructive changes. By utilizing a deterministic updater, it provides a robust mechanism for maintaining the integrity of the deployment, which is crucial for any ongoing development or production environment.
The updater operates within strict boundaries, ensuring that it only reports issues in the controlling Codex thread and does not engage in any external communications. It is focused on diagnosing and fixing ordinary failures related to updates, runtime issues, and continuous integration (CI) validations. The skill is particularly useful for teams that require a reliable CI environment and want to avoid the risks associated with manual updates or potential errors in the deployment process.
This skill is particularly beneficial for those working on macOS, as it includes specific instructions for managing the Gateway and ensures that the deployment is always in a known good state before any updates are applied. It also provides mechanisms for handling failures gracefully, ensuring that any issues are logged and addressed without compromising the live environment. With its emphasis on safety and reliability, OpenClaw Live Updater is an essential tool for teams that prioritize stability in their development workflows.
When to use it
Use this skill when you need to maintain an up-to-date and stable OpenClaw deployment without manual intervention.
When not to use it
This skill is not suitable for environments outside of macOS or for users who require extensive customization of their deployment processes.
What you can build with it
Automated CI Maintenance
Utilize the OpenClaw Live Updater to automate the maintenance of your continuous integration environment, ensuring that it is always on the latest commit.
Safe Deployment Updates
Use this skill to manage updates to your OpenClaw deployment without the risk of manual errors or disruptions.
Consistent Development Environment
Keep your development environment stable and consistent by relying on the automated processes provided by the OpenClaw Live Updater.
How to install OpenClaw Live Updater
View source1. Install with the skills CLI
npx skills add openclaw/openclaw/openclaw-live-updater --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by openclawOpenClaw Live Updater
Keep /Users/steipete/openclaw a read-only-to-the-agent deployment mirror: clean, standalone, full, on main, and fast-forwarded only. Make every repair in the controlling Codex project worktree.
Boundaries
- Report only in the controlling Codex thread. Never send Slack, Discord, email, or other external messages.
- Never release, tag, bump versions, publish npm, create a GitHub Release, rotate credentials, or weaken a gate.
- Escalate only irreversible or materially risky security, privacy, auth, destructive migration/data-loss, protocol-version, credential-rotation, dependency patch/override, or product choices.
- Diagnose ordinary update, runtime, app, CI, test, and release-validation failures; fix them through a focused PR; prove exact head; land with
scripts/pr. - Never edit, stash, reset, clean, or create a branch in the live mirror.
Fast Update And Maintenance
-
Run the deterministic updater and retain its JSON:
node --import tsx .agents/skills/openclaw-live-updater/scripts/update-main.mjsStop on any failed invariant. Do not repair the mirror destructively. The helper holds one checkout-scoped lock across update, build, Gateway proof, and Mac work. A concurrent heartbeat returns
reason: "overlap"; it must not start another build. A dead owner lock may be recovered, but unreadable or unsafe lock state fails closed. -
The helper verifies one unrewritten expected origin, an owned non-symlinked standalone/full clone, single worktree, clean
main, fetchesorigin/main, rechecks for concurrent changes, and merges--ff-only. It then uses the source runner's canonical local-build metadata contract and parser: bothdist/.buildstampanddist/.runtime-postbuildstampheads, required runtime-postbuild outputs,dist/entry.js, Control UI index plus referenced local assets, anddist/build-info.jsonmust all match exactafterSha.- Every successful update sets
actions.gatewayBuildand rebuilds exact newmainbefore any restart. - Missing, invalid, or stale build output also forces a build, even when Git did not move.
- A dependency-input change, absent
node_modules, or missing/invalid build provenance requirespnpm install --frozen-lockfile. When a build is required, do not install before acquiring the maintenance suspension and stopping the managed Gateway. - Before mutating any entrypoint currently executed by the Gateway, invoke an exact trusted source CLI to acquire
gateway.suspend.prepare, binding both prepare and resume to this checkout's managed LaunchAgent loopback port and service auth even when normal CLI configuration points at a remote Gateway. The LaunchAgent may execute either this checkout'sdist/index.jsor a clean detached canonical snapshot under~/.openclaw/runtime/gateway-<sha>whose commit is an ancestor of the checkout; reject every other entrypoint. Never execute snapshot code: capture an exact source control build before the Git fast-forward for its prepare and failure-resume calls, preserve any validated generated service-environment wrapper, and stop the managed LaunchAgent with native launchd bootout. If that control build is missing, first accept native proof that the snapshot job is already booted out with its port free; when the isolated snapshot is still running, build the verified clean source checkout to obtain an exact suspension client, then use only that source client for prepare and failure-resume. Never use this recovery build while launchd targets the source checkout. This atomically pauses cron scheduling, closes new work admission, and refuses while active work remains. A busy result defers further mutation to the next heartbeat; never replace this fence withcron listpolling. Once ready, stop directly without a source launcher, install frozen dependencies when required, then build unless the exact recovery build already produced the deployment artifact; source launchers can auto-build stale output before dispatching the stop. Every external phase has a wall-clock budget: Git fetch 5 minutes, Git merge 2 minutes, dependency install 15 minutes, Gateway build 20 minutes, service control 60 seconds, probes 30 seconds, and Mac rebuild 30 minutes. Progress output never extends a budget. A timeout must drain the task-owned process tree before rollback, previous-service bootstrap, lock release, or the finalcommand_timeoutJSON result. If POSIX cleanup cannot prove the process group gone, skip service recovery, retain the maintenance lock against that process group, and emitcommand_cleanup_failed; after an operator terminates the group, the next heartbeat reclaims the stale lock. Strict tree verification is unavailable on Windows becausetaskkill /Tloses ownership after a normal root exit; refuse before spawning the pre-stop fetch, leave the Gateway untouched, release the lock, and emitunsupported_process_tree_verificationuntil a Windows Job Object owner exists. Resume the suspension if stop fails. If suspension RPC is unavailable on macOS, proceed only when native inspection proves this checkout's managed LaunchAgent is booted out and its configured port has no listener; never accept a loaded KeepAlive job's transient stopped state. On other platforms, require the existing CLI to prove the managed service is stopped with no PID, listener, or RPC. This preserves retry after a post-stop failure without weakening the live-work fence. Preservedist/OpenClaw.appoutsidedistfor the build and restore it even when the build fails, because the JS build cleansdistregardless of Mac impact classification. Never mutate the livedisttree while an old Gateway can dynamically import from it.pnpm buildmust leave both canonical stamp heads anddist/build-info.json.commitequal to post-updateafterSha; any missing/mismatched stamp or required artifact blocks restart. - Snapshot ownership validation must never invoke Git inside the snapshot. Treat its worktree, local Git configuration, filters, hooks, attributes, and build artifacts as untrusted; prove only that the regular owned LaunchAgent entrypoint is under the canonical detached ancestor snapshot path. Snapshot validation authorizes native bootout and retargeting only. Every CLI path must reject snapshot execution and use the trusted source checkout build instead.
- Only after exact-SHA build proof may it restart the managed Gateway and require
gateway status --deep --require-rpc --jsonplushealth --verbose --json. A validated ancestor snapshot is suspension-only: prove the old launchd job is booted out with its port free, allowing bounded retries while launchd and the listener finish teardown, then atomically retarget only the owned LaunchAgent entrypoint to this checkout's exactdist/index.js, including on a retry where the build is already current. Replace the verifiedProgramArgumentsarray as one value; never use array-index plist mutation that can insert a duplicate argument. Preserve all other service arguments and environment unchanged. After restart, prove the loaded launchd PID owns the configured listener. - After every managed restart, query Gateway logs through RPC, restrict the audit to entries emitted since that restart began, report warning summaries, and fail the pass on any error/fatal entry. If RPC verification or log retrieval fails, still inspect the local structured log for that restart window. Never accept supervisor or RPC health without this restart-window log audit.
Treat supervisor state alone as insufficient. If build or proof fails, leave the new mirror head intact and retry the stale/missing build on the next heartbeat; never run the old
distagainst new source.Re-run the canonical freshness check immediately before every
pnpm openclawrestart or probe so the source runner cannot hide stale output with an implicit auto-build. Every pass, including a no-update/current-build pass, must run deep RPC status and verbose health. If that first probe fails while the build is already exact-current, perform one managed Gateway restart and repeat both probes once. Do not rebuild a current exact-SHA artifact merely to self-heal the managed process; fail and diagnose if the one restart does not recover it. - Every successful update sets
-
If changed paths can affect macOS, the helper runs
scripts/restart-mac.sh --sign --wait --target-onlywithSKIP_TSC=1andSKIP_UI_BUILD=1only after the exact-SHA JS/UI build completes. Reusing those artifacts keeps the live app bundle out of any later JavaScript build cleanup. Target-only mode may stop the canonical/Applications/OpenClaw.appprocess and this checkout's exactdistprocess before launching the rebuiltdistapp. It defers when another worktree, temporary bundle, test, or agent-owned OpenClaw process is active; it never kills that process. The script's immediateOKis not proof. The helper waits and requires the exact executable/Users/steipete/openclaw/dist/OpenClaw.app/Contents/MacOS/OpenClaw, then repeats Gateway RPC and health proof.Never kill another worktree, temporary bundle, test, or agent-owned OpenClaw process. If a foreign app prevents the exact target from staying alive, record the pending Mac attempt, report it, and retry on the next heartbeat. Escalate only after the conflict persists across repeated heartbeats; never claim Mac proof from another bundle or the short launch check. If
actions.macUiVerificationis true, exercise the changed behavior with the existing macOS/UI automation workflow after delayed exact-bundle proof. -
Load
$openclaw-testing. Resolve exact currentorigin/main, then inspect only relevant required checks and workflow jobs whoseheadShaequals it. Ignore skipped jobs and routine noise such as Auto response, Labeler, docs agents, performance advisory jobs, and stale/cancelled runs superseded by a newer run for the same SHA. -
For an attributable failure, leave the mirror untouched. Use the controlling Codex worktree, trace the failed surface, add focused proof, run
$autoreview, open a focused PR, and land through$openclaw-pr-maintainer's exactscripts/prsequence. Never weaken or bypass the failing gate. After landing, begin again at step 1 so the mirror, Gateway, app classification, and exact-head checks all converge on newmain.
If no update, build repair, pending Mac retry, or exact-head failure exists, report a terse no-op with the SHA and proof checked.
Full Release Validation
Load $release-openclaw-ci and $openclaw-testing. This is validation only, never release preparation or publication.
-
Treat 12 hours as wall-clock cadence, not per-SHA cadence. Inspect Full Release Validation runs from the last 12 hours and verify effective
release_profile=full,rerun_group=all, and expected child-job shape. Any valid active or successful full/all umbrella in that window satisfies the cadence even ifmainadvanced afterward. Never duplicate an active full/all run. -
Only when the cadence is due, confirm no full/all run is active, then snapshot exact current
origin/mainafter checking mirror invariants. Run the provider-secret preflight without printing secrets and dispatch the trusted workflow once:MAIN_SHA="<exact-main-sha>" gh workflow run full-release-validation.yml \ --repo openclaw/openclaw \ --ref main \ -f ref="$MAIN_SHA" \ -f expected_sha="$MAIN_SHA" \ -f provider=openai \ -f mode=both \ -f release_profile=full \ -f rerun_group=all -
Watch the parent with
release-ci-summary.mjs; require its recorded target SHA and children to match the dispatch snapshot. Fetch logs only for failed or blocking jobs. Do not cancel unrelated release checks. -
For a code or harness failure, repair and land from the Codex worktree as above. Then target new exact
mainwith the narrowest supportedrerun_groupthat covers the failed child; uselive_suite_filterfor one live/E2E shard. A targeted recovery run does not create a second full/all cadence dispatch. -
Report exact SHA, parent and child run URLs/IDs, conclusions, repairs and landed PRs, targeted reruns, and any genuine proof gap. Do not write release evidence or publish artifacts unless separately authorized.
Failure Discipline
- Recheck live mirror invariants before every mutation and after every fetch.
- Attribute failures from exact SHA, job, logs, and current source. Provider or infrastructure flakes need independent proof before code edits.
- Keep the task branch focused. No
CHANGELOG.mdchange. - Finish with the mirror clean/on
main, the Codex worktree clean on the expected branch, remote Testbox stopped, and every public GitHub write linked in the controlling thread.
Frequently asked questions about OpenClaw Live Updater
Similar skills
Turborepo
Optimized build system for JavaScript/TypeScript monorepos.
Azure Pipelines Validation
Streamline your Azure DevOps pipeline changes locally.
Azure Developer CLI
Streamline your Azure project workflows with best practices.
Azure Container Registry CLI
Manage Azure Container Registry resources with ease.
Aspire
Build and orchestrate polyglot distributed applications seamlessly.
Vercel CLI
Manage and deploy Vercel projects from the command line.
