fix: update start-cli for signed StartOS authentication - #22
Merged
Conversation
The image baked start-cli from `start-os/v0.4.0-alpha.20`, which authenticates
with a cookie. Signature auth replaced that server-side in `start-os/v0.4.0`,
so supported hosts reject the unsigned request before password validation and
Login to StartOS could not succeed on any host able to install this package.
Pins start-cli 1.1.0 from its product-scoped release in the start-technologies
monorepo. The tag carries a slash, so the download URL encodes it as
`start-cli%2Fv${START_CLI_VERSION}`; the old URL shape could not express it at
all. The build arg is renamed STARTOS_VERSION -> START_CLI_VERSION, since it
tracks the CLI's release line and not StartOS's.
Revoke StartOS Access now runs `auth logout` to un-enroll the key server-side
before deleting it. Login enrolls the key in the store `auth session list`
reads, so deleting the file alone stranded an unnamed entry there, and every
login/revoke cycle stranded another. The logout is wrapped so an unreachable
host or missing CA can never block the local delete, which is what actually
revokes access. The pre-1.1.0 `developer.key.pem` and `.cookies.json` names are
removed too, so an upgraded install has nothing left behind.
UPDATING.md gains a section for this pin, which it never documented — likely
how it drifted to an alpha build unnoticed. It also records that the CLI's
minimum StartOS and the package's own manifest floor are independent numbers.
No upstream bump is due: openclaw v2026.7.1 and gh v2.96.0 are both current,
with everything newer on the openclaw side still a -beta prerelease.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
MattDHill
approved these changes
Jul 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
start-cli 0.4.0-alpha.20with signing-keystart-cli 1.1.0start-cli/v…release and rename the build argSTARTOS_VERSION→START_CLI_VERSIONstart-clipin inUPDATING.md, which never covered it2026.7.1:5Root cause
The image baked start-cli from
start-os/v0.4.0-alpha.20, which sends an unsigned password request and expects a cookie back. Signature auth replaced that server-side instart-os/v0.4.0, so a supported host rejects the request before it ever validates the password — Login to StartOS could not succeed on any host able to install this package.The old URL was
…/Start9Labs/start-os/releases/download/v${STARTOS_VERSION}/…, whose tag segment is hardcoded asv+ the version. The 1.x releases live on product-scoped tags (start-cli/v1.1.0), which that shape cannot express — so the pin was stuck on the last legacy-tagged build. The new URL encodes the slash asstart-cli%2Fv${START_CLI_VERSION}.Same defect and same fix as Start9-Community/hermes-agent-startos#12.
Revoke was leaving keys enrolled
auth loginenrolls the public key in the server's key store — the same storeauth session listreads. Deleting the local file revoked access (no secret, no signable request) but stranded an unnamed entry on the server, and every login/revoke cycle stranded another. The action now runsauth logoutfirst, which un-enrolls it.The logout is best-effort and wrapped: an unreachable host, a missing CA, or an already-revoked key must never block the local delete, since that delete is what actually revokes access.
Deliberately not changed
Unlike hermes-agent, this package does not need a login-time
chown. Login already runs asnode, and/datais chowned tonode:nodeby the boot oneshot on every start; login while stopped therefore finds a node-owned.startosfrom the last boot. Before the first start there is no.startosat all, and thehostguard inloginToOsfails with a clear message rather than an EACCES. Flagging it because the two packages otherwise mirror each other here.Upstream
No bump due.
openclawlatest stable isv2026.7.1(already pinned) —v2026.7.2-beta.*are prereleases, whichUPDATING.mdsays to skip.ghlatest isv2.96.0, already pinned.Verification
npm run check(tsc --noEmit)npx prettier --checkon the touched filesstart-cli/v1.1.0publishes bothstart-cli_x86_64-linuxandstart-cli_aarch64-linux%2Fdownload URL resolves (HTTP 200) and the same URL built successfully in the sibling hermes-agent imageSTARTOS_VERSIONreferences remain anywhere in the repoTest plan
make x86 installagainst a StartOS 0.4.0+ box. Confirm the image build's start-cli download step succeeds (it is the step that 404'd under the old URL shape).check-loginfinds no enrolled key.UNAUTHORIZEDunsigned-request error./media/startos/data/package-data/volumes/openclaw/data/main/.startos/id.key.pemexists asnode-owned, mode0640.start-cli auth session liston the host — aplatforms: ["cli"]entry should now be present.id.key.pemis gone and the session entry from step 5 has disappeared.🤖 Generated with Claude Code