Problem
Runner base updates are currently not intuitive.
Today, Clawdapus publishes and pins runtime infra images (cllama, claw-api, clawdash, claw-wall, hermes-base) through the claw pull surface, but openclaw:latest and the other local runner tags are still synthetic local base aliases resolved through BaseImageProvider.
That creates a broken operator expectation:
claw pull sounds like it should fetch the latest runnable platform bits
claw up sounds like it should be able to remediate stale runner state
claw build does rebuild service images, but it does not clearly mean "refresh my runner base"
- local tags like
openclaw:latest can go stale indefinitely and are not pullable from a registry
This already caused real confusion on the trading pod when trying to move to a newer OpenClaw release.
Goal
Define an intuitive, deterministic runner update UX that answers:
- How does an operator get the latest supported OpenClaw/Hermes/etc.?
- Which command owns freshness versus local pod compilation?
- How do released
claw binaries pin and reproduce runner bases?
- How do we avoid
claw up silently changing runner versions on a live pod?
Deliverables
- ADR for runner base image lifecycle and CLI ownership
- implementation plan covering CLI surface, manifest/pinning, migration, docs, and tests
- follow-up implementation issue(s)
Constraints
- The UX should stay aligned with the four-verb surface where possible.
claw up should remain fail-closed by default; no surprise live upgrades.
- Operators should not need raw Docker commands to refresh runner bases.
- Build-time versus runtime ownership must be obvious from the command model.
Likely design space
At minimum evaluate:
- published + pinned runner base images fetched by
claw pull
- explicit runner-refresh command(s) if bases remain synthetic/local
- whether
claw up --fix may remediate missing-but-not-stale runners, while leaving version upgrades to explicit commands
- how
FROM openclaw:latest and similar scaffold defaults migrate
Problem
Runner base updates are currently not intuitive.
Today, Clawdapus publishes and pins runtime infra images (
cllama,claw-api,clawdash,claw-wall,hermes-base) through theclaw pullsurface, butopenclaw:latestand the other local runner tags are still synthetic local base aliases resolved throughBaseImageProvider.That creates a broken operator expectation:
claw pullsounds like it should fetch the latest runnable platform bitsclaw upsounds like it should be able to remediate stale runner stateclaw builddoes rebuild service images, but it does not clearly mean "refresh my runner base"openclaw:latestcan go stale indefinitely and are not pullable from a registryThis already caused real confusion on the trading pod when trying to move to a newer OpenClaw release.
Goal
Define an intuitive, deterministic runner update UX that answers:
clawbinaries pin and reproduce runner bases?claw upsilently changing runner versions on a live pod?Deliverables
Constraints
claw upshould remain fail-closed by default; no surprise live upgrades.Likely design space
At minimum evaluate:
claw pullclaw up --fixmay remediate missing-but-not-stale runners, while leaving version upgrades to explicit commandsFROM openclaw:latestand similar scaffold defaults migrate