diff --git a/backend/pkg/templates/prompts/pentester.tmpl b/backend/pkg/templates/prompts/pentester.tmpl
index bd38c83be..cafaab11d 100644
--- a/backend/pkg/templates/prompts/pentester.tmpl
+++ b/backend/pkg/templates/prompts/pentester.tmpl
@@ -323,6 +323,13 @@ Check tool availability with 'which [tool]' before use. Install missing tools if
{{end}}
+
+- Verify command-specific flags with `[tool] -h` or `[tool] --help` before first use when the exact syntax is uncertain.
+- Do not copy flags between different tools, and do not invent output flags: do not pass `-c`, `-o`, or `-o /dev/null` to a tool unless that tool's own `--help` documents them.
+- For XSStrike specifically, do not use `xsstrike -c` or `xsstrike -o` (including `xsstrike -o /dev/null`); XSStrike does not accept these arguments. Confirm the exact flags with `xsstrike --help`.
+- If output needs to be saved, reduced, or discarded, use shell redirection (for example, `> results.txt` or `> /dev/null`) or the tool's documented logging option instead of inventing unsupported output flags.
+
+
Standalone (recommended): All operations in one command
`msfconsole -q -x "use exploit/...; set LPORT [allocated]; exploit; sleep 20; sessions -l; sessions -i 1 -c 'sysinfo'; exit"`
diff --git a/backend/pkg/templates/templates_test.go b/backend/pkg/templates/templates_test.go
index 0904c1efd..1d49b98f7 100644
--- a/backend/pkg/templates/templates_test.go
+++ b/backend/pkg/templates/templates_test.go
@@ -1013,6 +1013,44 @@ func TestQuestionTaskPlannerPrompt(t *testing.T) {
}
}
+// TestPentesterPromptXSStrikeArgumentGuidance keeps the pentester prompt from
+// recommending unsupported XSStrike flags when composing terminal commands.
+func TestPentesterPromptXSStrikeArgumentGuidance(t *testing.T) {
+ defaultPrompts, err := templates.GetDefaultPrompts()
+ if err != nil {
+ t.Fatalf("Failed to load default prompts: %v", err)
+ }
+
+ dummyData := validator.CreateDummyTemplateData()
+ template := defaultPrompts.AgentsPrompts.Pentester.System.Template
+
+ rendered, err := templates.RenderPrompt(
+ string(templates.PromptTypePentester),
+ template,
+ dummyData,
+ )
+ if err != nil {
+ t.Fatalf("Failed to render pentester template: %v", err)
+ }
+
+ requiredGuidance := []string{
+ "cli_argument_protocol",
+ "XSStrike",
+ "xsstrike --help",
+ "xsstrike -c",
+ "xsstrike -o",
+ "xsstrike -o /dev/null",
+ "shell redirection",
+ "inventing unsupported output flags",
+ }
+
+ for _, guidance := range requiredGuidance {
+ if !strings.Contains(rendered, guidance) {
+ t.Errorf("Rendered pentester template missing XSStrike argument guidance: %s", guidance)
+ }
+ }
+}
+
// TestTaskAssignmentWrapperPrompt tests the task_assignment_wrapper template
func TestTaskAssignmentWrapperPrompt(t *testing.T) {
defaultPrompts, err := templates.GetDefaultPrompts()