openclaw/openclaw · error · Error

Unknown action: ${action}

Error message

Unknown action: ${action}

What it means

Thrown by the default case of the browser tool's action switch statement when the 'action' string does not match any known case (status, start, stop, profiles, importprofile, tabs, open, screenshot, snapshot, click, type, select, scroll, hover, press, fill, wait, evaluate, download, waitfordownload, upload, dialog, act, etc.). The action is read as a required string param at browser-tool.ts:405, so it is never undefined here, but an unrecognized value reaches the default branch.

Source

Thrown at extensions/browser/src/browser-tool.ts:989

            request,
            async () => await browserToolDeps.browserArmDialog(baseUrl, { ...request, profile }),
          );
        }
        case "act": {
          const request = readActRequestParam(params);
          if (!request) {
            throw new Error("request required");
          }
          return await executeActAction({
            request,
            baseUrl,
            profile,
            proxyRequest,
            onTabActivity: sessionTabs.touch,
          });
        }
        default:
          throw new Error(`Unknown action: ${action}`);
      }
    },
  };
}
/* oxlint-disable max-lines -- TODO: split this grandfathered oversized file. */

View on GitHub (pinned to 01804a7531)

Solutions

  1. Check the action name against the supported list in the browser tool schema/docs.
  2. Correct typos and ensure lowercase (e.g. "screenshot" not "Screenshot").
  3. For navigation use "open" instead of "navigate".
  4. For clicks use "act" with request.kind="click", or the dedicated click action if available.

Example fix

// before
{ "action": "navigate", "url": "https://example.com" }
// after
{ "action": "open", "url": "https://example.com" }
Defensive patterns

Strategy: validation

Validate before calling

// Validate the action name against known actions before calling the tool
const KNOWN_BROWSER_ACTIONS = new Set([
  "status","start","stop","profiles","importprofile","tabs","open","screenshot",
  "snapshot","click","type","select","scroll","hover","press","fill","wait",
  "evaluate","download","waitfordownload","upload","dialog","act",
]);
function validateBrowserAction(action) {
  if (!KNOWN_BROWSER_ACTIONS.has(action)) {
    throw new Error(`Unknown browser action "${action}". Supported: ${[...KNOWN_BROWSER_ACTIONS].join(", ")}`);
  }
}

Type guard

function isKnownBrowserAction(action: unknown): action is string {
  return typeof action === "string" && KNOWN_BROWSER_ACTIONS.has(action);
}

Prevention

When it happens

Trigger: Calling the browser tool with an action that is not in the switch, e.g. {"action":"navigate"}, {"action":"clicks"} (typo), {"action":""} (empty string passes required check but matches no case), or {"action":"CLOSE"} (case sensitivity).

Common situations: Model hallucinating an action name. Typos in action strings. Case mismatches (all actions are lowercase). Version drift where a documented action was renamed or removed.

Related errors


AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12). Data as JSON: /api/errors/d2f7b65e302969f0. Report an issue: GitHub.