Skip to content

Update OpenMachine

An update has three separate identities: the source commit, the installed package and the running service. A fourth is the client's approved tool catalog. Check each one; a merge to main does not update any of the others.

npm installer on Apple Silicon

npm install -g openmachine@latest installs or updates the npm launcher, not an existing managed Core runtime. Apply the bundled Core explicitly as a second step:

npm install -g openmachine@latest
openmachine update
openmachine status

openmachine update uses the verified payload already in the npm package; it does not download a release or schedule automatic upgrades. Core performs its existing compatibility and activation checks, preserving configuration, history, login preference and deliberate Stop. An update is successful only when its exact installation is selected and the service is verified ready or stopped.

The command prints the original operation ID before submission and waits at most eight minutes for the worker. A lost reply or timeout does not cancel that worker: rerun openmachine update to read the same operation for that bundled payload. Deferred, rejected, restored and recovery-required outcomes exit unsuccessfully; they do not automatically retry. Inspect or explicitly continue the printed ID:

openmachine core --config "$HOME/.config/openmachine/config.toml" \
  --state-dir "$HOME/.local/state/openmachine" manage --contract 1 \
  operation --operation-id ORIGINAL_ID

After resolving a deferred condition, replace operation with continue to explicitly resume that original operation. Do not delete its records. A new attempt after rejection/restoration or reapplying the same payload after rollback requires the explicit Core management workflow; the npm command keeps its original operation rather than silently allocating another.

openmachine --version reports the launcher version; openmachine core --version reports the bundled Core CLI version, which may differ from the running service. Check openmachine status and use the explicit managed update process below for advanced wheel or commit inputs.

The commands in the managed macOS section use the Python Core CLI. With npm, replace the leading openmachine with openmachine core, for example:

openmachine core --config "$CONFIG" --state-dir "$STATE" update \
  --commit FULL_40_CHARACTER_LOWERCASE_SHA

Use a reviewed full commit SHA and the paths of your existing managed installation.

Choose the version and preserve original work

Read the release notes and select an exact release tag or explicitly reviewed development commit. Record current version/commit and existing task/execution IDs. Keep the current configuration, state, old worker archives and interpreters. Do not clear history or locks to force an upgrade or rollback.

Manual source installation

Build the selected release in a separate directory and virtual environment using Installation and that release's own lock. Validate its Python/SQLite requirements first. Do not overwrite a running worker's environment.

Quiesce the old server deliberately, start the new compatible server with the intended existing config/state and re-read the original records before new work. A manually managed installation does not gain the managed service's activation or restoration guarantees. Use a disposable state first to test an unfamiliar candidate; it is not a migration of production history.

Existing managed macOS service

Build the new trusted wheel and matching lock first. With CONFIG and STATE set to the existing absolute paths, and artifact paths replaced:

openmachine --config "$CONFIG" --state-dir "$STATE" update \
  --wheel /absolute/new/openmachine-VERSION-py3-none-any.whl \
  --requirements /absolute/new/requirements.lock
openmachine --config "$CONFIG" --state-dir "$STATE" service status
openmachine --config "$CONFIG" --state-dir "$STATE" doctor --service

VERSION is a placeholder, not a published artifact name. An explicitly reviewed development commit is another supported input:

openmachine --config "$CONFIG" --state-dir "$STATE" update \
  --commit FULL_40_CHARACTER_LOWERCASE_SHA

Use a real full commit SHA. This path needs Git, network access and any required noninteractive repository authentication; it uses that commit's lock and does not change your working checkout. It is not automatic tracking of main.

When a candidate advances the state contract, use the reviewed incoming implementation's CLI as required by the service operating guide. An old CLI cannot validate arbitrary future state. Managed offline installations use original manage install/update operation IDs; see Service.

Verify, restore or diagnose

After verified activation, check actual service version/commit, original results, the refreshed client catalog and a harmless real tool call. A deliberate managed Stop remains stopped. Deferred or recovery-required updates are not successful activations and do not silently retry when the machine becomes idle.

Use explicit compatible rollback only after diagnosis. It restores a retained software installation, not files or other user-work effects. Never delete an incompatible record to make rollback pass. See Troubleshooting and the verification checklist.