Umbrel Proxy Manager
Analysis
The skill is mostly aligned with managing Umbrel services, but it can persistently rewrite OpenClaw plugin URLs from broad service-mapping data and ships a pre-generated local service inventory that users should review before running.
Findings (5)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
for mapping in mappings:
app_name = mapping['app_name']
proxy_port = mapping['proxy_port']
plugin_name = map_app_to_plugin(app_name)
...
cmd = f"openclaw config set {config_path} {base_url}"The updater loops over all mappings and writes persistent OpenClaw plugin baseUrl settings without a confirmation step, rollback, or narrow allowlist.
CHANGELOG: "Complete privacy reset... no personal data"; JSON: "service_name": "ghost_db_1", "service_ip": "10.21.0.46"
The privacy-cleanup claim is weakened by the bundled generated service inventory containing specific local service details.
check_dependency "docker" "Docker" || exit 1 check_dependency "python3" "Python 3" || exit 1 check_dependency "openclaw" "OpenClaw CLI" || exit 1 check_dependency "curl" "curl" || exit 1
The scripts require several local tools even though the registry requirements section declares no required binaries.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
docker ps --format "{{.Names}}" | grep -q "${service}_app_proxy_1"
...
openclaw config set "plugins.entries.${service}.config.baseUrl" "http://localhost:$port"The script uses local Docker inspection authority and OpenClaw configuration write authority; this is expected for the purpose but should be understood before running.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
"service_name": "bitcoin_app_1", "service_ip": "10.21.21.8", "proxy_name": "bitcoin_app_proxy_1", "proxy_port": "2100"
The package includes a generated service-mapping JSON file with concrete local service names, IPs, and ports; the updater/test scripts use an umbrel_services.json file as reusable state.
