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
- Check the action name against the supported list in the browser tool schema/docs.
- Correct typos and ensure lowercase (e.g. "screenshot" not "Screenshot").
- For navigation use "open" instead of "navigate".
- 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
- Reference the browser tool schema for the current action list.
- Use lowercase action names exactly as documented.
- For navigation use "open", not "navigate".
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
- node is only supported with target="node".
- system profile import must run on the host; omit target or u
- profile="${profile}" cannot use the sandbox browser; use tar
- paths required
- request required
AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12).
Data as JSON: /api/errors/d2f7b65e302969f0.
Report an issue: GitHub.