.hermes-install.json marks a checkout as source-managed or desktop-bundled and records its update channel. A missing file means source mode on the main channel, so no existing install changes. `hermes update` reads the manifest: - On a bundled install it refuses and points at the in-app updater. - On the stable channel it fast-forwards the checkout to the newest final release tag (vX.Y.Z, three-digit major cap so legacy CalVer tags never match) instead of origin/main. The ZIP fallback resolves the tag through the GitHub API because that path runs when git file I/O is broken. - `update.channel` in config.yaml overrides the channel for source installs. "auto" defers to the manifest. `hermes update --eject` is the exit from desktop management. On a bundled install it downloads Hermes Setup and launches it pinned to the exact commit the bundle was built from; the installer creates a normal source checkout at ~/.hermes/hermes-agent. Hermes Setup accepts the new `--pin-commit <sha>` argument for this flow. On a source-managed install, --eject with --channel only switches the channel. The "ejected" manageStyle is the permanent opt-out that stops future auto-adoption. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| _shared.py | ||
| acp.py | ||
| approvals.py | ||
| auth.py | ||
| backup.py | ||
| claw.py | ||
| config.py | ||
| console.py | ||
| cron.py | ||
| dashboard.py | ||
| debug.py | ||
| doctor.py | ||
| dump.py | ||
| gateway.py | ||
| gui.py | ||
| hooks.py | ||
| import_agent.py | ||
| import_cmd.py | ||
| insights.py | ||
| login.py | ||
| logout.py | ||
| logs.py | ||
| mcp.py | ||
| memory.py | ||
| model.py | ||
| monitoring.py | ||
| pairing.py | ||
| pause.py | ||
| plugins.py | ||
| profile.py | ||
| prompt_size.py | ||
| security.py | ||
| setup.py | ||
| skills.py | ||
| skin.py | ||
| slack.py | ||
| status.py | ||
| sync.py | ||
| tools.py | ||
| uninstall.py | ||
| update.py | ||
| verify.py | ||
| version.py | ||
| webhook.py | ||
| whatsapp.py | ||