{"record":{"id":"da5392c5b9739366","repo":"browser-use/browser-use","slug":"action-func-name-parameter-param-name","errorCode":null,"errorMessage":"Action '{func.__name__}' parameter '{param.name}: {param_type_name}' conflicts with special argument injected by tools: '{param.name}: {expected_type_name}'","messagePattern":"Action '(.+?)' parameter '(.+?): (.+?)' conflicts with special argument injected by tools: '(.+?): (.+?)'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"browser_use/tools/registry/service.py","lineNumber":141,"sourceCode":"\t\t\t\t\t\tparam_type = next((arg for arg in args if arg is not type(None)), param_type)\n\n\t\t\t\t\t# Check if types are compatible (exact match, subclass, or generic list)\n\t\t\t\t\ttypes_compatible = (\n\t\t\t\t\t\tparam_type == expected_type\n\t\t\t\t\t\tor (\n\t\t\t\t\t\t\tinspect.isclass(param_type)\n\t\t\t\t\t\t\tand inspect.isclass(expected_type)\n\t\t\t\t\t\t\tand issubclass(param_type, expected_type)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tor\n\t\t\t\t\t\t# Handle list[T] vs list comparison\n\t\t\t\t\t\t(expected_type is list and (param_type is list or get_origin(param_type) is list))\n\t\t\t\t\t)\n\n\t\t\t\t\tif not types_compatible:\n\t\t\t\t\t\texpected_type_name = getattr(expected_type, '__name__', str(expected_type))\n\t\t\t\t\t\tparam_type_name = getattr(param_type, '__name__', str(param_type))\n\t\t\t\t\t\traise ValueError(\n\t\t\t\t\t\t\tf\"Action '{func.__name__}' parameter '{param.name}: {param_type_name}' \"\n\t\t\t\t\t\t\tf\"conflicts with special argument injected by tools: '{param.name}: {expected_type_name}'\"\n\t\t\t\t\t\t)\n\t\t\t\tspecial_params.append(param)\n\t\t\telse:\n\t\t\t\taction_params.append(param)\n\n\t\t# Step 3: Create or validate param model\n\t\tif not param_model_provided:\n\t\t\t# Type 2: Generate param model from action params\n\t\t\tif action_params:\n\t\t\t\tparams_dict = {}\n\t\t\t\tfor param in action_params:\n\t\t\t\t\tannotation = param.annotation if param.annotation != Parameter.empty else str\n\t\t\t\t\tdefault = ... if param.default == Parameter.empty else param.default\n\t\t\t\t\tparams_dict[param.name] = (annotation, default)\n\n\t\t\t\tparam_model = create_model(f'{func.__name__}_Params', __base__=ActionModel, **params_dict)","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/browser-use/browser-use/blob/6c73fced2f6d45a11d88622fe56365a5fe18f28b/browser_use/tools/registry/service.py#L123-L159","documentation":"Error \"Action '{func.__name__}' parameter '{param.name}: {param_type_name}' conflicts with special argument injected by tools: '{param.name}: {expected_type_name}'\" thrown in browser-use/browser-use.","triggerScenarios":"An action parameter name collides with a framework-injected special argument with a different type.","commonSituations":"Naming a parameter `browser_session`/`page`/`llm` with a custom type in a custom action.","solutions":["Rename the conflicting action parameter so it does not shadow an injected special argument (browser_session, page_extraction_llm, file_system, etc.)."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6c73fced2f6d45a11d88622fe56365a5fe18f28b","analyzedAt":"2026-08-14T19:42:40.557Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}