openclaw - ✅(Solved) Fix Browser plugin not loaded at gateway startup despite enabledByDefault: true (v2026.3.28 regression) [2 pull requests, 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#56820Fetched 2026-04-08 01:47:26
View on GitHub
Comments
1
Participants
2
Timeline
5
Reactions
3
Timeline (top)
cross-referenced ×2referenced ×2commented ×1

After updating to v2026.3.28, all openclaw browser CLI commands and agent browser tool calls fail with GatewayClientRequestError: unknown method: browser.request. The browser subsystem was refactored from core into a plugin in this release, but the gateway startup plugin loader excludes it unless explicitly configured.

Root Cause

In resolveGatewayStartupPluginIds() (src/plugins/channel-plugin-ids.ts), the filter for bundled non-channel, non-provider plugins requires explicit config even when enabledByDefault: true:

// After passing resolveEffectiveEnableState (which respects enabledByDefault):
return pluginsConfig.allow.includes(plugin.id) ||
       pluginsConfig.entries[plugin.id]?.enabled === true ||
       pluginsConfig.slots.memory === plugin.id;

The browser plugin is:

  • Bundled, with enabledByDefault: true in openclaw.plugin.json
  • Has no channels, no providers, no CLI backends
  • Passes resolveEffectiveEnableState check
  • Fails the final explicit-config filter (not in allow, not in entries, not a memory slot)

The CLI process loads all plugins via a different path (so openclaw plugins inspect browser shows it as loaded with browser.request registered), but the gateway's stricter startup filter excludes it. This means browser.request is never registered as a gateway RPC method.

Fix Action

Workaround

Add explicit browser plugin config to openclaw.json:

{
  "plugins": {
    "entries": {
      "browser": { "enabled": true }
    }
  }
}

Then restart the gateway (openclaw gateway stop && openclaw gateway start).

PR fix notes

PR #57545: fix(plugins): load bundled plugins with enabledByDefault at gateway startup

Description (problem / solution / changelog)

Summary

Fixes regression in v2026.3.28 where browser plugin and other bundled plugins with enabledByDefault: true were not loaded at gateway startup.

Root Cause

The resolveGatewayStartupPluginIds function in src/plugins/channel-plugin-ids.ts was:

  1. Checking enabledByDefault via resolveEffectiveEnableState
  2. But then requiring explicit config (allowlist, entries, or memory slot) for bundled plugins ❌

This caused the browser plugin (which has enabledByDefault: true in its manifest) to be excluded from gateway startup, making browser.request and other RPC methods unavailable.

Fix

Added plugin.enabledByDefault === true to the final return condition for bundled plugins:

return (
  pluginsConfig.allow.includes(plugin.id) ||
  pluginsConfig.entries[plugin.id]?.enabled === true ||
  pluginsConfig.slots.memory === plugin.id ||
  plugin.enabledByDefault === true  // Added
);

Testing

  • Added test coverage for bundled plugins with enabledByDefault: true
  • All existing tests pass

Impact

  • High: All v2026.3.28 users affected by broken browser functionality
  • Users can now use openclaw browser commands without manual config

Workaround (for users)

Add to openclaw.json:

{
  "plugins": {
    "entries": {
      "browser": { "enabled": true }
    }
  }
}

Fixes #56820

Changed files

  • src/infra/matrix-legacy-crypto.ts (modified, +3/-2)
  • src/plugins/channel-plugin-ids.test.ts (modified, +10/-4)
  • src/plugins/channel-plugin-ids.ts (modified, +2/-1)

PR #57929: fix(plugins): load bundled plugins with enabledByDefault at gateway startup

Description (problem / solution / changelog)

Summary

Fixes regression in v2026.3.28 where browser plugin and other bundled plugins with enabledByDefault: true were not loaded at gateway startup.

Root Cause

The resolveGatewayStartupPluginIds function in src/plugins/channel-plugin-ids.ts was:

  1. Checking enabledByDefault via resolveEffectiveEnableState
  2. But then requiring explicit config (allowlist, entries, or memory slot) for bundled plugins ❌

This caused the browser plugin (which has enabledByDefault: true in its manifest) to be excluded from gateway startup, making browser.request and other RPC methods unavailable.

Fix

Added plugin.enabledByDefault === true to the final return condition for bundled plugins:

return (
  pluginsConfig.allow.includes(plugin.id) ||
  pluginsConfig.entries[plugin.id]?.enabled === true ||
  pluginsConfig.slots.memory === plugin.id ||
  plugin.enabledByDefault === true  // Added
);

Testing

  • Added test coverage for bundled plugins with enabledByDefault: true
  • All existing tests pass

Impact

  • High: All v2026.3.28 users affected by broken browser functionality
  • Users can now use openclaw browser commands without manual config

Workaround (for users)

Add to openclaw.json:

{
  "plugins": {
    "entries": {
      "browser": { "enabled": true }
    }
  }
}

Fixes #56820

Changed files

  • src/plugins/channel-plugin-ids.test.ts (modified, +10/-4)
  • src/plugins/channel-plugin-ids.ts (modified, +2/-1)

Code Example

// After passing resolveEffectiveEnableState (which respects enabledByDefault):
return pluginsConfig.allow.includes(plugin.id) ||
       pluginsConfig.entries[plugin.id]?.enabled === true ||
       pluginsConfig.slots.memory === plugin.id;

---

{
  "plugins": {
    "entries": {
      "browser": { "enabled": true }
    }
  }
}

---

return pluginsConfig.allow.includes(plugin.id) ||
       pluginsConfig.entries[plugin.id]?.enabled === true ||
       pluginsConfig.slots.memory === plugin.id ||
       (plugin.origin === "bundled" && plugin.enabledByDefault);
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Summary

After updating to v2026.3.28, all openclaw browser CLI commands and agent browser tool calls fail with GatewayClientRequestError: unknown method: browser.request. The browser subsystem was refactored from core into a plugin in this release, but the gateway startup plugin loader excludes it unless explicitly configured.

Root cause

In resolveGatewayStartupPluginIds() (src/plugins/channel-plugin-ids.ts), the filter for bundled non-channel, non-provider plugins requires explicit config even when enabledByDefault: true:

// After passing resolveEffectiveEnableState (which respects enabledByDefault):
return pluginsConfig.allow.includes(plugin.id) ||
       pluginsConfig.entries[plugin.id]?.enabled === true ||
       pluginsConfig.slots.memory === plugin.id;

The browser plugin is:

  • Bundled, with enabledByDefault: true in openclaw.plugin.json
  • Has no channels, no providers, no CLI backends
  • Passes resolveEffectiveEnableState check
  • Fails the final explicit-config filter (not in allow, not in entries, not a memory slot)

The CLI process loads all plugins via a different path (so openclaw plugins inspect browser shows it as loaded with browser.request registered), but the gateway's stricter startup filter excludes it. This means browser.request is never registered as a gateway RPC method.

Steps to reproduce

  1. Update to v2026.3.28 (clean install or upgrade from v2026.3.24)
  2. Have no plugins.entries.browser or plugins.allow containing "browser" in openclaw.json
  3. Restart gateway
  4. Run: openclaw browser statusGatewayClientRequestError: unknown method: browser.request
  5. All browser CLI commands and agent browser tool calls fail identically

Workaround

Add explicit browser plugin config to openclaw.json:

{
  "plugins": {
    "entries": {
      "browser": { "enabled": true }
    }
  }
}

Then restart the gateway (openclaw gateway stop && openclaw gateway start).

Expected behavior

The browser plugin should load at gateway startup when enabledByDefault: true, without requiring explicit config. The final filter in resolveGatewayStartupPluginIds should respect enabledByDefault for bundled non-channel/non-provider plugins.

Suggested fix

In resolveGatewayStartupPluginIds, add a condition for enabledByDefault bundled plugins:

return pluginsConfig.allow.includes(plugin.id) ||
       pluginsConfig.entries[plugin.id]?.enabled === true ||
       pluginsConfig.slots.memory === plugin.id ||
       (plugin.origin === "bundled" && plugin.enabledByDefault);

OpenClaw version

2026.3.28 (f9b1079)

Operating system

macOS 26.4 (arm64)

Install method

pnpm (homebrew node)

Impact

Severity: High — blocks all browser automation for every user upgrading to v2026.3.28 who doesn't have explicit browser plugin config. Affected: All install methods (likely also Docker, npm, etc.) Frequency: 100% reproducible on clean upgrades.

extent analysis

Fix Plan

To resolve the issue, you need to update the resolveGatewayStartupPluginIds function to respect enabledByDefault for bundled non-channel/non-provider plugins.

Here are the steps:

  • Update the resolveGatewayStartupPluginIds function in src/plugins/channel-plugin-ids.ts to include the following condition:
return pluginsConfig.allow.includes(plugin.id) ||
       pluginsConfig.entries[plugin.id]?.enabled === true ||
       pluginsConfig.slots.memory === plugin.id ||
       (plugin.origin === "bundled" && plugin.enabledByDefault);
  • Alternatively, you can add explicit browser plugin config to openclaw.json as a temporary workaround:
{
  "plugins": {
    "entries": {
      "browser": { "enabled": true }
    }
  }
}

Then restart the gateway.

Verification

To verify that the fix worked, run the following command:

openclaw browser status

If the fix is successful, this command should no longer return a GatewayClientRequestError.

Extra Tips

  • Make sure to test the fix on a clean install or upgrade from v2026.3.24 to ensure it works as expected.
  • If you're using a different install method (e.g., Docker, npm), test the fix on those environments as well to ensure it's not specific to pnpm or homebrew node.

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

The browser plugin should load at gateway startup when enabledByDefault: true, without requiring explicit config. The final filter in resolveGatewayStartupPluginIds should respect enabledByDefault for bundled non-channel/non-provider plugins.

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 - ✅(Solved) Fix Browser plugin not loaded at gateway startup despite enabledByDefault: true (v2026.3.28 regression) [2 pull requests, 1 comments, 2 participants]