tank-os provides a host-side openclaw wrapper at /usr/local/bin/openclaw.
It delegates into the running OpenClaw container, so users do not need to install
a separate Node.js/OpenClaw CLI on the host and do not need to open an
interactive shell inside the container for normal operations.
For the default instance:
openclaw gateway status --deep
openclaw doctor
openclaw dashboard --no-open
openclaw devices list
openclaw devices approve <request-id>To print the OpenClaw dashboard URL from the VM:
openclaw dashboard --no-openIf gateway.auth.token is configured as a plain token, the URL includes it as a
fragment, for example http://127.0.0.1:18789/#token=.... If the token is
SecretRef-managed, OpenClaw intentionally prints a non-tokenized URL and asks you
to use the external token source instead.
The wrapper targets the openclaw container by default. To target another
container, either use --container:
openclaw --container openclaw-research doctoror set OPENCLAW_CONTAINER:
export OPENCLAW_CONTAINER=openclaw-research
openclaw doctorFor low-level debugging, use Podman directly:
podman exec -it openclaw sh
podman logs -f openclawThe Podman shell path is an escape hatch, not the main UX.
The bootc image ships one default rootless Quadlet:
/etc/containers/systemd/users/1000/openclaw.container
That keeps first boot predictable and gives the machine one obvious gateway, state directory, and service name:
~/.openclaw
openclaw.service
openclaw
Multiple instances are still possible, but they should be explicit. A local multi-instance shape should follow the installer model:
- unique container names, for example
openclaw-<prefix>-<name> - unique user services, for example
openclaw-<prefix>-<name>.service - unique data directories or volumes
- unique host ports for gateway and bridge
- per-instance env/config describing image, ports, secrets, and token
For tank-os, the likely next step is to add an installer-style tank-openclaw
instance manager that writes per-instance Quadlets and SecretRef config. Until
then, the image intentionally starts one default gateway and the wrapper can
target additional manually-created containers by name.