7.4 KiB
Troubleshooting
This guide keeps the longer operational troubleshooting steps out of the README.
UI shows Backend Not Loaded / endpoints return 404
This usually means ComfyUI did not load the Python side of the pack, or route registration failed during startup.
Steps:
- Check ComfyUI startup logs for import errors while loading the custom node pack. Search for
openclaw,Route registration failed, orModuleNotFoundError. - Confirm the pack folder is directly under
custom_nodes/and contains__init__.py. - Run the smoke import check inside the same Python environment ComfyUI uses:
python scripts/openclaw_smoke_import.py
# or
python scripts/openclaw_smoke_import.py --verbose
- Manually verify the endpoints used by the Settings tab:
GET /api/openclaw/healthGET /api/openclaw/configGET /api/openclaw/logs/tail?n=50
Notes:
- If your pack folder name is not
comfyui-openclaw, the smoke script may needOPENCLAW_PACK_IMPORT_NAME=your-folder-name. - If imports fail with a
services.*module error, check for name collisions with other custom nodes and prefer package-relative imports.
Imported workflow shows missing OpenClaw nodes
Current builds expose node portability metadata so "missing custom node" can be diagnosed separately from a generic import failure.
What to check:
- Open the Explorer / inventory diagnostics view or inspect
/openclaw/preflight/inventory. - Confirm whether the workflow references
openclaw:*nodes that are not present on the current host. - Look for portability/replacement guidance rather than renaming nodes blindly.
Notes:
- Compatibility class names such as
Moltbot*still exist for older workflows, but the canonical portability contract is anchored onopenclaw:*node identities. - Current diagnostics may include deterministic replacement hints when an unavailable OpenClaw node can degrade to a more portable workflow pattern.
- If no portability guidance is present and the pack itself is loaded correctly, treat that as a real contract gap rather than assuming the workflow can be repaired by arbitrary JSON edits.
Operator Doctor
Run the built-in diagnostic tool to verify environment readiness (libraries, permissions, contract files):
python scripts/operator_doctor.py
# Or check JSON output:
python scripts/operator_doctor.py --json
Explorer / inventory note:
/openclaw/preflight/inventoryis snapshot-first on current builds.- A response showing
scan_state=refreshingorstale=truedoes not necessarily mean the inventory path is broken; it can mean the cached snapshot was returned quickly while a deeper model scan continues in the background. - Treat
last_erroras the primary signal that the background scan actually failed.
Jobs preview shows an explicit asset fallback state instead of an image preview
Current OpenClaw builds keep /history + /view as the supported runtime preview contract for job results.
If a result ref only exposes an upstream asset-service identifier and cannot be represented through /view, OpenClaw keeps that ref explicit instead of silently guessing a direct /api/assets fetch.
What this means:
asset_api_requiredis a bounded compatibility state, not a generic parser failure.- Classic history refs and hash-backed refs that still map onto
/viewshould continue to preview normally. - If an operator workflow starts depending on direct asset-service identifiers, treat that as a contract gap and review
docs/r167_asset_api_adoption_decision.mdbefore widening the runtime dependency.
Verify audit-chain continuity after restart or rotation
Use the retained-chain verifier:
python scripts/verify_audit_chain.py
JSON output:
python scripts/verify_audit_chain.py --json
Notes:
- The verifier checks the current
audit.logand any retained rotated audit segments in the state directory. - When no audit chain key is supplied from environment/config, OpenClaw persists
audit.log.keyso verification still works across restart and rotation. - Treat verification failure as an audit-integrity incident until proven otherwise.
Webhooks return 403 auth_not_configured
Set webhook auth environment variables as described in the README quick-start section, then restart ComfyUI.
LLM model list shows HTTP 403 ... Private/reserved IP blocked: 127.0.0.1
This usually means your OpenClaw build is older than the local-loopback SSRF fix. For local providers, 127.0.0.1 and localhost are valid targets and should not require insecure SSRF flags.
Checklist:
- Update OpenClaw to the latest release.
- For Ollama:
- run
ollama serve - verify
http://127.0.0.1:11434/api/tagsis reachable on the same machine
- run
- In OpenClaw Settings:
- Provider:
Ollama (Local)orLM Studio (Local) - Base URL: leave empty to use the provider default, or set a loopback URL explicitly
- Provider defaults:
Ollama (Local)->http://127.0.0.1:11434/v1LM Studio (Local)->http://localhost:1234/v1
- If an older saved Ollama URL is still set to
http://127.0.0.1:11434, update it to/v1or clear the field so the built-in default can be applied
- Provider:
- Keep these flags disabled:
OPENCLAW_ALLOW_ANY_PUBLIC_LLM_HOST=0OPENCLAW_ALLOW_INSECURE_BASE_URL=0
Remote Admin can open, but custom LLM on 192.168.x.x is still blocked
This is expected under the current SSRF policy.
OPENCLAW_ALLOW_REMOTE_ADMIN=1only allows remote admin access; it does not relax outbound LLM egress rules.OPENCLAW_LLM_ALLOWED_HOSTSonly extends the exact-host allowlist for custom public hosts.- Private/reserved IP targets such as
192.168.x.x,10.x.x.x, and172.16.x.xremain blocked unlessOPENCLAW_ALLOW_INSECURE_BASE_URL=1is also set. OPENCLAW_ALLOW_ANY_PUBLIC_LLM_HOST=1does not allow private/reserved IPs.OPENCLAW_LLM_ALLOWED_HOSTS=*is not a wildcard and will not bypass the policy.
Correct setup flow:
- If you are using a built-in local provider (
ollama,lmstudio), keep it on loopback only and use the provider default orlocalhost/127.0.0.1/::1. - If you need a custom public LLM host, set:
OPENCLAW_ALLOW_CUSTOM_BASE_URL=1OPENCLAW_LLM_ALLOWED_HOSTS=<exact-host>orOPENCLAW_ALLOW_ANY_PUBLIC_LLM_HOST=1
- If you intentionally need a LAN/private-IP target, set
OPENCLAW_ALLOW_INSECURE_BASE_URL=1, accept the SSRF risk, and fully restart ComfyUI. - On Windows portable, set environment variables in the same launcher that starts
python_embeded\\python.exe, or restart aftersetx/ System Properties changes. - Verify the effective value in the same embedded Python runtime:
python_embeded\python.exe -c "import os; print(repr(os.environ.get('OPENCLAW_LLM_ALLOWED_HOSTS')))"
Safer alternative:
- keep the LLM behind a reviewed public HTTPS reverse proxy and allowlist that public host, instead of enabling
OPENCLAW_ALLOW_INSECURE_BASE_URL - on current builds, once that override is intentionally enabled and the process is restarted, both Remote Admin validation and
/openclaw/llm/modelsshould follow the same decision
Admin Token: server-side vs UI
OPENCLAW_ADMIN_TOKEN is a server-side environment variable.
- The Settings UI can use an Admin Token for authenticated requests.
- The UI cannot set or persist the server token itself.
For full setup steps, see the main README quick-start section and tests/TEST_SOP.md.