Investigation Summary
- Homebrew 6 registers services with the label
sh.brew.<formula> (brew services info openshell --json reports "service_name": "sh.brew.openshell").
src/lib/onboard/docker-driver-gateway-service.ts only accepts candidate.service_name === homebrew.mxcl.${service.serviceName}``, so the managed gateway NemoClaw just started is not recognized as the packaged service.
- Readiness then classifies the listener on port 8080 as
gateway.port.owner_mismatch and onboarding blocks.
- Patching the comparison to also accept
sh.brew.<formula> lets onboarding proceed.
Description
On a Mac with Homebrew 6, nemohermes onboard starts the OpenShell gateway through the managed Homebrew service, reports it healthy at step 2/8, and then on the next preflight refuses to continue:
✗ The gateway port is held by an incompatible or ambiguous owner.
✗ System readiness could not confirm required capabilities: gateway.version.compatible.
Gateway port 8080 is occupied by openshell-gateway (PID 73765). Confirm PID 73765 is not another NemoClaw gateway, then stop only it before retrying: sudo kill 73765
nemohermes host probe --json shows gateway.owner.source = packaged-service, gateway.reuse = healthy, and gateway.port_conflict = owner-mismatch. The PID is NemoClaw's own service (launchctl list shows label sh.brew.openshell, executable /opt/homebrew/opt/openshell/bin/openshell-gateway).
Expected: the managed Homebrew service is recognized under both the legacy homebrew.mxcl.* and the Homebrew 6 sh.brew.* labels.
Reproduction Steps
- macOS with Homebrew 6.x (
brew --version → 6.0.21 here).
curl -fsSL https://www.nvidia.com/nemoclaw.sh | NEMOCLAW_AGENT=hermes bash -s -- --non-interactive --yes-i-accept-third-party-software
- Onboarding starts the gateway, then fails preflight on resume with the owner-mismatch finding above.
brew services info openshell --json → service_name is sh.brew.openshell.
Environment
- macOS 15 (Darwin 25.6.0), Apple Silicon (M2 Pro), Homebrew 6.0.21
- Docker via Colima (docker 29.2.1, linux/arm64 VM)
- NemoClaw v0.0.109 via the hosted installer (
lkg), OpenShell 0.0.101 (Homebrew formula), Hermes Agent v0.19.0
- Same code path present on
main at the time of filing
Debug Output
$ brew services info nvidia/openshell/openshell --json
[{"name":"openshell","service_name":"sh.brew.openshell","running":true,"loaded":true,"pid":73765,"file":"/Users/<user>/Library/LaunchAgents/sh.brew.openshell.plist", ...}]
Workaround
Local patch accepting either label in docker-driver-gateway-service.js (the record lookup that matches candidate.service_name).
Checklist
Investigation Summary
sh.brew.<formula>(brew services info openshell --jsonreports"service_name": "sh.brew.openshell").src/lib/onboard/docker-driver-gateway-service.tsonly acceptscandidate.service_name ===homebrew.mxcl.${service.serviceName}``, so the managed gateway NemoClaw just started is not recognized as the packaged service.gateway.port.owner_mismatchand onboarding blocks.sh.brew.<formula>lets onboarding proceed.Description
On a Mac with Homebrew 6,
nemohermes onboardstarts the OpenShell gateway through the managed Homebrew service, reports it healthy at step 2/8, and then on the next preflight refuses to continue:nemohermes host probe --jsonshowsgateway.owner.source = packaged-service,gateway.reuse = healthy, andgateway.port_conflict = owner-mismatch. The PID is NemoClaw's own service (launchctl listshows labelsh.brew.openshell, executable/opt/homebrew/opt/openshell/bin/openshell-gateway).Expected: the managed Homebrew service is recognized under both the legacy
homebrew.mxcl.*and the Homebrew 6sh.brew.*labels.Reproduction Steps
brew --version→ 6.0.21 here).curl -fsSL https://www.nvidia.com/nemoclaw.sh | NEMOCLAW_AGENT=hermes bash -s -- --non-interactive --yes-i-accept-third-party-softwarebrew services info openshell --json→service_nameissh.brew.openshell.Environment
lkg), OpenShell 0.0.101 (Homebrew formula), Hermes Agent v0.19.0mainat the time of filingDebug Output
Workaround
Local patch accepting either label in
docker-driver-gateway-service.js(the record lookup that matchescandidate.service_name).Checklist