{"record":{"id":"b1838d680d6a95ad","repo":"projectdiscovery/nuclei","slug":"please-set-custom-user-agent-in-the-template","errorCode":null,"errorMessage":"please set custom_user_agent in the template","messagePattern":"please set custom_user_agent in the template","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/protocols/headless/headless.go","lineNumber":135,"sourceCode":"\t}\n\n\tif len(request.Payloads) > 0 {\n\t\tvar err error\n\t\trequest.generator, err = generators.New(request.Payloads, request.AttackType.Value, options.TemplatePath, options.Catalog, options.Options.AttackType, request.options.Options)\n\t\tif err != nil {\n\t\t\treturn errors.Wrap(err, \"could not parse payloads\")\n\t\t}\n\t}\n\n\t// Compile User-Agent\n\tswitch request.UserAgent.Value {\n\tcase useragent.Off:\n\t\trequest.compiledUserAgent = \" \"\n\tcase useragent.Default:\n\t\trequest.compiledUserAgent = \"\"\n\tcase useragent.Custom:\n\t\tif request.CustomUserAgent == \"\" {\n\t\t\treturn errors.New(\"please set custom_user_agent in the template\")\n\t\t}\n\t\trequest.compiledUserAgent = request.CustomUserAgent\n\tcase useragent.Random:\n\t\tuserAgent := uagent.PickRandom()\n\t\trequest.compiledUserAgent = userAgent.Raw\n\t}\n\n\tif len(request.Matchers) > 0 || len(request.Extractors) > 0 {\n\t\tcompiled := &request.Operators\n\t\tcompiled.ExcludeMatchers = options.ExcludeMatchers\n\t\tcompiled.TemplateID = options.TemplateID\n\t\tif err := compiled.Compile(); err != nil {\n\t\t\treturn errors.Wrap(err, \"could not compile operators\")\n\t\t}\n\t\trequest.CompiledOperators = compiled\n\t}\n\n\tif len(request.Fuzzing) > 0 {","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/projectdiscovery/nuclei/blob/265b3a3dec374741614e342f813c10f8b38d2bb7/pkg/protocols/headless/headless.go#L117-L153","documentation":"Headless requests support a user_agent mode enum (off, default, random, custom). Mode `custom` requires the sibling custom_user_agent field to hold the UA string; if it is empty, Compile fails with this error. Other modes are self-sufficient: off sets a blank UA, default leaves nuclei' default, random picks from uagent.","triggerScenarios":"A headless request block containing `user_agent: custom` without a custom_user_agent value (or with an empty one).","commonSituations":"Editing a template from `user_agent: random` to custom and forgetting the string; indentation moving custom_user_agent outside the request block.","solutions":["Add custom_user_agent: \"Mozilla/5.0 ...\" next to user_agent: custom","Or switch to an already-sufficient mode: user_agent: default, random, or off","Validate the template before running"],"exampleFix":"# before\nuser_agent: custom\n\n# after\nuser_agent: custom\ncustom_user_agent: \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36\"","handlingStrategy":"validation","validationCode":"if request.UserAgent.Value == useragent.Custom && strings.TrimSpace(request.CustomUserAgent) == \"\" {\n    return errors.New(\"user_agent: custom requires custom_user_agent to be set\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["When selecting user_agent: custom, add the custom_user_agent string in the same edit","Validate templates after changing any user_agent mode"],"tags":["headless","template","user-agent","config"],"backgroundTag":null,"analyzedSha":"265b3a3dec374741614e342f813c10f8b38d2bb7","analyzedAt":"2026-08-15T20:05:51.855Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}