#Help with approvals
1 messages · Page 1 of 1 (latest)
@rancid sail marked this post as solved via https://discord.com/channels/1456350064065904867/1479557387731079179
Wait it didn’t solve
SYSTEM_RUN_DENIED always comes from the node host’s local exec-approval policy (not from pairing). On Windows this is almost always one of these two situations:
- the node host is not actually reading the exec-approvals file you edited (wrong location / wrong user / invalid JSON), so it falls back to
tools.exec.security(oftenallowlist) and denies, or - you’re hitting the Windows-specific rule where
cmd.exe /c …wrapper runs get treated as blocked in allowlist mode unless they go through the ask/approval flow.
A couple quick checks to pinpoint which one:
1) Paste the full error string
It matters whether it’s:
SYSTEM_RUN_DENIED: approval requiredSYSTEM_RUN_DENIED: allowlist miss (Windows shell wrappers like cmd.exe /c require approval…)- or something else
2) Verify what the gateway thinks the node’s approvals are
From the gateway host, run:
openclaw nodes status
openclaw approvals get --node <id|name|ip>
If that output does not show security: full (or shows allowlist/deny), then your file isn’t being applied.
3) The approvals file must be strict JSON and include version: 1
On the Windows machine running the node host, the file is:
%USERPROFILE%\.openclaw\exec-approvals.json
It is parsed with JSON.parse (no JSON5): no comments, no trailing commas. If parsing fails or version is missing/wrong, it silently falls back.
A minimal known-good file for “just make it run” debugging is:
{
"version": 1,
"defaults": {
"security": "full",
"ask": "off",
"askFallback": "full"
},
"agents": {}
}
Then apply it via CLI (recommended because it proves the node can read/write approvals):
openclaw approvals set --node <id|name|ip> --file ./exec-approvals.json
openclaw approvals get --node <id|name|ip>
4) If you want allowlist mode on Windows, don’t use ask: off
In allowlist mode, cmd.exe /c ... wrapper runs require approval (by design). Fix is:
ask: "on-miss"(or"always") and approve via Control UI, or- avoid wrapper forms and run a stable executable argv directly.
Docs that cover this exact Windows behavior:
If you paste:
openclaw --versionfrom the Windows node host machine, andopenclaw approvals get --node …output, and- the exact
SYSTEM_RUN_DENIED: ...message,
I can tell you which of the above you’re hitting and what to change.
Then we’re missing the one piece of info that determines the next step: what exact SYSTEM_RUN_DENIED: … variant are you getting, and what does the gateway/node report as the effective approvals policy.
Can you paste all three of these (as text, not screenshots)?
A) Exact error text (verbatim)
When it fails, does it say:
SYSTEM_RUN_DENIED: allowlist miss ... (Windows shell wrappers like cmd.exe /c require approval ...)SYSTEM_RUN_DENIED: approval requiredSYSTEM_RUN_DISABLED: security=deny- something like
execution plan mismatch/cwd ...?
Those mean totally different causes.
B) What approvals the node is actually using
Run from the gateway host:
openclaw nodes status
openclaw approvals get --node <id|name|ip>
If this shows anything other than security: full then your edited file is not being applied (wrong file / wrong user / invalid JSON / node host running in a different environment).
C) What the node host itself sees locally (this catches WSL vs native Windows)
On the Windows machine running the node host, run:
openclaw --version
openclaw approvals get
and paste the output.