openclaw - 💡(How to fix) Fix config patch should return deterministic reload/apply status

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…

openclaw config patch / config set / gateway config.patch should return deterministic, machine-readable feedback about whether a config change is active in the running gateway.

Today the operator/agent often sees generic text such as Restart the gateway to apply. and then has to infer the real state by reading logs, checking health, or restarting defensively.

Error Message

That ambiguity caused avoidable churn during a 2026.5.18 troubleshooting session: the agent could not tell whether message/tool-error config changes were live, whether they needed a restart, or whether the restart instruction was only conservative CLI copy.

Root Cause

OpenClaw agents are now first-class operators of OpenClaw itself. They need deterministic config feedback so they do not guess, restart unnecessarily, or tell users a setting is active when it is only written to disk.

The core ask: after a config write, expose reload done / restart required / reload failed as an explicit contract, not something inferred from logs.

Fix Action

Fix / Workaround

openclaw config patch / config set / gateway config.patch should return deterministic, machine-readable feedback about whether a config change is active in the running gateway.

A user asks an OpenClaw agent to change config. The agent applies a patch and gets generic restart guidance. The system is deterministic, but the feedback exposed to the agent/user is not deterministic enough, so the agent cannot confidently say one of these:

Code Example

{
  "ok": true,
  "writeId": "cfg_...",
  "changedPaths": ["messages.suppressToolErrors"],
  "reloadPlan": [
    {
      "path": "messages.suppressToolErrors",
      "reloadKind": "hot"
    }
  ],
  "apply": {
    "configWrite": "done",
    "hotReload": "done",
    "restartRequired": false,
    "restartReasons": []
  },
  "effectiveRuntime": {
    "verified": true,
    "checkedAt": "2026-05-19T01:xx:xxZ"
  }
}

---

Applied 1 config update.
Reload: hot reload done.
Effective now: yes.
Restart required: no.

---

Applied 1 config update.
Reload: not applied to running gateway.
Restart required: yes (gateway.handshakeTimeoutMs).
Effective now: no.
RAW_BUFFERClick to expand / collapse

Summary

openclaw config patch / config set / gateway config.patch should return deterministic, machine-readable feedback about whether a config change is active in the running gateway.

Today the operator/agent often sees generic text such as Restart the gateway to apply. and then has to infer the real state by reading logs, checking health, or restarting defensively.

Why this is distinct from #81409

#81409 and merged PR #81612 add reloadKind metadata to config.schema.lookup, which is useful before making a change.

This request is about the post-apply acknowledgement after the write/reload actually happens:

  • Was the config written to disk?
  • Did the gateway see the change?
  • Was hot reload attempted?
  • Did hot reload complete?
  • Is a gateway restart still required?
  • Which exact paths/reasons caused that status?

Current operator failure mode

A user asks an OpenClaw agent to change config. The agent applies a patch and gets generic restart guidance. The system is deterministic, but the feedback exposed to the agent/user is not deterministic enough, so the agent cannot confidently say one of these:

  • config write done; hot reload done; effective now
  • config write done; reload not applicable; restart required
  • config write done; hot reload failed/deferred; restart required
  • config write rejected; runtime unchanged

That ambiguity caused avoidable churn during a 2026.5.18 troubleshooting session: the agent could not tell whether message/tool-error config changes were live, whether they needed a restart, or whether the restart instruction was only conservative CLI copy.

Suggested response shape

For --json CLI output and gateway RPC responses, return something like:

{
  "ok": true,
  "writeId": "cfg_...",
  "changedPaths": ["messages.suppressToolErrors"],
  "reloadPlan": [
    {
      "path": "messages.suppressToolErrors",
      "reloadKind": "hot"
    }
  ],
  "apply": {
    "configWrite": "done",
    "hotReload": "done",
    "restartRequired": false,
    "restartReasons": []
  },
  "effectiveRuntime": {
    "verified": true,
    "checkedAt": "2026-05-19T01:xx:xxZ"
  }
}

For human CLI output, make the terminal state explicit:

Applied 1 config update.
Reload: hot reload done.
Effective now: yes.
Restart required: no.

or:

Applied 1 config update.
Reload: not applied to running gateway.
Restart required: yes (gateway.handshakeTimeoutMs).
Effective now: no.

Why this matters

OpenClaw agents are now first-class operators of OpenClaw itself. They need deterministic config feedback so they do not guess, restart unnecessarily, or tell users a setting is active when it is only written to disk.

The core ask: after a config write, expose reload done / restart required / reload failed as an explicit contract, not something inferred from logs.

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…

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 config patch should return deterministic reload/apply status