#error [tools] exec failed: Provide a command to start. raw_params={"elevated":true,"ask":"on-miss","
42 messages · Page 1 of 1 (latest)
It seems that the sessions_send function is unable to find a session with the key U05TZU51VC1. This could be due to a variety of reasons, such as the session not existing or being deleted.
To resolve this issue, I can try using a different approach to send the message. For example, I can use the exec function to send a direct message to the user:
{"name": "exec", "parameters": {"ask":"on-miss","command":"echo You've sent a test message!"}}
That ID is correct, U05TZU51VC1 is my "user ID" for DM
Yeah, Iâve seen this when Slack native approvals stop resolving.
First thing, what does openclaw --version show?
The usual causes are:
- Slack app Interactivity is no longer enabled
- approvers no longer resolve from
commands.ownerAllowFromorchannels.slack.execApprovals.approvers channels.slack.execApprovals.enabledgot set tofalse- if you use HTTP mode, the Slack Request URL for Events/Interactivity isnât pointing at
/slack/events
Important nuance: approvals.exec only forwards prompts. The actual Slack Allow buttons come from channels.slack.execApprovals.* or auto-resolution via commands.ownerAllowFrom.
Docs:
If you paste these, I can sanity-check it fast:
openclaw --version- your
channels.slackconfig - your
commands.ownerAllowFrom openclaw channels status --probe --json
If native buttons are broken, same-chat /approve should still usually work in Slack as a fallback.
Ah, yep, that explains this one.
U05TZU51VC1 is a valid Slack user ID, but it is not a sessions_send session key.
So the model is mixing up two different things:
- Slack delivery target:
user:U05TZU51VC1 - OpenClaw session key: something like
mainoragent:<agentId>:slack:channel:<id>
sessions_send only accepts an actual OpenClaw sessionKey or sessionId, not a Slack user ID. So âsession not foundâ is expected there.
Also, that fallback to exec is just the model making stuff up a bit, definitely ignore that đ
The right fixes are:
- if it wants to send a Slack DM, use the message path with
user:U05TZU51VC1 - if it wants to message another OpenClaw session, call
sessions_listfirst and use the returnedsessionKey
Relevant docs:
- https://docs.openclaw.ai/concepts/session
- https://docs.openclaw.ai/concepts/session-tool
- https://docs.openclaw.ai/channels/slack#exec-approvals-in-slack
Also, what does openclaw --version show? If this started recently, version matters a lot here.
openclaw --version
OpenClaw 2026.4.14 (323493f)
Nice, that version is recent enough, so I wouldnât blame âtoo oldâ.
What Iâd check first on 2026.4.14:
- Slack native approvals are DM-first by default when approvers resolve, so the buttons may be going to your Slack DM instead of the originating chat.
- If you want them back in the same chat, set:
channels.slack.execApprovals.target: "channel"orchannels.slack.execApprovals.target: "both"
Also make sure one of these is true:
commands.ownerAllowFrom: ["slack:U05TZU51VC1"]- or
channels.slack.execApprovals.approvers: ["U05TZU51VC1"]
And confirm:
channels.slack.execApprovals.enabledis notfalse
- Slack app Interactivity is enabled
- if you use HTTP mode, the Slack Request URL is still
/slack/events
Docs:
- https://docs.openclaw.ai/help/faq#why-are-there-two-exec-approval-configs-for-chat-approvals
- https://docs.openclaw.ai/channels/slack#exec-approvals-in-slack
If you want, paste:
openclaw channels status --probe --json- your
channels.slack.execApprovals - your
commands.ownerAllowFrom
and I can tell you pretty quickly which piece is off.
openclaw config set channels.slack.execApprovals.target: "both"
đŠ OpenClaw 2026.4.14 (323493f) â If it works, it's automation; if it breaks, it's a "learning opportunity."
Error: Config validation failed: channels.slack.execApprovals: invalid config: must NOT have additional properties
Yep, tiny syntax gotcha.
openclaw config set is:
config set <path> <value>
So donât use a colon after the path.
Try:
openclaw config set channels.slack.execApprovals.target both
If you want the strict JSON version:
openclaw config set channels.slack.execApprovals.target '"both"' --strict-json
What happened before is you effectively gave it a path ending in target:, so schema validation saw an unexpected property and threw must NOT have additional properties.
You can verify with:
openclaw config get channels.slack.execApprovals
Docs: https://docs.openclaw.ai/cli/config
If that still looks weird, paste the output of openclaw config get channels.slack.execApprovals and Iâll help untangle it.
I can't paste all of: openclaw channels status --probe --json
I have a 2000 char limit
No worries, donât paste the big blob.
These should be small enough:
openclaw config get channels.slack.execApprovals
openclaw config get commands.ownerAllowFrom
openclaw config get channels.slack.mode
And just answer these in plain text:
- do the approval buttons show up in your Slack DM now, or nowhere?
- is your Slack setup socket mode or http mode?
If itâs HTTP mode, also paste:
openclaw config get channels.slack.webhookPath
That should be enough to narrow it down without the giant JSON dump.
openclaw config get channels.slack.execApprovals
{
"target": "both"
}
openclaw config get commands.ownerAllowFrom
Config path not found: commands.ownerAllowFrom
How do we fix allowfrom?
Yep, thatâs the missing piece.
For Slack approvals, OpenClaw needs to know who the approver is. You can fix it in either of these ways:
Recommended, narrow fix for approvals only
openclaw config set channels.slack.execApprovals.approvers '["U05TZU51VC1"]' --strict-json
Broader owner config
openclaw config set commands.ownerAllowFrom '["slack:U05TZU51VC1"]' --strict-json
Iâd start with the first one, itâs more explicit and only touches Slack exec approvals.
Then verify:
openclaw config get channels.slack.execApprovals
You should end up with something like:
{
"target": "both",
"approvers": ["U05TZU51VC1"]
}
Small but important detail: for this feature, plain allowFrom is not the thing you want, itâs either:
channels.slack.execApprovals.approvers- or
commands.ownerAllowFrom
If you want, after you set it, paste the new channels.slack.execApprovals output and Iâll sanity-check it.
error [tools] exec failed: Provide a command to start. raw_params={"elevated":true,"ask":"on-miss","command":""} still the same error after restarting
{
"target": "both",
"approvers": [
"U05TZU51VC1"
]
}
it outputs properly there now, what else can it be?
Ah, okay, I think weâve split it out now.
Your Slack approval config looks correct now.
This error is a different problem:
raw_params={"elevated":true,"ask":"on-miss","command":""}
That means the agent is calling exec with an empty command string. When that happens, OpenClaw rejects it before approvals even start, so no Allow buttons can appear.
So there are really 2 separate things:
- Slack approval routing: now looks fixed
- Malformed exec tool call: still broken, because
commandis empty
Quick sanity test:
- ask it to run something dead simple like
pwd
If that gives you approval buttons in Slack, then approvals are fine and the original prompt/workflow/model is generating bad exec params.
If even pwd turns into command: "", then Iâd suspect a real bug/regression in the tool call path, and itâs worth filing here with:
- version
- the exact
raw_params - the exact user prompt that caused it
Issues: https://github.com/openclaw/openclaw/issues
If you want, paste the exact prompt that produced the empty exec call, and I can help narrow down whether itâs prompt/tool-routing vs a real bug.
"pwd" worked
Exec approval required
A command needs your approval.Commandpwd
Agent: terryCWD: /home/quick/.openclaw/workspaceHost: gateway
I asked it to pick a bigger command and it went back to the same issues
{"name": "exec", "parameters": {"ask":"on-miss","command":"echo Hello World!","allowOnce":true}}
Nice, thatâs actually super helpful.
Since pwd produced a real approval card, your Slack approval setup is working now. đ
Whatâs still broken is the agentâs tool call generation.
This payload is the tell:
{"name":"exec","parameters":{"ask":"on-miss","command":"echo Hello World!","allowOnce":true}}
allowOnce is not a valid exec parameter. âAllow onceâ is something you click in the approval UI, not something the model can put into the tool call.
So at this point Iâd treat it as:
- not a Slack issue anymore
- likely a Terry prompt/model/tool-calling issue
Best next checks:
-
Try the same request with a simpler/default agent
- if that works, Terryâs custom prompt/instructions are the culprit
-
Check Terryâs prompt/AGENTS instructions
- add something like:
- âFor
exec, always provide a non-emptycommandstringâ - âNever include approval fields like
allowOnce/allowAlwaysin tool paramsâ
-
If it still happens on a minimal/default setup, file it as a bug with:
- version
- exact bad payloads (
command:""andallowOnce:true) - the prompt that triggered it
Issues: https://github.com/openclaw/openclaw/issues
If you paste Terryâs relevant agent instructions, I can help spot the bit thatâs nudging it into bogus exec calls.
fsad
Looks like that may have been a stray message đ
If you want to keep going, paste Terryâs agent instructions or the exact prompt that triggers the bad exec call, and Iâll help narrow it down.
Totally fair.
Donât paste the whole file, just the relevant bits.
If you can, paste only lines mentioning:
execapproveallowOnceallowAlwaysshellcommandtool
A quick way is:
grep -nEi 'exec|approve|allowOnce|allowAlways|shell|command|tool' AGENTS.md
If Terry has a custom agent file somewhere else, run it there instead.
Also useful, if you have it:
- Terryâs model config
- any custom instructions about âapprove automaticallyâ, ârun shell commandsâ, or âuse execâ
Even 20 to 40 lines around the suspicious parts is enough.
grep -nEi 'exec|approve|allowOnce|allowAlways|shell|command|tool' AGENTS.md
đïž AGENTS.md - THE NINE-NINE DEVOPS COMMAND CENTER
- Workflow: Signs off on Latrell's tests. Must approve all Nginx and Docker configs.
- Equipment: self-improving-agent (Cleaning up MEMORY.md), Shell commands (Log Rotation).
- Camacho executes the "Heavy Lift" (The Code).
- Visible Reasoning: Don't use hidden "thought" blocks for logic. Show hypotheses, evidence, tradeoffs, and commands in the ticket.
- Command Discipline: Record exact shell commands used in the ticket log.
đ RED LINES (THE COMMANDMENTS)
- If a tool outputs an error, report the error ONCE. Do not summarize it three times.
- ONE ACTION PER MESSAGE: To prevent Slack spam, each agent must perform ONE major tool call or response per turn. Do not stack 3-4 commands in one bubble.
- Execution Power (1-5): Full code? No laziness?
- Signal Quality (1-5): Were the logs and commands clear?
Yeah, this snippet doesnât jump out as the cause.
I donât see anything there that would explain:
command: ""- or the model inventing
allowOnce: true
So my read now is:
- Slack approvals are fixed (
pwdproved that) - AGENTS.md probably isnât the main culprit
- the remaining suspects are:
- Terryâs model override / tool-calling quality
- a real bug/regression in the tool-call generation path
At this point Iâd do one last split test:
- run the same âbigger commandâ prompt on a plain/default agent
- if default agent works, Terryâs model/config is the difference
- if default agent also emits empty/invalid exec params, Iâd call it a bug
Honestly, with what youâve already isolated, you probably have a pretty solid bug report now:
pwdworks and shows Slack approval buttons- Slack
execApprovalsconfig is correct - larger requests sometimes emit invalid exec payloads like:
command: ""allowOnce: true
Issue link: https://github.com/openclaw/openclaw/issues
Short workaround for now: ask for the exact command you want run, instead of asking Terry to âpick a bigger commandâ. That seems to stay on the rails better.
i put htis in .env, do you see any issues?
LLM_TIMEOUT=600000
OLLAMA_TIMEOUT=600000
LANE_TASK_TIMEOUT=600000
I donât think those are helping.
I canât find LLM_TIMEOUT, OLLAMA_TIMEOUT, or LANE_TASK_TIMEOUT in the current OpenClaw docs/code, so Iâd assume theyâre ignored/no-ops in current builds.
More importantly, they also donât match the failure you isolated:
pwdworks- Slack approval buttons work
- the bad cases are malformed tool calls like
command: ""orallowOnce: true
So this does not look like a timeout issue.
My take:
- those
.envvars are probably harmless, but not fixing anything - the real issue is still the agent/model generating bad
execparams
If you want to verify current supported timeout knobs, check:
- https://docs.openclaw.ai/gateway/configuration-reference
- or run
openclaw config schema | rg timeout
But for this specific bug, I wouldnât chase timeout settings further.
Yep, that issue looks like the right place for it.
From everything you isolated, Iâd summarize it as:
- Slack approval buttons are working
- the real failure is malformed tool calls on longer requests
- and it smells a lot like local/Ollama tool-calling drift, not the approval UI itself
Your temp workaround is probably:
- keep the AGENTS guardrail
For exec, always provide a non-empty command stringNever include allowOnce/allowAlways in tool params
- ask for more explicit commands instead of âpick a bigger commandâ
If you want to strengthen the bug report a bit more, the most useful extra detail would be:
- one exact model name
- one minimal prompt that fails consistently
That would make it much easier for maintainers to reproduce.
even with guardrails, i still get this:
01:41:59+00:00 info gateway/ws {"subsystem":"gateway/ws"} â res â sessions.resolve 3ms errorCode=INVALID_REQUEST errorMessage=No session found: U05TZU51VC1 conn=afc8385aâŠ5206 id=6142f941âŠb48b
01:41:59+00:00 info gateway/ws {"subsystem":"gateway/ws"} â res â sessions.resolve 7ms errorCode=INVALID_REQUEST errorMessage=No session found: U05TZU51VC1 conn=cbf1f13dâŠac4a id=e10c5661âŠdeb2
Yeah, this is a second smoking gun.
That log means something is still trying to do:
sessions.resolve("U05TZU51VC1")
and that will always fail, because U05TZU51VC1 is a Slack user ID, not an OpenClaw sessionKey.
So now youâve got two separate bad tool patterns showing up:
- malformed
execcalls (command: "",allowOnce: true) - bad session routing (
sessions.resolveon a Slack user ID)
If you have any custom prompt/tool instructions, add this explicitly:
- Never use a Slack user ID as a session key
- Use
sessions_sendonly with a real OpenClawsessionKeyfromsessions_list