#telegram unrecognized key

1 messages ยท Page 1 of 1 (latest)

prime seal
#

8:24:03 AM
error
Gateway service check failed: Error: systemctl is-enabled unavailable: Failed to connect to bus: No medium found
Gateway service check failed: Error: systemctl is-enabled unavailable: Failed to connect to bus: No medium found
8:27:05 AM
error
Config invalid
Config invalid
8:27:05 AM
error
File: ~/.openclaw/openclaw.json
File: ~/.openclaw/openclaw.json
8:27:05 AM
error
Problem:
Problem:
8:27:05 AM
error

  • messages.groupChat: Unrecognized key: "visibleReplies"
  • channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
  • channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
  • plugins: Unrecognized key: "bundledDiscovery"
    8:27:05 AM
    error
    8:27:05 AM
    error
    Run: openclaw doctor --fix
    Run: openclaw doctor --fix
    8:27:05 AM
    error
    Gateway service check failed: Error: systemctl is-enabled unavailable: Failed to connect to bus: No medium found
gloomy pikeBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> โœ… Mark Solution

open lanternBOT
# prime seal 8:24:03 AM error Gateway service check failed: Error: systemctl is-enabled unava...

This looks like a version/config mismatch first, not a Telegram-specific failure.

Please run this first and paste it:

openclaw --version
openclaw config validate

Why: current docs/source include messages.groupChat.visibleReplies, plugins.bundledDiscovery, and the newer Telegram streaming object shape. Your installed OpenClaw is rejecting those, which usually means the config was written/generated by a newer OpenClaw than the one currently running.

Fast repair path:

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.before-fix
openclaw doctor --fix
open lanternBOT
# prime seal 8:24:03 AM error Gateway service check failed: Error: systemctl is-enabled unava...
openclaw config validate

If doctor --fix still rejects it, either update OpenClaw and rerun the same commands, or temporarily edit the config back to the older shape:

  • remove messages.groupChat.visibleReplies
  • remove plugins.bundledDiscovery
  • change each Telegram account streaming value to a scalar like "partial" or "off", not { "mode": "partial" }

Example older shape:

{
  "channels": {
    "telegram": {
      "accounts": {
open lanternBOT
# prime seal 8:24:03 AM error Gateway service check failed: Error: systemctl is-enabled unava...
        "default": {
          "streaming": "partial"
        }
      }
    }
  }
}

The systemctl is-enabled unavailable: Failed to connect to bus: No medium found line is separate: it means this environment probably does not have a working user systemd bus, common in containers/WSL/some VPS sessions. Get config validation passing first; then if service status still fails, run the gateway in the foreground or fix the supervisor/systemd environment.

Relevant docs:
https://docs.openclaw.ai/help/faq
https://docs.openclaw.ai/channels/telegram
https://docs.openclaw.ai/channels/groups
https://docs.openclaw.ai/cli/doctor

prime seal
#

doctor --fix nothing.

any cli to remove them?

open lanternBOT
# prime seal doctor --fix nothing. any cli to remove them?

Yep. Use openclaw config unset for the unknown keys, and config set to rewrite the Telegram streaming values to the scalar format your installed version accepts.

Make a backup first:

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.before-key-cleanup

Then:

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery

openclaw config set channels.telegram.accounts.default.streaming partial
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming partial
open lanternBOT
# prime seal doctor --fix nothing. any cli to remove them?

openclaw config validate

If you want streaming disabled instead:

openclaw config set channels.telegram.accounts.default.streaming off
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming off

If config unset refuses because the full config is already invalid, use the config file path and edit those four entries directly:

openclaw config file
open lanternBOT
open lanternBOT
prime seal
#

File: ~/.openclaw/openclaw.json
there's where my file located, the openclaw config validate returns a config valid.

open lanternBOT
# prime seal File: ~/.openclaw/openclaw.json there's where my file located, the openclaw conf...

Good, that narrows it down: the file itself now validates. If the gateway still prints the old โ€œConfig invalidโ€ errors, it is probably one of these:

  1. The gateway process has not restarted and is still running with the old config.
  2. The gateway/service is using a different OpenClaw binary/version than your shell.
  3. The service is reading a different config path via OPENCLAW_CONFIG_PATH.

Run these and paste the output if it still fails:

openclaw --version
openclaw config file
openclaw gateway status
openclaw logs --tail 80

Since your earlier log had systemctl ... Failed to connect to bus, restart may not work through systemd in that environment. Try stopping any old gateway and starting it in the foreground once, so we see the real active config/error:

open lanternBOT
prime seal
#

I updated from 4.2 to 5.12, why the hell it's so damn slow? even entering cli in the command line, it takes over 1 minute for a single response while before it's like 1 second.

open lanternBOT
# prime seal I updated from 4.2 to 5.12, why the hell it's so damn slow? even entering cli in...

Yeah, one minute per CLI interaction is not normal. A big 4.2 โ†’ 5.12 jump can trigger migrations/repairs, but repeated slowness usually means startup is blocking on environment/plugin/service checks, or you are measuring agent/model latency rather than raw CLI startup.

First split the problem:

time openclaw --version
time openclaw config validate
time openclaw status

If --version itself takes ~60s, that is CLI startup/environment. Check the binary and Node path:

which openclaw
node --version
npm prefix -g
open lanternBOT
open lanternBOT
# prime seal I updated from 4.2 to 5.12, why the hell it's so damn slow? even entering cli in...
export NODE_COMPILE_CACHE=/var/tmp/openclaw-compile-cache

Docs mention this for VPS installs: https://docs.openclaw.ai/vps

If --version is fast but openclaw status / chat replies are slow, then it is likely gateway/service health or an agent/model issue. Run:

openclaw doctor
openclaw logs --tail 120
openclaw gateway status

Also, because you had systemctl ... Failed to connect to bus earlier, Iโ€™m suspicious the installed service is unhealthy and every command is waiting on a gateway/service probe. If logs show stale local TUI/event-loop warnings, openclaw doctor --fix is the documented cleanup path for that specific case.

prime seal
#

ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery

openclaw config set channels.telegram.accounts.default.streaming partial
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming partial

๐Ÿฆž OpenClaw 2026.5.12 (f066dd2)
I run on caffeine, JSON5, and the audacity of "it worked on my machine."

Config overwrite: /home/ace/.openclaw/openclaw.json (sha256 5640edb77e77119ede1ca103ad729afa233b15ef81f0d8b8bec4534a6a726ed3 -> 164efbe548746cadf301399dbc5554efb25440594329f2292026c3d40fc16d66, backup=/home/ace/.openclaw/openclaw.json.bak)
Removed messages.groupChat.visibleReplies. Restart the gateway to apply.

๐Ÿฆž OpenClaw 2026.5.12 (f066dd2)
More integrations than your therapist's intake form.

Config overwrite: /home/ace/.openclaw/openclaw.json (sha256 164efbe548746cadf301399dbc5554efb25440594329f2292026c3d40fc16d66 -> 16bcb514828f2f4fbd329917cfc813f6d8fdaeb695f87e54a8f04f0955e4fae8, backup=/home/ace/.openclaw/openclaw.json.bak)
Removed plugins.bundledDiscovery. Restart the gateway to apply.

๐Ÿฆž OpenClaw 2026.5.12 (f066dd2)
I'm like tmux: confusing at first, then suddenly you can't live without me.

Error: Config validation failed: channels.telegram.accounts.default.streaming: invalid config: must be object

๐Ÿฆž OpenClaw 2026.5.12 (f066dd2) โ€” Making 'I'll automate that later' happen now.

Error: Config validation failed: channels.telegram.accounts.collaboration-specialist.streaming: invalid config: must be object
ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$

open lanternBOT
# prime seal ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ openclaw config unset messages.grou...

Yep, that output proves your active CLI is 5.12 and wants the newer object form. My earlier scalar fallback was for the older validator path, so ignore that part.

Set it like this:

openclaw config set channels.telegram.accounts.default.streaming '{"mode":"partial"}' --strict-json
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming '{"mode":"partial"}' --strict-json

openclaw config validate

Or to disable preview streaming:

openclaw config set channels.telegram.accounts.default.streaming '{"mode":"off"}' --strict-json
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming '{"mode":"off"}' --strict-json
open lanternBOT
prime seal
#

how to identify what files it runs in the background, or run periodically, cause previously I recall, the openclaw periodically loads up the sessions list and it took 60s for that, delaying on every single response.

open lanternBOT
open lanternBOT
# prime seal how to identify what files it runs in the background, or run periodically, cause...
~/.openclaw/agents/<agentId>/sessions/sessions.json
~/.openclaw/agents/<agentId>/sessions/
~/.openclaw/cron/jobs.json
~/.openclaw/cron/jobs-state.json
$OPENCLAW_STATE_DIR/tasks/runs.sqlite

A few important distinctions:

  • cron is the scheduler. Every cron execution creates a task record.
  • heartbeat is the periodic main-session turn. It reads HEARTBEAT.md and does not create task records. Empty/comment-only HEARTBEAT.md should skip model calls.
  • background exec sessions are in memory, not persisted to disk; they disappear on gateway restart unless represented by a higher-level task.
  • the session index is sessions.json; if listing sessions takes 60s, that file/store is the first thing Iโ€™d inspect.

For the session-list slowdown specifically, try:

open lanternBOT
# prime seal how to identify what files it runs in the background, or run periodically, cause...
openclaw sessions --all-agents --verbose
openclaw sessions cleanup --all-agents --dry-run
ls -lh ~/.openclaw/agents/*/sessions/sessions.json

If cleanup shows a huge number of stale entries, donโ€™t manually delete first; use the cleanup command with --dry-run to see what it would prune. Docs: https://docs.openclaw.ai/automation/tasks, https://docs.openclaw.ai/automation/cron-jobs, https://docs.openclaw.ai/gateway/health, https://docs.openclaw.ai/cli/sessions

prime seal
#

Openclaw 2026.5.12 (f066dd2)

I knew there are bugs on every updates....

open lanternBOT
# prime seal Openclaw 2026.5.12 (f066dd2) I knew there are bugs on every updates....

Yeah, thatโ€™s frustrating. For 2026.5.12 (f066dd2), Iโ€™d treat the 60s session-list delay as either a bloated/corrupt session store or a live gateway operation blocking on session/task reconciliation.

Can you run these and paste the output? Theyโ€™re read-only:

time openclaw status --all
time openclaw sessions --all-agents --verbose
openclaw tasks audit
openclaw tasks list --status running
openclaw cron status
openclaw cron list
openclaw system heartbeat last
ls -lh ~/.openclaw/agents/*/sessions/sessions.json 2>/dev/null

If openclaw sessions --all-agents --verbose is the slow one, then check cleanup preview:

open lanternBOT
# prime seal Openclaw 2026.5.12 (f066dd2) I knew there are bugs on every updates....
openclaw sessions cleanup --all-agents --dry-run

I would not delete files manually yet. If cleanup says there are tons of stale entries, use the cleanup path first; if it shows a small store but still takes 60s, thatโ€™s more likely a bug worth filing with the command timings and openclaw status --all output: https://github.com/openclaw/openclaw/issues

Relevant docs:
https://docs.openclaw.ai/cli/sessions
https://docs.openclaw.ai/automation/tasks
https://docs.openclaw.ai/gateway/health

prime seal
#

ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ time openclaw config validate

๐Ÿฆž OpenClaw 2026.5.12 (f066dd2)
I'll butter your workflow like a lobster roll: messy, delicious, effective.

Config valid: ~/.openclaw/openclaw.json

real 0m18.594s
user 0m15.193s
sys 0m6.732s

error still persists
21:03 PM
error
Config invalid
Config invalid
3:21:03 PM
error
File: ~/.openclaw/openclaw.json
File: ~/.openclaw/openclaw.json
3:21:03 PM
error
Problem:
Problem:
3:21:03 PM
error

  • messages.groupChat: Unrecognized key: "visibleReplies"
  • channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
  • channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
  • plugins: Unrecognized key: "bundledDiscovery"
    3:21:03 PM
    error
    3:21:03 PM
    error
    Run: openclaw doctor --fix
    Run: openclaw doctor --fix
    3:21:03 PM
    error
    Gateway service check failed: Error: systemctl is-enabled unavailable: Failed to connect to bus: No medium found
open lanternBOT
# prime seal ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ time openclaw config validate ๐Ÿฆž O...

That output points to a version/runtime mismatch, not just a bad config file.

Your shell command says config validate is valid, but the running gateway is still using a schema that rejects these exact keys. Also, plugin config changes require a gateway restart, and your machine canโ€™t talk to systemd:

systemctl is-enabled unavailable: Failed to connect to bus: No medium found

So the daemon/service restart path probably is not actually controlling the gateway.

For those specific config errors:

messages.groupChat.visibleReplies        // remove this
plugins.bundledDiscovery                 // remove this
channels.telegram.accounts.*.streaming   // use true/false/"off"/"partial"/"block"/"progress" for this running version
open lanternBOT
open lanternBOT
# prime seal ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ time openclaw config validate ๐Ÿฆž O...
openclaw gateway status --deep
ps -ef | rg 'openclaw|clawdbot|node .*openclaw'

If it is just a foreground/background process, stop that process and start it again manually. If it is launch/pm2/tmux/etc, restart that owner instead. After restart, verify the gateway and CLI agree:

openclaw --version
openclaw config validate
openclaw status --all

If the gateway still reports those old validation errors after restart, paste which -a openclaw and the matching ps -ef ... line. That will tell us if two installs are fighting each other. Docs: https://docs.openclaw.ai/gateway/configuration, https://docs.openclaw.ai/gateway/troubleshooting

prime seal
#

give me the CLI

open lanternBOT
# prime seal give me the CLI

Use this. It backs up config, removes the two stale keys, converts Telegram streaming: { mode: ... } to the scalar format, then validates.

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

node <<'NODE'
const fs = require('fs');
const path = require('path');
const file = path.join(process.env.HOME, '.openclaw/openclaw.json');
const cfg = JSON.parse(fs.readFileSync(file, 'utf8'));

if (cfg.messages?.groupChat) {
  delete cfg.messages.groupChat.visibleReplies;
}

if (cfg.plugins) {
open lanternBOT
# prime seal give me the CLI
  delete cfg.plugins.bundledDiscovery;
}

for (const account of Object.values(cfg.channels?.telegram?.accounts || {})) {
  if (account && typeof account.streaming === 'object' && !Array.isArray(account.streaming)) {
    account.streaming = account.streaming.mode ?? 'partial';
  }
}

fs.writeFileSync(file, JSON.stringify(cfg, null, 2) + '
');
NODE

openclaw config validate
open lanternBOT
# prime seal give me the CLI

Then restart the real gateway process. Since your systemctl path is broken, inspect what owns it:

which -a openclaw
openclaw gateway status --deep
ps -ef | grep -E 'openclaw|clawdbot|node .*openclaw' | grep -v grep

If it is a foreground/manual gateway, stop it with Ctrl-C and start it again. If it shows a stale background process, kill that specific PID and start the gateway again:

kill <PID>
openclaw gateway

After restart:

open lanternBOT
prime seal
open lanternBOT
# prime seal this cli too? the daemon related stuff?

Yep. For the daemon/runtime side, run this first:

which -a openclaw
openclaw --version
openclaw gateway status
openclaw gateway status --deep
ps -ef | grep -E 'openclaw|clawdbot|node .*openclaw' | grep -v grep

If gateway status shows systemd errors like No medium found, youโ€™re probably in an environment without a working user systemd bus. In that case, use manual gateway control for now:

# stop only the actual gateway PID you found from ps
kill <PID>
open lanternBOT
# prime seal this cli too? the daemon related stuff?
# start it manually in the foreground
openclaw gateway

If you want it to keep running after closing the terminal:

nohup openclaw gateway > ~/.openclaw/gateway.out 2>&1 &
tail -f ~/.openclaw/gateway.out

Then verify:

openclaw config validate
open lanternBOT
# prime seal this cli too? the daemon related stuff?
openclaw status --all
openclaw logs --follow

If you want to repair/reinstall the service later, try:

openclaw gateway uninstall
openclaw gateway install --force
openclaw gateway restart
openclaw gateway status --deep

But on your current machine, if systemd still says Failed to connect to bus: No medium found, the install/restart commands may not work until the user service environment is fixed.

prime seal
#

PID? dunno how to find that, any other way?

open lanternBOT
# prime seal PID? dunno how to find that, any other way?

Yep, use tools that find the PID for you.

First list candidates:

pgrep -af 'openclaw|clawdbot'
lsof -nP -iTCP:18789 -sTCP:LISTEN

If lsof shows something like:

COMMAND   PID USER ... TCP 127.0.0.1:18789 (LISTEN)
node    12345 ace  ...

then 12345 is the PID.

open lanternBOT
# prime seal PID? dunno how to find that, any other way?

To stop the process listening on the OpenClaw gateway port without manually copying the PID:

lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill

Then start fresh:

openclaw gateway

If it still says the port is busy, check again:

lsof -nP -iTCP:18789 -sTCP:LISTEN
open lanternBOT
# prime seal PID? dunno how to find that, any other way?

Only if it refuses to stop after a normal kill, use:

lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill -9

That targets only the process bound to the gateway port, which is safer than killing every Node/OpenClaw-ish process on the machine.

prime seal
#

what about just by its name? not the PID?

open lanternBOT
# prime seal what about just by its name? not the PID?

You can, but be careful: name-based killing can stop unrelated OpenClaw/Codex/node work.

Safer name-based options:

# show matches first
pkill -af --signal 0 'openclaw gateway'
pgrep -af 'openclaw gateway'

# stop only commands whose full command line includes "openclaw gateway"
pkill -f 'openclaw gateway'

If your gateway is running as a Node entrypoint and doesnโ€™t literally contain openclaw gateway, use the port method instead:

open lanternBOT
# prime seal what about just by its name? not the PID?
lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill

I prefer the port method here because it stops the thing actually serving the gateway, regardless of whether the process name is node, openclaw, or something service-wrapped.

prime seal
#

this is the steps?

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

node <<'NODE'
const fs = require('fs');
const path = require('path');
const file = path.join(process.env.HOME, '.openclaw/openclaw.json');
const cfg = JSON.parse(fs.readFileSync(file, 'utf8'));

if (cfg.messages?.groupChat) {
delete cfg.messages.groupChat.visibleReplies;
}

if (cfg.plugins) {
delete cfg.plugins.bundledDiscovery;
}

for (const account of Object.values(cfg.channels?.telegram?.accounts || {})) {
if (account && typeof account.streaming === 'object' && !Array.isArray(account.streaming)) {
account.streaming = account.streaming.mode ?? 'partial';
}
}

fs.writeFileSync(file, JSON.stringify(cfg, null, 2) + '
');
NODE

openclaw config validate

which -a openclaw
openclaw gateway status --deep
ps -ef | grep -E 'openclaw|clawdbot|node .*openclaw' | grep -v grep
pkill -af --signal 0 'openclaw gateway'
pgrep -af 'openclaw gateway'
openclaw gateway restart

open lanternBOT
# prime seal this is the steps? cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$...

Mostly, but Iโ€™d simplify it and use openclaw config unset/set instead of the Node edit. Your pasted Node snippet also broke the newline string, so skip that.

Run:

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery

openclaw config set channels.telegram.accounts.default.streaming partial
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming partial

openclaw config validate

Then restart the actual gateway. Since your systemd path looked broken, donโ€™t rely on openclaw gateway restart unless it actually works.

open lanternBOT
# prime seal this is the steps? cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$...

Use this safer restart:

# show what is listening on the gateway port
lsof -nP -iTCP:18789 -sTCP:LISTEN

# stop only the process bound to that port
lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill

# start gateway again
openclaw gateway

Notes:

  • pkill -af --signal 0 'openclaw gateway' only checks for matches; it does not stop anything.
  • pgrep -af 'openclaw gateway' is only for listing.
  • openclaw gateway restart is fine only if openclaw gateway status shows the service manager is actually working.
open lanternBOT
prime seal
#

I restarted the PC and here's a new list of errors.

[5/16/2026 3:34 PM] Ben: 3:33:03 PM
error
Run: openclaw doctor --fix
Run: openclaw doctor --fix
3:33:03 PM
error
Gateway service check failed: Error: systemctl is-enabled unavailable: Failed to connect to bus: No medium found
Gateway service check failed: Error: systemctl is-enabled unavailable: Failed to connect to bus: No medium found
3:33:26 PM
error
Config invalid
Config invalid
3:33:26 PM
error
File: ~/.openclaw/openclaw.json
File: ~/.openclaw/openclaw.json
3:33:26 PM
error
Problem:

open lanternBOT
# prime seal I restarted the PC and here's a new list of errors. [5/16/2026 3:34 PM] Ben: 3:...

The pasted config error is cut off right after Problem:, so I need the lines under that to know what remains.

Run these and paste the full output:

openclaw --version
openclaw config validate
openclaw config validate --json
openclaw gateway status --deep

The systemctl is-enabled unavailable: Failed to connect to bus: No medium found part is separate from the config error. It means OpenClawโ€™s service check canโ€™t talk to the user systemd bus on that machine/session. The gateway can still run manually, but daemon install/restart/status may be unreliable until that environment is fixed.

For now, after config validates, start manually:

open lanternBOT
open lanternBOT
prime seal
#

Problem:
3:33:26 PM
error

  • messages.groupChat: Unrecognized key: "visibleReplies"
  • channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
  • channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
  • plugins: Unrecognized key: "bundledDiscovery"
    3:33:26 PM
    error
    3:33:26 PM
    error
    Run: openclaw doctor --fix
    Run: openclaw doctor --fix
    3:33:36 PM
    error
    Service config looks out of date or non-standard.
    Service config looks out of date or non-standard.
    3:33:36 PM
    error
    Service config issue: Gateway service PATH missing required dirs: /home/ace/.volta/bin, /home/ace/.asdf/shims, /home/ace/.bun/bin, /home/ace/.nvm/current/bin, /home/ace/.fnm/current/bin
    3:33:36 PM
    error
    Recommendation: run "openclaw doctor" (or "openclaw doctor --repair").
    Recommendation: run "openclaw doctor" (or "openclaw doctor --repair").
    3:33:36 PM
    error
    Config issue: messages.groupChat: Unrecognized key: "visibleReplies"
    Config issue: messages.groupChat: Unrecognized key: "visibleReplies"
    3:33:36 PM
    error
    Config issue: channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
    3:33:36 PM
    error
#

Config issue: channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
3:33:36 PM
error
Config issue: plugins: Unrecognized key: "bundledDiscovery"
Config issue: plugins: Unrecognized key: "bundledDiscovery"

#

3:33:36 PM
error
Service config issue: messages.groupChat: Unrecognized key: "visibleReplies"
Service config issue: messages.groupChat: Unrecognized key: "visibleReplies"
3:33:36 PM
error
Service config issue: channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
3:33:36 PM
error
Service config issue: channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
3:33:36 PM
error
Service config issue: plugins: Unrecognized key: "bundledDiscovery"
Service config issue: plugins: Unrecognized key: "bundledDiscovery"
3:33:36 PM
error
RPC probe: failed
RPC probe: failed
3:33:36 PM
error
RPC target: ws://127.0.0.1:18789
RPC target: ws://127.0.0.1:18789
3:33:36 PM
error
gateway timeout after 10000ms
gateway timeout after 10000ms
3:33:36 PM
error
Gateway target: ws://127.0.0.1:18789
Gateway target: ws://127.0.0.1:18789
3:33:36 PM
error
Source: cli --url
Source: cli --url
3:33:36 PM
error
Config: /home/ace/.openclaw/openclaw.json
Config: /home/ace/.openclaw/openclaw.json
3:33:36 PM
error
Port 18789 is already in use.
Port 18789 is already in use.
3:33:36 PM

#

error

  • pid 1173 ace: /usr/bin/node /home/ace/.npm-global/lib/node_modules/openclaw/dist/index.js gateway --port 18789 (*:18789)
    3:33:36 PM
    error
  • Gateway already running locally. Stop it (openclaw gateway stop) or use a different port.
  • Gateway already running locally. Stop it (openclaw gateway stop) or use a different port.
    3:33:36 PM
    error
    Other gateway-like services detected (best effort):
    Other gateway-like services detected (best effort):
    3:33:36 PM
    error
  • agent-collab-hub.service (user, unit: /home/ace/.config/systemd/user/agent-collab-hub.service)
  • agent-collab-hub.service (user, unit: /home/ace/.config/systemd/user/agent-collab-hub.service)
    3:33:36 PM
    error
  • mission-control.service (user, unit: /home/ace/.config/systemd/user/mission-control.service)
  • mission-control.service (user, unit:
    [5/16/2026 3:34 PM] Ben: /home/ace/.config/systemd/user/mission-control.service)
    3:33:36 PM
    error
  • openclaw-heartbeat.service (user, unit: /home/ace/.config/systemd/user/openclaw-heartbeat.service)
  • openclaw-heartbeat.service (user, unit: /home/ace/.config/systemd/user/openclaw-heartbeat.service)
    3:33:36 PM
    error
    Cleanup hint: systemc
open lanternBOT
# prime seal Problem: 3:33:26 PM error - messages.groupChat: Unrecognized key: "visibleRepl...

Those are the same config keys, so the edit did not apply to the config file the gateway is reading, or the values did not get changed.

Run this exact sequence and paste any command that errors:

openclaw config file

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery

openclaw config set channels.telegram.accounts.default.streaming '"partial"' --strict-json
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming '"partial"' --strict-json

openclaw config get messages.groupChat --json
open lanternBOT
open lanternBOT
open lanternBOT
open lanternBOT
# prime seal Config issue: channels.telegram.accounts.collaboration-specialist.streaming: Inv...

For those two remaining lines, run just these:

openclaw config unset plugins.bundledDiscovery
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming '"partial"' --strict-json

openclaw config get plugins --json
openclaw config get channels.telegram.accounts.collaboration-specialist.streaming --json
openclaw config validate

If config get channels.telegram.accounts.collaboration-specialist.streaming --json does not print exactly:

"partial"
open lanternBOT
open lanternBOT
# prime seal 3:33:36 PM error Service config issue: messages.groupChat: Unrecognized key: "vi...

This output says three separate things:

  1. The config file still has the bad keys.
  2. A gateway process is already bound to port 18789.
  3. That process is not answering RPC, so it is probably wedged or starting with bad config.

Run this in order. Donโ€™t use openclaw gateway restart yet.

# 1) Stop the stuck gateway on port 18789
lsof -nP -iTCP:18789 -sTCP:LISTEN
lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill
sleep 2
lsof -nP -iTCP:18789 -sTCP:LISTEN

If the last command still shows a listener:

open lanternBOT
# prime seal 3:33:36 PM error Service config issue: messages.groupChat: Unrecognized key: "vi...
lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill -9

Then fix and verify config:

cp /home/ace/.openclaw/openclaw.json /home/ace/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery
openclaw config set channels.telegram.accounts.default.streaming '"partial"' --strict-json
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming '"partial"' --strict-json

openclaw config get messages.groupChat --json
openclaw config get plugins --json
open lanternBOT
# prime seal 3:33:36 PM error Service config issue: messages.groupChat: Unrecognized key: "vi...
openclaw config get channels.telegram.accounts.default.streaming --json
openclaw config get channels.telegram.accounts.collaboration-specialist.streaming --json
openclaw config validate

Only after openclaw config validate says valid, start manually:

openclaw gateway

If config get still shows visibleReplies, bundledDiscovery, or streaming as an object instead of "partial", paste those config get ... --json outputs.

open lanternBOT
open lanternBOT
# prime seal error - pid 1173 ace: /usr/bin/node /home/ace/.npm-global/lib/node_modules/openc...
kill -9 1173

Then fix the config and validate:

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery
openclaw config set channels.telegram.accounts.default.streaming '"partial"' --strict-json
openclaw config set channels.telegram.accounts.collaboration-specialist.streaming '"partial"' --strict-json
openclaw config validate

Then start fresh:

open lanternBOT
# prime seal error - pid 1173 ace: /usr/bin/node /home/ace/.npm-global/lib/node_modules/openc...
openclaw gateway

About those other services: donโ€™t delete them yet. Just inspect/stop them if they keep respawning gateways:

systemctl --user status agent-collab-hub.service mission-control.service openclaw-heartbeat.service
systemctl --user stop agent-collab-hub.service mission-control.service openclaw-heartbeat.service

If systemctl --user still fails with No medium found, ignore the service commands for now and use the port/PID method above. The immediate blocker is the stuck process on 18789 plus the stale config keys.

prime seal
#

OpenClaw 2026.5.12 (f066dd2)
One CLI to rule them all, and one more restart because you changed the port.โ–„

โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ˆ
โ–ˆโ–‘โ–„โ–„โ–„โ–‘โ–ˆโ–ˆโ–‘โ–„โ–„โ–‘โ–ˆโ–ˆโ–‘โ–„โ–„โ–„โ–ˆโ–ˆโ–‘โ–€โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–‘โ–„โ–„โ–€โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–„โ–„โ–€โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–ˆ
โ–ˆโ–‘โ–ˆโ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–‘โ–€โ–€โ–‘โ–ˆโ–ˆโ–‘โ–„โ–„โ–„โ–ˆโ–ˆโ–‘โ–ˆโ–‘โ–ˆโ–‘โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–€โ–€โ–‘โ–ˆโ–ˆโ–‘โ–ˆโ–‘โ–ˆโ–‘โ–ˆโ–ˆโ–ˆ
โ–ˆโ–‘โ–€โ–€โ–€โ–‘โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–€โ–€โ–€โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–„โ–‘โ–ˆโ–ˆโ–‘โ–€โ–€โ–„โ–ˆโ–ˆโ–‘โ–€โ–€โ–‘โ–ˆโ–‘โ–ˆโ–ˆโ–‘โ–ˆโ–ˆโ–„โ–€โ–„โ–€โ–„โ–ˆโ–ˆโ–€
โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€
๐Ÿฆž OPENCLAW ๐Ÿฆž
โ”Œ
OpenClaw doctorโ”‚
โ—‡
Startup optimization โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
โ”‚โ”‚

  • NODE_COMPILE_CACHE is not set; repeated CLI runs can be slower on โ”‚โ”‚
    small hosts (Pi/VM). โ”‚โ”‚
  • OPENCLAW_NO_RESPAWN is not set to 1; set it to avoid extra startup โ”‚โ”‚
    overhead from self-respawn. โ”‚โ”‚
  • Suggested env for low-power hosts: โ”‚โ”‚
    export NODE_COMPILE_CACHE=/var/tmp/openclaw-compile-cache โ”‚โ”‚
    mkdir -p /var/tmp/openclaw-compile-cache โ”‚โ”‚
    export OPENCLAW_NO_RESPAWN=1 โ”‚โ”‚
    โ”‚โ”œ
#

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
โ—‡
Legacy config keys detected โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
โ”‚โ”‚

  • plugins.allow: plugins.allow now gates bundled provider discovery by โ”‚โ”‚
    default; run "openclaw doctor --fix" to preserve legacy bundled โ”‚โ”‚
    provider compatibility as plugins.bundledDiscovery="compat", or set โ”‚โ”‚
    plugins.bundledDiscovery="allowlist" to keep the stricter behavior. โ”‚โ”‚
    โ”‚โ”œ
    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
    โ—‡
    Doctor changes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
    โ”‚โ”‚
    Set plugins.bundledDiscovery="compat" to preserve legacy bundled โ”‚โ”‚
    provider discovery for this restrictive plugins.allow config. โ”‚โ”‚
    โ”‚โ”œ
#

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
โ—‡
Doctor changes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
โ”‚โ”‚
Set messages.groupChat.visibleReplies to "message_tool" so โ”‚โ”‚
group/channel replies use the message tool by default. โ”‚โ”‚
โ”‚โ”œ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
โ—‡
Doctor warnings โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
โ”‚โ”‚

  • agents.list[1].tools.alsoAllow references plugin "canvas", but โ”‚โ”‚
    plugins.allow does not include it. Add "canvas" to plugins.allow or โ”‚โ”‚
    remove plugins.allow. โ”‚โ”‚
  • plugins.allow is restrictive, but bundled provider discovery is โ”‚โ”‚
    still in legacy compatibility mode. Bundled provider plugins can โ”‚โ”‚
    still appear in runtime provider inventories; set โ”‚โ”‚
    plugins.bundledDiscovery to "allowlist" after confirming omitted โ”‚โ”‚
    bundled providers are intentionally blocked. โ”‚โ”‚
#

โ”‚โ”œ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
โ—‡
Doctor warnings โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
โ”‚โ”‚

  • channels.telegram.groupPolicy is "allowlist" but groupAllowFrom (and โ”‚โ”‚
    allowFrom) is empty โ€” all group messages will be silently dropped. โ”‚โ”‚
    Add sender IDs to channels.telegram.groupAllowFrom or โ”‚โ”‚
    channels.telegram.allowFrom, or set channels.telegram.groupPolicy to โ”‚โ”‚
    "open". โ”‚โ”‚
    โ”‚โ”œ
    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚
    โ—‡
    Command owner โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚
open lanternBOT
open lanternBOT
open lanternBOT
# prime seal โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ—‡ L...

That looks like a doctor/schema mismatch in 2026.5.12: doctor is adding plugins.bundledDiscovery, but the running config schema rejects plugins.bundledDiscovery.

Work around it by removing the key doctor added, and stop doctor from wanting to add it by removing plugins.allow unless you absolutely need a plugin allowlist:

openclaw config unset plugins.bundledDiscovery
openclaw config unset plugins.allow
openclaw config validate

Then restart the gateway manually again:

lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill
openclaw gateway
open lanternBOT
# prime seal โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ—‡ L...

For now, donโ€™t run openclaw doctor --fix again on this config, because it may re-add the invalid plugins.bundledDiscovery key.

If you do need plugins.allow for a restrictive plugin setup, thatโ€™s likely a real 2026.5.12 bug: doctor says to write a key that schema wonโ€™t accept. Best next step would be a GitHub issue with those exact two outputs: doctor recommending plugins.bundledDiscovery, and config validate rejecting it. https://github.com/openclaw/openclaw/issues

open lanternBOT
# prime seal โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ—‡ Docto...

Same pattern: doctor is writing keys that your 2026.5.12 schema rejects.

For now, undo doctorโ€™s changes and remove the restrictive plugin allowlist:

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery
openclaw config unset plugins.allow

openclaw config validate

Then restart the gateway manually:

lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill
open lanternBOT
# prime seal โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ—‡ Docto...
openclaw gateway

Do not run openclaw doctor --fix again on this version/config loop; itโ€™s re-adding messages.groupChat.visibleReplies and plugins.bundledDiscovery, while validation rejects both.

The canvas warning is caused by plugins.allow being restrictive. Removing plugins.allow is the simplest fix unless you intentionally need a locked-down plugin list. If you do need it, add canvas later after the config validates, but donโ€™t add bundledDiscovery on this build.

open lanternBOT
# prime seal โ”‚โ”œ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ—‡...

That one is a real Telegram behavior warning, not the doctor/schema bug.

You have:

channels.telegram.groupPolicy = "allowlist"
groupAllowFrom / allowFrom = empty

So group messages will be dropped. Pick one:

# Option A: allow Telegram groups broadly
openclaw config set channels.telegram.groupPolicy open

# Option B: keep allowlist mode and add allowed group/chat/user ids
open lanternBOT
# prime seal โ”‚โ”œ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ”‚ โ—‡...
openclaw config set channels.telegram.groupAllowFrom '["<telegram-group-id-or-chat-id>"]' --strict-json

If youโ€™re just trying to get Telegram working again, use Option A first:

openclaw config set channels.telegram.groupPolicy open
openclaw config validate

Then restart the gateway manually after config validates:

lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill
openclaw gateway
prime seal
#

after many many tries under your "help", the bugs remained unchanged, unsettle, why the fark is says I have multiple gateway and heartbeat service counted as one?

4:01:28 PM
error
Run: openclaw doctor --fix
Run: openclaw doctor --fix
4:01:28 PM
error
Service config looks out of date or non-standard.
Service config looks out of date or non-standard.
4:01:28 PM
error
Service config issue: Gateway service PATH missing required dirs: /home/ace/.volta/bin, /home/ace/.asdf/shims, /home/ace/.bun/bin, /home/ace/.nvm/current/bin, /home/ace/.fnm/current/bin
4:01:28 PM
error
Recommendation: run "openclaw doctor" (or "openclaw doctor --repair").
Recommendation: run "openclaw doctor" (or "openclaw doctor --repair").
4:01:28 PM
error
Config issue: channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
4:01:28 PM
error
Config issue: channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
4:01:28 PM
error
Service config issue: channels.telegram.accounts.default.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
4:01:28 PM
error
Service config issue: channels.telegram.accounts.collaboration-specialist.streaming: Invalid input (allowed: true, false, "off", "partial", "block", "progress")
4:01:28 PM
error
RPC probe: failed
RPC probe: failed
4:01:28 PM
error
RPC target: ws://127.0.0.1:18789
RPC target: ws://127.0.0.1:18789
4:01:28 PM
error
gateway closed (1006 abnormal closure (no close frame)): no close reason
gateway closed (1006 abnormal closure (no close frame)): no close reason
4:01:28 PM
error
Gateway target: ws://127.0.0.1:18789
Gateway target: ws://127.0.0.1:18789
4:01:28 PM
error
Source: cli --url
Source: cli --url
4:01:28 PM
error

#

Config: /home/ace/.openclaw/openclaw.json
Config: /home/ace/.openclaw/openclaw.json
4:01:28 PM
error
Other gateway-like services detected (best effort):
Other gateway-like services detected (best effort):
4:01:28 PM
error

  • agent-collab-hub.service (user, unit: /home/ace/.config/systemd/user/agent-collab-hub.service)
  • agent-collab-hub.service (user, unit: /home/ace/.config/systemd/user/agent-collab-hub.service)
    4:01:28 PM
    error
  • mission-control.service (user, unit: /home/ace/.config/systemd/user/mission-control.service)
  • mission-control.service (user, unit: /home/ace/.config/systemd/user/mission-control.service)
    4:01:28 PM
    error
  • openclaw-heartbeat.service (user, unit: /home/ace/.config/systemd/user/openclaw-heartbeat.service)
  • openclaw-heartbeat.service (user, unit: /home/ace/.config/systemd/user/openclaw-heartbeat.service)
    4:01:28 PM
    error
    Cleanup hint: systemctl --user disable --now openclaw-gateway.service
    Cleanup hint: systemctl --user disable --now openclaw-gateway.service
    4:01:28 PM
    error
    Cleanup hint: rm ~/.config/systemd/user/openclaw-gateway.service
    Cleanup hint: rm ~/.config/systemd/user/openclaw-gateway.service
open lanternBOT
# prime seal after many many tries under your "help", the bugs remained unchanged, unsettle, ...

Yeah, I get why youโ€™re annoyed. The key problem is that doctor --fix is looping you: it is adding messages.groupChat.visibleReplies / plugins.bundledDiscovery, then the same build rejects those keys. So stop running doctor --fix for now.

Use this direct config repair instead:

cp /home/ace/.openclaw/openclaw.json /home/ace/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

node <<'NODE'
const fs = require('fs');
const file = '/home/ace/.openclaw/openclaw.json';
const cfg = JSON.parse(fs.readFileSync(file, 'utf8'));

if (cfg.messages?.groupChat) delete cfg.messages.groupChat.visibleReplies;
if (cfg.plugins) {
  delete cfg.plugins.bundledDiscovery;
  delete cfg.plugins.allow;
open lanternBOT
# prime seal after many many tries under your "help", the bugs remained unchanged, unsettle, ...
}

const accounts = cfg.channels?.telegram?.accounts || {};
for (const account of Object.values(accounts)) {
  if (account && Object.prototype.hasOwnProperty.call(account, 'streaming')) {
    if (account.streaming && typeof account.streaming === 'object' && !Array.isArray(account.streaming)) {
      account.streaming = account.streaming.mode || 'partial';
    }
    if (!['off', 'partial', 'block', 'progress', true, false].includes(account.streaming)) {
      account.streaming = 'partial';
    }
  }
}

fs.writeFileSync(file, JSON.stringify(cfg, null, 2) + '
open lanternBOT
# prime seal after many many tries under your "help", the bugs remained unchanged, unsettle, ...
');
NODE

openclaw config validate

Then kill the stuck gateway and start clean:

lsof -tiTCP:18789 -sTCP:LISTEN | xargs -r kill
sleep 2
lsof -nP -iTCP:18789 -sTCP:LISTEN
openclaw gateway

About โ€œmultiple gatewaysโ€: gateway status --deep does a best-effort systemd service scan. It flags gateway-like services, not only currently active gateways. So openclaw-heartbeat.service is being counted because it is an OpenClaw-related user service that could be stale/legacy/conflicting. It may not literally be a second gateway process.

open lanternBOT
# prime seal after many many tries under your "help", the bugs remained unchanged, unsettle, ...

Inspect the service files:

systemctl --user cat openclaw-heartbeat.service
systemctl --user cat agent-collab-hub.service
systemctl --user cat mission-control.service

If you did not intentionally create/use those, disable them:

systemctl --user disable --now openclaw-heartbeat.service agent-collab-hub.service mission-control.service

If systemctl --user says No medium found, then your user systemd bus is broken/unavailable in that shell, and the service warnings are secondary. The immediate thing is: fix config directly, stop the listener on 18789, start openclaw gateway manually, and avoid doctor --fix until this doctor/schema mismatch is fixed.

open lanternBOT
# prime seal Config: /home/ace/.openclaw/openclaw.json Config: /home/ace/.openclaw/openclaw...

That output is confusing, but it means:

  • Detected extra service files: agent-collab-hub.service, mission-control.service, openclaw-heartbeat.service
  • Cleanup hint mentions openclaw-gateway.service because thatโ€™s the legacy/default gateway unit name the scanner knows how to clean up. The hint is generic, not perfectly matched to the three services listed.

Donโ€™t remove files blind. First inspect what each service actually runs:

systemctl --user cat agent-collab-hub.service
systemctl --user cat mission-control.service
systemctl --user cat openclaw-heartbeat.service
systemctl --user cat openclaw-gateway.service

If those services are old/stale and you do not intentionally use them, disable them:

prime seal
#

systemctl --user cat openclaw-heartbeat.service
isnt this native?

open lanternBOT
# prime seal Config: /home/ace/.openclaw/openclaw.json Config: /home/ace/.openclaw/openclaw...
systemctl --user disable --now agent-collab-hub.service mission-control.service openclaw-heartbeat.service openclaw-gateway.service
systemctl --user daemon-reload

If systemctl --user still fails, move the unit files aside instead of deleting them:

mkdir -p ~/.config/systemd/user/disabled-openclaw-services

mv ~/.config/systemd/user/agent-collab-hub.service ~/.config/systemd/user/disabled-openclaw-services/ 2>/dev/null || true
mv ~/.config/systemd/user/mission-control.service ~/.config/systemd/user/disabled-openclaw-services/ 2>/dev/null || true
mv ~/.config/systemd/user/openclaw-heartbeat.service ~/.config/systemd/user/disabled-openclaw-services/ 2>/dev/null || true
mv ~/.config/systemd/user/openclaw-gateway.service ~/.config/systemd/user/disabled-openclaw-services/ 2>/dev/null || true

Then run one manual gateway only:

open lanternBOT
open lanternBOT
# prime seal systemctl --user cat openclaw-heartbeat.service isnt this native?

I donโ€™t see openclaw-heartbeat.service as a current native OpenClaw service name. Current heartbeat is handled by the Gateway; it should not need a separate systemd unit.

So openclaw-heartbeat.service is probably one of:

  • an old/legacy service from a previous setup
  • something custom you created
  • a stale unit that can conflict by running OpenClaw commands periodically

Check what it actually runs:

systemctl --user cat openclaw-heartbeat.service
systemctl --user status openclaw-heartbeat.service --no-pager

If the ExecStart= line runs openclaw gateway, openclaw doctor --fix, or anything that rewrites config / starts another gateway, disable it:

open lanternBOT
prime seal
#

ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ cp /home/ace/.openclaw/openclaw.json /home/ace/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

node <<'NODE'
const fs = require('fs');
const file = '/home/ace/.openclaw/openclaw.json';
const cfg = JSON.parse(fs.readFileSync(file, 'utf8'));

if (cfg.messages?.groupChat) delete cfg.messages.groupChat.visibleReplies;
if (cfg.plugins) {
delete cfg.plugins.bundledDiscovery;
delete cfg.plugins.allow;
}

const accounts = cfg.channels?.telegram?.accounts {};
for (const account of Object.values(accounts)) {
if (account && Object.prototype.hasOwnProperty.call(account, 'streaming')) {
if (account.streaming && typeof account.streaming === 'object' && !Array.isArray(account.streaming)) {
account.streaming = account.streaming.mode 'partial';
}
if (!['off', 'partial', 'block', 'progress', true, false].includes(account.streaming)) {
account.streaming = 'partial';
openclaw config validateSON.stringify(cfg, null, 2) + '
[stdin]:11
const accounts = cfg.channels?.telegram?.accounts {};
^
Expected ';', '}' or <eof>

SyntaxError: Unexpected token '{'
at makeContextifyScript (node:internal/vm:185:14)
at compileScript (node:internal/process/execution:383:10)
at evalTypeScript (node:internal/process/execution:256:22)
at node:internal/main/eval_stdin:53:5
at Socket.<anonymous> (node:internal/process/execution:201:5)
at Socket.emit (node:events:531:35)
at endReadableNT (node:internal/streams/readable:1698:12)
at process.processTicksAndRejections (node:internal/process/task_queues:89:21)

Node.js v22.22.1

open lanternBOT
# prime seal ace@ace-VivoBook-ASUSLaptop-X412DA-A412DA:~$ cp /home/ace/.openclaw/openclaw.jso...

Yeah, that snippet got mangled while copying. Specifically these got broken:

?? {}
|| 'partial'

Donโ€™t use the Node block. Use only OpenClaw CLI commands:

cp /home/ace/.openclaw/openclaw.json /home/ace/.openclaw/openclaw.json.bak.$(date +%Y%m%d-%H%M%S)

openclaw config unset messages.groupChat.visibleReplies
openclaw config unset plugins.bundledDiscovery
openclaw config unset plugins.allow