openclaw - 💡(How to fix) Fix [Bug]: Cron exec approval regression in 2026.3.31: previously working scheduled jobs now require/lose approvals; control UI returns “unknown or expired approval id” [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#59237Fetched 2026-04-08 02:27:06
View on GitHub
Comments
1
Participants
2
Timeline
7
Reactions
1
Author
Participants
Timeline (top)
labeled ×2subscribed ×2closed ×1commented ×1

After updating to OpenClaw 2026.3.31, previously working cron jobs that rely on shell/exec-based CLIs started failing or degrading.

This had been working normally a couple of days earlier.

Error Message

gog gmail send --from "[email protected]"
--to [email protected]
--subject "Cron test"
--account [email protected]
--body "test"

Expected behavior

Expected behavior

Cron jobs that were previously working should continue to run unattended after upgrade, including jobs that invoke shell/exec-based CLIs such as gog, bird, curl, and python3.

Specifically:

  • scheduled jobs should complete normally without newly requiring manual babysitting
  • if approval is required, the approval request should remain valid long enough to approve
  • approving from the Control UI should succeed reliably
  • Allow once / Always allow should actually permit the pending command to run
  • the same cron job should not degrade into fallback text, “prepared but not sent,” or partial completion when the underlying CLI command is otherwise valid
  • behavior should be at least as permissive/reliable as it was before the recent update

In short: previously working automations should keep working, and the approval system should be reliable when approval is needed.

Actual behavior

Actual behavior

After updating, previously working cron jobs that rely on shell/exec-based commands no longer run reliably.

Observed behaviors include:

  • cron jobs unexpectedly require exec approval where they previously ran unattended
  • approving from the Control UI can fail with:
    • GatewayRequestError: unknown or expired approval id
  • jobs that should send email sometimes stop at a prepared/degraded state instead of actually sending
  • jobs that depend on shell tools like gog, bird, curl, or python3 can partially fail even though those same commands still work when run manually in Terminal
  • some jobs emit fallback/apology text (for example saying direct scan/send was unavailable) instead of completing the task
  • overall, scheduled automations that worked a couple of days earlier now require manual intervention or fail to complete

OpenClaw version

2026.3.31

Operating system

macOS Tahoe 26.3.1

Install method

Install method Homebrew / npm global install on macOS, with the gateway managed as a LaunchAgent (non-Docker setup).

Model

gpt-5.4

Provider / routing chain

Cron → isolated session → exec/shell → local CLI tools (gog, bird, curl, python3) → external services; approvals via Control UI.

Additional provider/model setup details

Additional provider / model setup details

  • Main assistant model configured in OpenClaw
  • Cron jobs run in isolated sessions
  • Affected jobs use local shell/exec-based CLI tools (gog, bird, curl, python3)
  • The issue does not appear to depend on a specific external provider API, because the same underlying CLI commands still work when run manually in Terminal
  • This looks like an OpenClaw exec/approval/runtime issue rather than a Gmail/Twitter/Reddit API configuration problem

Models included sonnet 4.6, gemini flash, and qwen 3.5

Logs, screenshots, and evidence

Root Cause

DMARC Check

  • cron job runs gog gmail messages search/get/attachment/...
  • failed because shell commands could not run under current approval behavior

Code Example

gog gmail send --from "[email protected]" \
  --to you@example.com \
  --subject "Cron test" \
  --account your.account@example.com \
  --body "test"

### Expected behavior

## Expected behavior

Cron jobs that were previously working should continue to run unattended after upgrade, including jobs that invoke shell/exec-based CLIs such as `gog`, `bird`, `curl`, and `python3`.

Specifically:

- scheduled jobs should complete normally without newly requiring manual babysitting
- if approval is required, the approval request should remain valid long enough to approve
- approving from the Control UI should succeed reliably
- `Allow once` / `Always allow` should actually permit the pending command to run
- the same cron job should not degrade into fallback text, “prepared but not sent,” or partial completion when the underlying CLI command is otherwise valid
- behavior should be at least as permissive/reliable as it was before the recent update

In short: previously working automations should keep working, and the approval system should be reliable when approval is needed.

### Actual behavior

## Actual behavior

After updating, previously working cron jobs that rely on shell/exec-based commands no longer run reliably.

Observed behaviors include:

- cron jobs unexpectedly require exec approval where they previously ran unattended
- approving from the Control UI can fail with:
  - `GatewayRequestError: unknown or expired approval id`
- jobs that should send email sometimes stop at a prepared/degraded state instead of actually sending
- jobs that depend on shell tools like `gog`, `bird`, `curl`, or `python3` can partially fail even though those same commands still work when run manually in Terminal
- some jobs emit fallback/apology text (for example saying direct scan/send was unavailable) instead of completing the task
- overall, scheduled automations that worked a couple of days earlier now require manual intervention or fail to complete

### OpenClaw version

2026.3.31

### Operating system

macOS Tahoe 26.3.1

### Install method

## Install method  Homebrew / npm global install on macOS, with the gateway managed as a LaunchAgent (non-Docker setup).

### Model

gpt-5.4

### Provider / routing chain

Cron → isolated session → exec/shell → local CLI tools (`gog`, `bird`, `curl`, `python3`) → external services; approvals via Control UI.

### Additional provider/model setup details

## Additional provider / model setup details

- Main assistant model configured in OpenClaw
- Cron jobs run in isolated sessions
- Affected jobs use local shell/exec-based CLI tools (`gog`, `bird`, `curl`, `python3`)
- The issue does not appear to depend on a specific external provider API, because the same underlying CLI commands still work when run manually in Terminal
- This looks like an OpenClaw exec/approval/runtime issue rather than a Gmail/Twitter/Reddit API configuration problem

Models included sonnet 4.6, gemini flash, and qwen 3.5

### Logs, screenshots, and evidence
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

Summary

After updating to OpenClaw 2026.3.31, previously working cron jobs that rely on shell/exec-based CLIs started failing or degrading.

This had been working normally a couple of days earlier.

Version

  • OpenClaw 2026.3.31 (213a704)

Previously observed in this same environment:

  • OpenClaw 2026.3.28

Expected behavior

Scheduled cron jobs that previously ran successfully should continue to run unattended, including jobs that use shell-based CLIs such as:

  • gog gmail ...
  • bird search ...
  • curl ...
  • python3 ...

If approval is required, the approval flow should work reliably.

Actual behavior

1) Cron jobs now hit exec approval problems

Examples from my own jobs:

  • Morning To-Do email did not send automatically
  • DMARC cron could not process reports
  • Hot Topics briefing could not run bird searches and sent a degraded fallback email instead

Example system message:

The exec tool requires approval in Discord-channel contexts. Let me spawn a subagent to handle the send.

Another example:

The bird CLI requires interactive shell approval in scheduled cron runs. Direct scan unavailable today...

2) Control UI approval flow appears broken/intermittent

When attempting to approve pending exec commands from the control UI, approval can fail with:

Exec approval failed: GatewayRequestError: unknown or expired approval id

We also saw direct tool responses like:

unknown or expired approval id

This makes it impossible to reliably approve and run the blocked commands through the normal UI flow.

Why this looks like a regression

These automations had been working for weeks, and specifically were still working a couple of days earlier.

The underlying CLIs themselves still work when run manually in Terminal. For example:

  • gog gmail messages search ... succeeds manually
  • email sends succeed manually once the command is run directly

So this does not appear to be a gog auth/config failure. It looks like an OpenClaw exec/approval/runtime regression affecting cron jobs.

Concrete affected workflows

Morning To-Do Reminder

  • cron job reads todo.md
  • sends Telegram + email
  • email path started requiring exec approval unexpectedly

DMARC Check

  • cron job runs gog gmail messages search/get/attachment/...
  • failed because shell commands could not run under current approval behavior

Hot Topics Briefing

  • cron job uses bird search, curl, etc.
  • X/Twitter scan failed because bird required interactive shell approval in cron

Environment

  • macOS
  • Gateway managed via LaunchAgent
  • non-Docker install
  • jobs run in cron isolated sessions

Request

Please investigate whether 2026.3.31 changed:

  • exec approval behavior for cron/isolated sessions
  • approval routing/inheritance for scheduled jobs
  • control UI approval token handling / expiration
  • background/cron handling of shell-based CLI commands

Even if stricter approval behavior is intentional, the current experience seems broken because:

  1. previously working unattended jobs regress
  2. approval ids can fail as unknown/expired
  3. cron jobs degrade into partial completion or fallback text instead of completing reliably

Steps to reproduce

Steps to reproduce

  1. Install or update OpenClaw to 2026.3.31.
  2. Configure a cron job that runs in an isolated session and uses shell/exec-based commands, for example:
    • gog gmail send ...
    • gog gmail messages search ...
    • bird search ...
    • curl ...
    • python3 ...
  3. Let the cron job fire normally, or trigger it manually if you have a safe equivalent.
  4. Observe that the job no longer completes unattended as it previously did.
  5. When OpenClaw requests exec approval, try approving it from the Control UI.
  6. Observe that approval may fail with:
    • GatewayRequestError: unknown or expired approval id
    • or equivalent unknown or expired approval id errors
  7. If you run the same underlying CLI command manually in Terminal outside the cron/approval flow, observe that it succeeds.

Minimal concrete examples

Example A: email send via gog

Create a cron job whose payload includes something like:

gog gmail send --from "[email protected]" \
  --to [email protected] \
  --subject "Cron test" \
  --account [email protected] \
  --body "test"

### Expected behavior

## Expected behavior

Cron jobs that were previously working should continue to run unattended after upgrade, including jobs that invoke shell/exec-based CLIs such as `gog`, `bird`, `curl`, and `python3`.

Specifically:

- scheduled jobs should complete normally without newly requiring manual babysitting
- if approval is required, the approval request should remain valid long enough to approve
- approving from the Control UI should succeed reliably
- `Allow once` / `Always allow` should actually permit the pending command to run
- the same cron job should not degrade into fallback text, “prepared but not sent,” or partial completion when the underlying CLI command is otherwise valid
- behavior should be at least as permissive/reliable as it was before the recent update

In short: previously working automations should keep working, and the approval system should be reliable when approval is needed.

### Actual behavior

## Actual behavior

After updating, previously working cron jobs that rely on shell/exec-based commands no longer run reliably.

Observed behaviors include:

- cron jobs unexpectedly require exec approval where they previously ran unattended
- approving from the Control UI can fail with:
  - `GatewayRequestError: unknown or expired approval id`
- jobs that should send email sometimes stop at a prepared/degraded state instead of actually sending
- jobs that depend on shell tools like `gog`, `bird`, `curl`, or `python3` can partially fail even though those same commands still work when run manually in Terminal
- some jobs emit fallback/apology text (for example saying direct scan/send was unavailable) instead of completing the task
- overall, scheduled automations that worked a couple of days earlier now require manual intervention or fail to complete

### OpenClaw version

2026.3.31

### Operating system

macOS Tahoe 26.3.1

### Install method

## Install method  Homebrew / npm global install on macOS, with the gateway managed as a LaunchAgent (non-Docker setup).

### Model

gpt-5.4

### Provider / routing chain

Cron → isolated session → exec/shell → local CLI tools (`gog`, `bird`, `curl`, `python3`) → external services; approvals via Control UI.

### Additional provider/model setup details

## Additional provider / model setup details

- Main assistant model configured in OpenClaw
- Cron jobs run in isolated sessions
- Affected jobs use local shell/exec-based CLI tools (`gog`, `bird`, `curl`, `python3`)
- The issue does not appear to depend on a specific external provider API, because the same underlying CLI commands still work when run manually in Terminal
- This looks like an OpenClaw exec/approval/runtime issue rather than a Gmail/Twitter/Reddit API configuration problem

Models included sonnet 4.6, gemini flash, and qwen 3.5

### Logs, screenshots, and evidence

```shell

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

The most likely fix for the regression issue in OpenClaw 2026.3.31 is to investigate and adjust the exec approval behavior for cron/isolated sessions, approval routing/inheritance for scheduled jobs, and control UI approval token handling.

Guidance

  1. Investigate exec approval behavior: Check if the update to OpenClaw 2026.3.31 introduced stricter approval requirements for cron jobs and isolated sessions.
  2. Verify approval routing and inheritance: Ensure that scheduled jobs are properly inheriting approval settings and that the approval flow is working as expected.
  3. Adjust control UI approval token handling: Look into the approval token expiration and handling in the Control UI to prevent "unknown or expired approval id" errors.
  4. Test cron jobs with shell/exec-based commands: Validate that cron jobs using shell/exec-based commands, such as gog, bird, curl, and python3, are working as expected after making adjustments.

Example

No specific code example is provided, as the issue seems to be related to the configuration and behavior of OpenClaw rather than a specific code snippet.

Notes

The issue appears to be specific to the OpenClaw 2026.3.31 update and may require adjustments to the exec approval behavior, approval routing, and control UI approval token handling. Further investigation and testing are necessary to determine the root cause and implement a fix.

Recommendation

Apply a workaround by adjusting the exec approval behavior and approval routing for scheduled jobs, and investigate the control UI approval token handling to prevent errors. This approach is recommended because it addresses the potential causes of the regression issue and allows for a more targeted fix.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Cron jobs that were previously working should continue to run unattended after upgrade, including jobs that invoke shell/exec-based CLIs such as gog, bird, curl, and python3.

Specifically:

  • scheduled jobs should complete normally without newly requiring manual babysitting
  • if approval is required, the approval request should remain valid long enough to approve
  • approving from the Control UI should succeed reliably
  • Allow once / Always allow should actually permit the pending command to run
  • the same cron job should not degrade into fallback text, “prepared but not sent,” or partial completion when the underlying CLI command is otherwise valid
  • behavior should be at least as permissive/reliable as it was before the recent update

In short: previously working automations should keep working, and the approval system should be reliable when approval is needed.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Bug]: Cron exec approval regression in 2026.3.31: previously working scheduled jobs now require/lose approvals; control UI returns “unknown or expired approval id” [1 comments, 2 participants]