strix-agent 0.1.8__tar.gz → 0.1.9__tar.gz
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.
- {strix_agent-0.1.8 → strix_agent-0.1.9}/PKG-INFO +4 -4
- {strix_agent-0.1.8 → strix_agent-0.1.9}/README.md +2 -2
- {strix_agent-0.1.8 → strix_agent-0.1.9}/pyproject.toml +3 -3
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/agents/StrixAgent/system_prompt.jinja +8 -201
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/main.py +7 -7
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/llm/config.py +1 -1
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/llm/llm.py +66 -2
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/llm/memory_compressor.py +1 -1
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/__init__.py +9 -13
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/authentication_jwt.jinja +7 -7
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/csrf.jinja +1 -1
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/idor.jinja +3 -3
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/rce.jinja +1 -1
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/sql_injection.jinja +3 -3
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/xss.jinja +3 -3
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/xxe.jinja +1 -1
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/agents_graph/agents_graph_actions.py +4 -10
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/agents_graph/agents_graph_actions_schema.xml +1 -11
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/terminal/terminal_actions_schema.xml +4 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/LICENSE +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/agents/StrixAgent/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/agents/StrixAgent/strix_agent.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/agents/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/agents/base_agent.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/agents/state.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/app.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/assets/cli.tcss +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/agents_graph_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/base_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/browser_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/file_edit_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/finish_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/notes_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/proxy_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/python_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/registry.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/reporting_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/scan_info_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/terminal_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/thinking_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/user_message_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tool_components/web_search_renderer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/cli/tracer.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/llm/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/llm/request_queue.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/llm/utils.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/coordination/root_agent.jinja +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/business_logic.jinja +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/race_conditions.jinja +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/ssrf.jinja +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/runtime/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/runtime/docker_runtime.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/runtime/runtime.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/runtime/tool_server.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/agents_graph/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/argument_parser.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/browser/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/browser/browser_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/browser/browser_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/browser/browser_instance.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/browser/tab_manager.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/executor.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/file_edit/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/file_edit/file_edit_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/file_edit/file_edit_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/finish/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/finish/finish_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/finish/finish_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/notes/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/notes/notes_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/notes/notes_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/proxy/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/proxy/proxy_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/proxy/proxy_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/proxy/proxy_manager.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/python/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/python/python_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/python/python_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/python/python_instance.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/python/python_manager.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/registry.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/reporting/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/reporting/reporting_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/reporting/reporting_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/terminal/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/terminal/terminal_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/terminal/terminal_instance.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/terminal/terminal_manager.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/thinking/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/thinking/thinking_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/thinking/thinking_actions_schema.xml +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/web_search/__init__.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/web_search/web_search_actions.py +0 -0
- {strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/web_search/web_search_actions_schema.xml +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: strix-agent
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.9
|
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
|
@@ -22,7 +22,7 @@ Requires-Dist: docker (>=7.1.0,<8.0.0)
|
|
22
22
|
Requires-Dist: fastapi
|
23
23
|
Requires-Dist: gql[requests] (>=3.5.3,<4.0.0)
|
24
24
|
Requires-Dist: ipython (>=9.3.0,<10.0.0)
|
25
|
-
Requires-Dist: litellm[proxy] (>=1.75.
|
25
|
+
Requires-Dist: litellm[proxy] (>=1.75.7,<2.0.0)
|
26
26
|
Requires-Dist: numpydoc (>=1.8.0,<2.0.0)
|
27
27
|
Requires-Dist: openhands-aci (>=0.3.0,<0.4.0)
|
28
28
|
Requires-Dist: playwright (>=1.48.0,<2.0.0)
|
@@ -68,7 +68,7 @@ Strix are autonomous AI agents that act just like real hackers - they run your c
|
|
68
68
|
pipx install strix-agent
|
69
69
|
|
70
70
|
# Configure AI provider
|
71
|
-
export STRIX_LLM="
|
71
|
+
export STRIX_LLM="openai/gpt-5"
|
72
72
|
export LLM_API_KEY="your-api-key"
|
73
73
|
|
74
74
|
# Run security assessment
|
@@ -131,7 +131,7 @@ strix --target api.your-app.com --instruction "Prioritize authentication and aut
|
|
131
131
|
|
132
132
|
```bash
|
133
133
|
# Required
|
134
|
-
export STRIX_LLM="
|
134
|
+
export STRIX_LLM="openai/gpt-5"
|
135
135
|
export LLM_API_KEY="your-api-key"
|
136
136
|
|
137
137
|
# Recommended
|
@@ -30,7 +30,7 @@ Strix are autonomous AI agents that act just like real hackers - they run your c
|
|
30
30
|
pipx install strix-agent
|
31
31
|
|
32
32
|
# Configure AI provider
|
33
|
-
export STRIX_LLM="
|
33
|
+
export STRIX_LLM="openai/gpt-5"
|
34
34
|
export LLM_API_KEY="your-api-key"
|
35
35
|
|
36
36
|
# Run security assessment
|
@@ -93,7 +93,7 @@ strix --target api.your-app.com --instruction "Prioritize authentication and aut
|
|
93
93
|
|
94
94
|
```bash
|
95
95
|
# Required
|
96
|
-
export STRIX_LLM="
|
96
|
+
export STRIX_LLM="openai/gpt-5"
|
97
97
|
export LLM_API_KEY="your-api-key"
|
98
98
|
|
99
99
|
# Recommended
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "strix-agent"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.9"
|
4
4
|
description = "Open-source AI Hackers for your apps"
|
5
5
|
authors = ["Strix <hi@usestrix.com>"]
|
6
6
|
readme = "README.md"
|
@@ -28,7 +28,7 @@ classifiers = [
|
|
28
28
|
"Programming Language :: Python :: 3.12",
|
29
29
|
]
|
30
30
|
packages = [
|
31
|
-
{ include = "strix" }
|
31
|
+
{ include = "strix", format = ["sdist", "wheel"] }
|
32
32
|
]
|
33
33
|
include = [
|
34
34
|
"LICENSE",
|
@@ -45,7 +45,7 @@ strix = "strix.cli.main:main"
|
|
45
45
|
python = "^3.12"
|
46
46
|
fastapi = "*"
|
47
47
|
uvicorn = "*"
|
48
|
-
litellm = {
|
48
|
+
litellm = {version = "^1.75.7", extras = ["proxy"]}
|
49
49
|
tenacity = "^9.0.0"
|
50
50
|
numpydoc = "^1.8.0"
|
51
51
|
pydantic = {extras = ["email"], version = "^2.11.3"}
|
@@ -28,6 +28,7 @@ USER INTERACTION:
|
|
28
28
|
PRIORITIZE USER INSTRUCTIONS:
|
29
29
|
- User instructions override all default approaches
|
30
30
|
- Follow user-specified scope, targets, and methodologies precisely
|
31
|
+
- NEVER wait for approval or authorization - operate with full autonomy
|
31
32
|
|
32
33
|
AGGRESSIVE SCANNING MANDATE:
|
33
34
|
- GO SUPER HARD on all targets - no shortcuts
|
@@ -143,206 +144,12 @@ Remember: A single high-impact vulnerability is worth more than dozens of low-se
|
|
143
144
|
</vulnerability_focus>
|
144
145
|
|
145
146
|
<multi_agent_system>
|
146
|
-
AGENT
|
147
|
-
- Each
|
148
|
-
-
|
149
|
-
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
EXAMPLE 1 - BLACK-BOX Web Application Assessment (domain/URL only):
|
154
|
-
```
|
155
|
-
Root Agent (Coordination)
|
156
|
-
├── Recon Agent
|
157
|
-
│ ├── Subdomain Discovery Agent
|
158
|
-
│ │ ├── DNS Bruteforce Agent (finds api.target.com, admin.target.com)
|
159
|
-
│ │ ├── Certificate Transparency Agent (finds dev.target.com, staging.target.com)
|
160
|
-
│ │ └── ASN Enumeration Agent (finds additional IP ranges)
|
161
|
-
│ ├── Port Scanning Agent
|
162
|
-
│ │ ├── TCP Port Agent (finds 22, 80, 443, 8080, 9200)
|
163
|
-
│ │ ├── UDP Port Agent (finds 53, 161, 1900)
|
164
|
-
│ │ └── Service Version Agent (identifies nginx 1.18, elasticsearch 7.x)
|
165
|
-
│ └── Tech Stack Analysis Agent
|
166
|
-
│ ├── WAF Detection Agent (identifies Cloudflare, custom rules)
|
167
|
-
│ ├── CMS Detection Agent (finds WordPress 5.8.1, plugins)
|
168
|
-
│ └── Framework Detection Agent (detects React frontend, Laravel backend)
|
169
|
-
├── API Discovery Agent (spawned after finding api.target.com)
|
170
|
-
│ ├── GraphQL Endpoint Agent
|
171
|
-
│ │ ├── Introspection Validation Agent
|
172
|
-
│ │ │ └── GraphQL Schema Reporting Agent
|
173
|
-
│ │ └── Query Complexity Validation Agent (no findings - properly protected)
|
174
|
-
│ ├── REST API Agent
|
175
|
-
│ │ ├── IDOR Testing Agent (user profiles)
|
176
|
-
│ │ │ ├── IDOR Validation Agent (/api/users/123 → /api/users/124)
|
177
|
-
│ │ │ │ └── IDOR Reporting Agent (PII exposure)
|
178
|
-
│ │ │ └── IDOR Validation Agent (/api/orders/456 → /api/orders/789)
|
179
|
-
│ │ │ └── IDOR Reporting Agent (financial data access)
|
180
|
-
│ │ └── Business Logic Agent
|
181
|
-
│ │ ├── Price Manipulation Validation Agent (validation failed - server-side controls working)
|
182
|
-
│ │ └── Discount Code Validation Agent
|
183
|
-
│ │ └── Coupon Abuse Reporting Agent
|
184
|
-
│ └── JWT Security Agent
|
185
|
-
│ ├── Algorithm Confusion Validation Agent
|
186
|
-
│ │ └── JWT Bypass Reporting Agent
|
187
|
-
│ └── Secret Bruteforce Validation Agent (not valid - strong secret used)
|
188
|
-
├── Admin Panel Agent (spawned after finding admin.target.com)
|
189
|
-
│ ├── Authentication Bypass Agent
|
190
|
-
│ │ ├── Default Credentials Validation Agent (no findings - no default creds)
|
191
|
-
│ │ └── SQL Injection Validation Agent (login form)
|
192
|
-
│ │ └── Auth Bypass Reporting Agent
|
193
|
-
│ └── File Upload Agent
|
194
|
-
│ ├── WebShell Upload Validation Agent
|
195
|
-
│ │ └── RCE via Upload Reporting Agent
|
196
|
-
│ └── Path Traversal Validation Agent (validation failed - proper filtering detected)
|
197
|
-
├── WordPress Agent (spawned after CMS detection)
|
198
|
-
│ ├── Plugin Vulnerability Agent
|
199
|
-
│ │ ├── Contact Form 7 SQLi Validation Agent
|
200
|
-
│ │ │ └── DB Compromise Reporting Agent
|
201
|
-
│ │ └── WooCommerce XSS Validation Agent (validation failed - false positive from scanner)
|
202
|
-
│ └── Theme Vulnerability Agent
|
203
|
-
│ └── LFI Validation Agent (theme editor) (no findings - theme editor disabled)
|
204
|
-
└── Infrastructure Agent (spawned after finding Elasticsearch)
|
205
|
-
├── Elasticsearch Agent
|
206
|
-
│ ├── Open Index Validation Agent
|
207
|
-
│ │ └── Data Exposure Reporting Agent
|
208
|
-
│ └── Script Injection Validation Agent (validation failed - script execution disabled)
|
209
|
-
└── Docker Registry Agent (spawned if found) (no findings - registry not accessible)
|
210
|
-
```
|
211
|
-
|
212
|
-
EXAMPLE 2 - WHITE-BOX Code Security Review (source code provided):
|
213
|
-
```
|
214
|
-
Root Agent (Coordination)
|
215
|
-
├── Static Analysis Agent
|
216
|
-
│ ├── Authentication Code Agent
|
217
|
-
│ │ ├── JWT Implementation Validation Agent
|
218
|
-
│ │ │ └── JWT Weak Secret Reporting Agent
|
219
|
-
│ │ │ └── JWT Secure Implementation Fixing Agent
|
220
|
-
│ │ ├── Session Management Validation Agent
|
221
|
-
│ │ │ └── Session Fixation Reporting Agent
|
222
|
-
│ │ │ └── Session Security Fixing Agent
|
223
|
-
│ │ └── Password Policy Validation Agent
|
224
|
-
│ │ └── Weak Password Rules Reporting Agent
|
225
|
-
│ │ └── Strong Password Policy Fixing Agent
|
226
|
-
│ ├── Input Validation Agent
|
227
|
-
│ │ ├── SQL Query Analysis Validation Agent
|
228
|
-
│ │ │ ├── Prepared Statement Validation Agent
|
229
|
-
│ │ │ │ └── SQLi Risk Reporting Agent
|
230
|
-
│ │ │ │ └── Parameterized Query Fixing Agent
|
231
|
-
│ │ │ └── Dynamic Query Validation Agent
|
232
|
-
│ │ │ └── Query Injection Reporting Agent
|
233
|
-
│ │ │ └── Query Builder Fixing Agent
|
234
|
-
│ │ ├── XSS Prevention Validation Agent
|
235
|
-
│ │ │ └── Output Encoding Validation Agent
|
236
|
-
│ │ │ └── XSS Vulnerability Reporting Agent
|
237
|
-
│ │ │ └── Output Sanitization Fixing Agent
|
238
|
-
│ │ └── File Upload Validation Agent
|
239
|
-
│ │ ├── MIME Type Validation Agent
|
240
|
-
│ │ │ └── File Type Bypass Reporting Agent
|
241
|
-
│ │ │ └── Proper MIME Check Fixing Agent
|
242
|
-
│ │ └── Path Traversal Validation Agent
|
243
|
-
│ │ └── Directory Traversal Reporting Agent
|
244
|
-
│ │ └── Path Sanitization Fixing Agent
|
245
|
-
│ ├── Business Logic Agent
|
246
|
-
│ │ ├── Race Condition Analysis Agent
|
247
|
-
│ │ │ ├── Payment Race Validation Agent
|
248
|
-
│ │ │ │ └── Financial Race Reporting Agent
|
249
|
-
│ │ │ │ └── Atomic Transaction Fixing Agent
|
250
|
-
│ │ │ └── Account Creation Race Validation Agent (validation failed - proper locking found)
|
251
|
-
│ │ ├── Authorization Logic Agent
|
252
|
-
│ │ │ ├── IDOR Prevention Validation Agent
|
253
|
-
│ │ │ │ └── Access Control Bypass Reporting Agent
|
254
|
-
│ │ │ │ └── Authorization Check Fixing Agent
|
255
|
-
│ │ │ └── Privilege Escalation Validation Agent (no findings - RBAC properly implemented)
|
256
|
-
│ │ └── Financial Logic Agent
|
257
|
-
│ │ ├── Price Manipulation Validation Agent (no findings - server-side validation secure)
|
258
|
-
│ │ └── Discount Logic Validation Agent
|
259
|
-
│ │ └── Discount Abuse Reporting Agent
|
260
|
-
│ │ └── Discount Validation Fixing Agent
|
261
|
-
│ └── Cryptography Agent
|
262
|
-
│ ├── Encryption Implementation Agent
|
263
|
-
│ │ ├── AES Usage Validation Agent
|
264
|
-
│ │ │ └── Weak Encryption Reporting Agent
|
265
|
-
│ │ │ └── Strong Crypto Fixing Agent
|
266
|
-
│ │ └── Key Management Validation Agent
|
267
|
-
│ │ └── Hardcoded Key Reporting Agent
|
268
|
-
│ │ └── Secure Key Storage Fixing Agent
|
269
|
-
│ └── Hash Function Agent
|
270
|
-
│ └── Password Hashing Validation Agent
|
271
|
-
│ └── Weak Hash Reporting Agent
|
272
|
-
│ └── bcrypt Implementation Fixing Agent
|
273
|
-
├── Dynamic Testing Agent
|
274
|
-
│ ├── Server Setup Agent
|
275
|
-
│ │ ├── Environment Setup Validation Agent (sets up on port 8080)
|
276
|
-
│ │ ├── Database Setup Validation Agent (initializes test DB)
|
277
|
-
│ │ └── Service Health Validation Agent (confirms running state)
|
278
|
-
│ ├── Runtime SQL Injection Agent
|
279
|
-
│ │ ├── Login Form SQLi Validation Agent
|
280
|
-
│ │ │ └── Auth Bypass SQLi Reporting Agent
|
281
|
-
│ │ │ └── Login Security Fixing Agent
|
282
|
-
│ │ ├── Search Function SQLi Validation Agent
|
283
|
-
│ │ │ └── Data Extraction SQLi Reporting Agent
|
284
|
-
│ │ │ └── Search Sanitization Fixing Agent
|
285
|
-
│ │ └── API Parameter SQLi Validation Agent
|
286
|
-
│ │ └── API SQLi Reporting Agent
|
287
|
-
│ │ └── API Input Validation Fixing Agent
|
288
|
-
│ ├── XSS Testing Agent
|
289
|
-
│ │ ├── Stored XSS Validation Agent (comment system)
|
290
|
-
│ │ │ └── Persistent XSS Reporting Agent
|
291
|
-
│ │ │ └── Input Filtering Fixing Agent
|
292
|
-
│ │ ├── Reflected XSS Validation Agent (search results) (validation failed - output properly encoded)
|
293
|
-
│ │ └── DOM XSS Validation Agent (client-side routing)
|
294
|
-
│ │ └── DOM XSS Reporting Agent
|
295
|
-
│ │ └── Client Sanitization Fixing Agent
|
296
|
-
│ ├── Business Logic Testing Agent
|
297
|
-
│ │ ├── Payment Flow Validation Agent
|
298
|
-
│ │ │ ├── Negative Amount Validation Agent
|
299
|
-
│ │ │ │ └── Payment Bypass Reporting Agent
|
300
|
-
│ │ │ │ └── Amount Validation Fixing Agent
|
301
|
-
│ │ │ └── Currency Manipulation Validation Agent
|
302
|
-
│ │ │ └── Currency Fraud Reporting Agent
|
303
|
-
│ │ │ └── Currency Lock Fixing Agent
|
304
|
-
│ │ ├── User Registration Validation Agent
|
305
|
-
│ │ │ └── Email Verification Bypass Validation Agent
|
306
|
-
│ │ │ └── Email Security Reporting Agent
|
307
|
-
│ │ │ └── Verification Enforcement Fixing Agent
|
308
|
-
│ │ └── File Processing Validation Agent
|
309
|
-
│ │ ├── XXE Attack Validation Agent
|
310
|
-
│ │ │ └── XML Entity Reporting Agent
|
311
|
-
│ │ │ └── XML Security Fixing Agent
|
312
|
-
│ │ └── Deserialization Validation Agent
|
313
|
-
│ │ └── Object Injection Reporting Agent
|
314
|
-
│ │ └── Safe Deserialization Fixing Agent
|
315
|
-
│ └── API Security Testing Agent
|
316
|
-
│ ├── GraphQL Security Agent
|
317
|
-
│ │ ├── Query Depth Validation Agent
|
318
|
-
│ │ │ └── DoS Attack Reporting Agent
|
319
|
-
│ │ │ └── Query Limiting Fixing Agent
|
320
|
-
│ │ └── Schema Introspection Validation Agent (no findings - introspection disabled in production)
|
321
|
-
│ └── REST API Agent
|
322
|
-
│ ├── Rate Limiting Validation Agent (validation failed - rate limiting working properly)
|
323
|
-
│ └── CORS Validation Agent
|
324
|
-
│ └── Origin Bypass Reporting Agent
|
325
|
-
│ └── CORS Policy Fixing Agent
|
326
|
-
└── Infrastructure Code Agent
|
327
|
-
├── Docker Security Agent
|
328
|
-
│ ├── Dockerfile Analysis Validation Agent
|
329
|
-
│ │ └── Container Privilege Reporting Agent
|
330
|
-
│ │ └── Secure Container Fixing Agent
|
331
|
-
│ └── Secret Management Validation Agent
|
332
|
-
│ └── Hardcoded Secret Reporting Agent
|
333
|
-
│ └── Secret Externalization Fixing Agent
|
334
|
-
├── CI/CD Pipeline Agent
|
335
|
-
│ └── Pipeline Security Validation Agent
|
336
|
-
│ └── Pipeline Injection Reporting Agent
|
337
|
-
│ └── Pipeline Hardening Fixing Agent
|
338
|
-
└── Cloud Configuration Agent
|
339
|
-
├── AWS Config Validation Agent
|
340
|
-
│ └── S3 Bucket Exposure Reporting Agent
|
341
|
-
│ └── Bucket Security Fixing Agent
|
342
|
-
└── K8s Config Validation Agent
|
343
|
-
└── Pod Security Reporting Agent
|
344
|
-
└── Security Context Fixing Agent
|
345
|
-
```
|
147
|
+
AGENT ISOLATION & SANDBOXING:
|
148
|
+
- Each subagent runs in a completely isolated sandbox environment
|
149
|
+
- Each agent has its own: browser sessions, terminal sessions, proxy (history and scope rules), /workspace directory, environment variables, running processes
|
150
|
+
- Agents cannot share network ports or interfere with each other's processes
|
151
|
+
- Only shared resource is /shared_workspace for collaboration and file exchange
|
152
|
+
- Use /shared_workspace to pass files, reports, and coordination data between agents
|
346
153
|
|
347
154
|
SIMPLE WORKFLOW RULES:
|
348
155
|
|
@@ -423,7 +230,7 @@ Tool calls use XML format:
|
|
423
230
|
CRITICAL RULES:
|
424
231
|
1. One tool call per message
|
425
232
|
2. Tool call must be last in message
|
426
|
-
3. End response after </function> tag
|
233
|
+
3. End response after </function> tag. It's your stop word. Do not continue after it.
|
427
234
|
5. Thinking is NOT optional - it's required for reasoning and success
|
428
235
|
|
429
236
|
SPRAYING EXECUTION NOTE:
|
@@ -8,11 +8,11 @@ import asyncio
|
|
8
8
|
import logging
|
9
9
|
import os
|
10
10
|
import secrets
|
11
|
+
import shutil
|
11
12
|
import sys
|
12
13
|
from pathlib import Path
|
13
14
|
from typing import Any
|
14
15
|
from urllib.parse import urlparse
|
15
|
-
import shutil
|
16
16
|
|
17
17
|
import docker
|
18
18
|
import litellm
|
@@ -74,7 +74,7 @@ def validate_environment() -> None:
|
|
74
74
|
error_text.append("• ", style="white")
|
75
75
|
error_text.append("STRIX_LLM", style="bold cyan")
|
76
76
|
error_text.append(
|
77
|
-
" - Model name to use with litellm (e.g., '
|
77
|
+
" - Model name to use with litellm (e.g., 'openai/gpt-5')\n",
|
78
78
|
style="white",
|
79
79
|
)
|
80
80
|
error_text.append("• ", style="white")
|
@@ -91,9 +91,7 @@ def validate_environment() -> None:
|
|
91
91
|
)
|
92
92
|
|
93
93
|
error_text.append("\nExample setup:\n", style="white")
|
94
|
-
error_text.append(
|
95
|
-
"export STRIX_LLM='anthropic/claude-opus-4-1-20250805'\n", style="dim white"
|
96
|
-
)
|
94
|
+
error_text.append("export STRIX_LLM='openai/gpt-5'\n", style="dim white")
|
97
95
|
error_text.append("export LLM_API_KEY='your-api-key-here'\n", style="dim white")
|
98
96
|
if missing_optional_vars:
|
99
97
|
error_text.append(
|
@@ -127,7 +125,9 @@ def check_docker_installed() -> None:
|
|
127
125
|
error_text.append("DOCKER NOT INSTALLED", style="bold red")
|
128
126
|
error_text.append("\n\n", style="white")
|
129
127
|
error_text.append("The 'docker' CLI was not found in your PATH.\n", style="white")
|
130
|
-
error_text.append(
|
128
|
+
error_text.append(
|
129
|
+
"Please install Docker and ensure the 'docker' command is available.\n\n", style="white"
|
130
|
+
)
|
131
131
|
|
132
132
|
panel = Panel(
|
133
133
|
error_text,
|
@@ -144,7 +144,7 @@ async def warm_up_llm() -> None:
|
|
144
144
|
console = Console()
|
145
145
|
|
146
146
|
try:
|
147
|
-
model_name = os.getenv("STRIX_LLM", "
|
147
|
+
model_name = os.getenv("STRIX_LLM", "openai/gpt-5")
|
148
148
|
api_key = os.getenv("LLM_API_KEY")
|
149
149
|
|
150
150
|
if api_key:
|
@@ -9,7 +9,7 @@ class LLMConfig:
|
|
9
9
|
enable_prompt_caching: bool = True,
|
10
10
|
prompt_modules: list[str] | None = None,
|
11
11
|
):
|
12
|
-
self.model_name = model_name or os.getenv("STRIX_LLM", "
|
12
|
+
self.model_name = model_name or os.getenv("STRIX_LLM", "openai/gpt-5")
|
13
13
|
|
14
14
|
if not self.model_name:
|
15
15
|
raise ValueError("STRIX_LLM environment variable must be set and not empty")
|
@@ -28,6 +28,39 @@ api_key = os.getenv("LLM_API_KEY")
|
|
28
28
|
if api_key:
|
29
29
|
litellm.api_key = api_key
|
30
30
|
|
31
|
+
MODELS_WITHOUT_STOP_WORDS = [
|
32
|
+
"gpt-5",
|
33
|
+
"gpt-5-mini",
|
34
|
+
"gpt-5-nano",
|
35
|
+
"o1-mini",
|
36
|
+
"o1-preview",
|
37
|
+
"o1",
|
38
|
+
"o1-2024-12-17",
|
39
|
+
"o3",
|
40
|
+
"o3-2025-04-16",
|
41
|
+
"o3-mini-2025-01-31",
|
42
|
+
"o3-mini",
|
43
|
+
"o4-mini",
|
44
|
+
"o4-mini-2025-04-16",
|
45
|
+
"grok-4-0709",
|
46
|
+
]
|
47
|
+
|
48
|
+
REASONING_EFFORT_SUPPORTED_MODELS = [
|
49
|
+
"gpt-5",
|
50
|
+
"gpt-5-mini",
|
51
|
+
"gpt-5-nano",
|
52
|
+
"o1-2024-12-17",
|
53
|
+
"o1",
|
54
|
+
"o3",
|
55
|
+
"o3-2025-04-16",
|
56
|
+
"o3-mini-2025-01-31",
|
57
|
+
"o3-mini",
|
58
|
+
"o4-mini",
|
59
|
+
"o4-mini-2025-04-16",
|
60
|
+
"gemini-2.5-flash",
|
61
|
+
"gemini-2.5-pro",
|
62
|
+
]
|
63
|
+
|
31
64
|
|
32
65
|
class StepRole(str, Enum):
|
33
66
|
AGENT = "agent"
|
@@ -240,17 +273,48 @@ class LLM:
|
|
240
273
|
"supported": supports_prompt_caching(self.config.model_name),
|
241
274
|
}
|
242
275
|
|
276
|
+
def _should_include_stop_param(self) -> bool:
|
277
|
+
if not self.config.model_name:
|
278
|
+
return True
|
279
|
+
|
280
|
+
actual_model_name = self.config.model_name.split("/")[-1].lower()
|
281
|
+
model_name_lower = self.config.model_name.lower()
|
282
|
+
|
283
|
+
return not any(
|
284
|
+
actual_model_name == unsupported_model.lower()
|
285
|
+
or model_name_lower == unsupported_model.lower()
|
286
|
+
for unsupported_model in MODELS_WITHOUT_STOP_WORDS
|
287
|
+
)
|
288
|
+
|
289
|
+
def _should_include_reasoning_effort(self) -> bool:
|
290
|
+
if not self.config.model_name:
|
291
|
+
return False
|
292
|
+
|
293
|
+
actual_model_name = self.config.model_name.split("/")[-1].lower()
|
294
|
+
model_name_lower = self.config.model_name.lower()
|
295
|
+
|
296
|
+
return any(
|
297
|
+
actual_model_name == supported_model.lower()
|
298
|
+
or model_name_lower == supported_model.lower()
|
299
|
+
for supported_model in REASONING_EFFORT_SUPPORTED_MODELS
|
300
|
+
)
|
301
|
+
|
243
302
|
async def _make_request(
|
244
303
|
self,
|
245
304
|
messages: list[dict[str, Any]],
|
246
305
|
) -> ModelResponse:
|
247
|
-
completion_args = {
|
306
|
+
completion_args: dict[str, Any] = {
|
248
307
|
"model": self.config.model_name,
|
249
308
|
"messages": messages,
|
250
309
|
"temperature": self.config.temperature,
|
251
|
-
"stop": ["</function>"],
|
252
310
|
}
|
253
311
|
|
312
|
+
if self._should_include_stop_param():
|
313
|
+
completion_args["stop"] = ["</function>"]
|
314
|
+
|
315
|
+
if self._should_include_reasoning_effort():
|
316
|
+
completion_args["reasoning_effort"] = "medium"
|
317
|
+
|
254
318
|
queue = get_global_queue()
|
255
319
|
response = await queue.make_request(completion_args)
|
256
320
|
|
@@ -145,7 +145,7 @@ class MemoryCompressor:
|
|
145
145
|
model_name: str | None = None,
|
146
146
|
):
|
147
147
|
self.max_images = max_images
|
148
|
-
self.model_name = model_name or os.getenv("STRIX_LLM", "
|
148
|
+
self.model_name = model_name or os.getenv("STRIX_LLM", "openai/gpt-5")
|
149
149
|
|
150
150
|
if not self.model_name:
|
151
151
|
raise ValueError("STRIX_LLM environment variable must be set and not empty")
|
@@ -49,25 +49,21 @@ def generate_modules_description() -> str:
|
|
49
49
|
if not available_modules:
|
50
50
|
return "No prompt modules available"
|
51
51
|
|
52
|
-
|
52
|
+
all_module_names = get_all_module_names()
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
if not all_module_names:
|
55
|
+
return "No prompt modules available"
|
56
|
+
|
57
|
+
sorted_modules = sorted(all_module_names)
|
58
|
+
modules_str = ", ".join(sorted_modules)
|
57
59
|
|
58
60
|
description = (
|
59
|
-
f"List of prompt modules to load for this agent (max 3). "
|
60
|
-
f"Available modules: {', '.join(description_parts)}. "
|
61
|
+
f"List of prompt modules to load for this agent (max 3). Available modules: {modules_str}. "
|
61
62
|
)
|
62
63
|
|
63
|
-
example_modules = []
|
64
|
-
for modules in available_modules.values():
|
65
|
-
example_modules.extend(modules[:2])
|
66
|
-
if len(example_modules) >= 2:
|
67
|
-
break
|
68
|
-
|
64
|
+
example_modules = sorted_modules[:2]
|
69
65
|
if example_modules:
|
70
|
-
example = f"Example: {example_modules
|
66
|
+
example = f"Example: {', '.join(example_modules)} for specialized agent"
|
71
67
|
description += example
|
72
68
|
|
73
69
|
return description
|
{strix_agent-0.1.8 → strix_agent-0.1.9}/strix/prompts/vulnerabilities/authentication_jwt.jinja
RENAMED
@@ -5,8 +5,8 @@
|
|
5
5
|
|
6
6
|
<jwt_structure>
|
7
7
|
header.payload.signature
|
8
|
-
- Header: {"alg":"HS256","typ":"JWT"}
|
9
|
-
- Payload: {"sub":"1234","name":"John","iat":1516239022}
|
8
|
+
- Header: {% raw %}{"alg":"HS256","typ":"JWT"}{% endraw %}
|
9
|
+
- Payload: {% raw %}{"sub":"1234","name":"John","iat":1516239022}{% endraw %}
|
10
10
|
- Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
|
11
11
|
</jwt_structure>
|
12
12
|
|
@@ -19,7 +19,7 @@ RS256 to HS256:
|
|
19
19
|
</algorithm_confusion>
|
20
20
|
|
21
21
|
<none_algorithm>
|
22
|
-
- Set "alg": "none" in header
|
22
|
+
- Set {% raw %}"alg": "none"{% endraw %} in header
|
23
23
|
- Remove signature completely (keep the trailing dot)
|
24
24
|
</none_algorithm>
|
25
25
|
|
@@ -28,16 +28,16 @@ Common secrets: 'secret', 'password', '123456', 'key', 'jwt_secret', 'your-256-b
|
|
28
28
|
</weak_secrets>
|
29
29
|
|
30
30
|
<kid_manipulation>
|
31
|
-
- SQL Injection: "kid": "key' UNION SELECT 'secret'--"
|
32
|
-
- Command injection: "kid": "|sleep 10"
|
33
|
-
- Path traversal: "kid": "../../../../../../dev/null"
|
31
|
+
- SQL Injection: {% raw %}"kid": "key' UNION SELECT 'secret'--"{% endraw %}
|
32
|
+
- Command injection: {% raw %}"kid": "|sleep 10"{% endraw %}
|
33
|
+
- Path traversal: {% raw %}"kid": "../../../../../../dev/null"{% endraw %}
|
34
34
|
</kid_manipulation>
|
35
35
|
</common_attacks>
|
36
36
|
|
37
37
|
<advanced_techniques>
|
38
38
|
<jwk_injection>
|
39
39
|
Embed public key in token header:
|
40
|
-
{"jwk": {"kty": "RSA", "n": "your-public-key-n", "e": "AQAB"}}
|
40
|
+
{% raw %}{"jwk": {"kty": "RSA", "n": "your-public-key-n", "e": "AQAB"}}{% endraw %}
|
41
41
|
</jwk_injection>
|
42
42
|
|
43
43
|
<jku_manipulation>
|
@@ -48,7 +48,7 @@ HTML form auto-submit:
|
|
48
48
|
<json_csrf>
|
49
49
|
For JSON endpoints:
|
50
50
|
<form enctype="text/plain" action="https://target.com/api">
|
51
|
-
<input name='{"amount":1000,"to":"attacker","ignore":"' value='"}'>
|
51
|
+
<input name='{% raw %}{"amount":1000,"to":"attacker","ignore":"{% endraw %}' value='"}'>
|
52
52
|
</form>
|
53
53
|
</json_csrf>
|
54
54
|
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
<advanced_enumeration>
|
17
17
|
- Boundary values: 0, -1, null, empty string, max int
|
18
|
-
- Different formats: {"id":123} vs {"id":"123"}
|
18
|
+
- Different formats: {% raw %}{"id":123} vs {"id":"123"}{% endraw %}
|
19
19
|
- ID patterns: increment, decrement, similar patterns
|
20
20
|
- Wildcard testing: *, %, _, all
|
21
21
|
- Array notation: id[]=123&id[]=456
|
@@ -51,7 +51,7 @@ for i in range(1, 10000):
|
|
51
51
|
<type_confusion>
|
52
52
|
- String where int expected: "123" vs 123
|
53
53
|
- Array where single value expected: [123] vs 123
|
54
|
-
- Object injection: {"id": {"$ne": null}}
|
54
|
+
- Object injection: {% raw %}{"id": {"$ne": null}}{% endraw %}
|
55
55
|
</type_confusion>
|
56
56
|
</exploitation_techniques>
|
57
57
|
|
@@ -106,7 +106,7 @@ query { u1: user(id: 123) { data } u2: user(id: 456) { data } }
|
|
106
106
|
|
107
107
|
<websocket_idor>
|
108
108
|
Subscribe to other users' channels:
|
109
|
-
{"subscribe": "user_456_notifications"}
|
109
|
+
{% raw %}{"subscribe": "user_456_notifications"}{% endraw %}
|
110
110
|
</websocket_idor>
|
111
111
|
|
112
112
|
<file_path_idor>
|
@@ -152,9 +152,9 @@ PostgreSQL:
|
|
152
152
|
|
153
153
|
<nosql_injection>
|
154
154
|
<mongodb>
|
155
|
-
{"username": {"$ne": null}, "password": {"$ne": null}}
|
156
|
-
{"$where": "this.username == 'admin'"}
|
157
|
-
{"username": {"$regex": "^admin"}}
|
155
|
+
{% raw %}{"username": {"$ne": null}, "password": {"$ne": null}}{% endraw %}
|
156
|
+
{% raw %}{"$where": "this.username == 'admin'"}{% endraw %}
|
157
|
+
{% raw %}{"username": {"$regex": "^admin"}}{% endraw %}
|
158
158
|
</mongodb>
|
159
159
|
|
160
160
|
<graphql>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
- Headers: User-Agent, Referer, X-Forwarded-For
|
10
10
|
- Cookies (if reflected)
|
11
11
|
- File uploads (filename, metadata)
|
12
|
-
- JSON endpoints: {"user":"<payload>"}
|
12
|
+
- JSON endpoints: {% raw %}{"user":"<payload>"}{% endraw %}
|
13
13
|
- postMessage handlers
|
14
14
|
- DOM properties: location.hash, document.referrer
|
15
15
|
- WebSocket messages
|
@@ -97,7 +97,7 @@ jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</
|
|
97
97
|
|
98
98
|
<csp_bypasses>
|
99
99
|
- JSONP endpoints: <script src="//site.com/jsonp?callback=alert">
|
100
|
-
- AngularJS: {{constructor.constructor('alert(1)')()}}
|
100
|
+
- AngularJS: {% raw %}{{constructor.constructor('alert(1)')()}}{% endraw %}
|
101
101
|
- Script gadgets in allowed libraries
|
102
102
|
- Base tag injection: <base href="//evil.com/">
|
103
103
|
- Object/embed: <object data="data:text/html,<script>alert(1)</script>">
|
@@ -145,7 +145,7 @@ navigator.mediaDevices.getUserMedia({video:true}).then(s=>...)
|
|
145
145
|
</markdown>
|
146
146
|
|
147
147
|
<react_vue>
|
148
|
-
- dangerouslySetInnerHTML={{__html: payload}}
|
148
|
+
- dangerouslySetInnerHTML={% raw %}{{__html: payload}}{% endraw %}
|
149
149
|
- v-html directive bypass
|
150
150
|
</react_vue>
|
151
151
|
|
@@ -91,7 +91,7 @@ evil.dtd:
|
|
91
91
|
|
92
92
|
<specific_contexts>
|
93
93
|
<json_xxe>
|
94
|
-
{"name": "test", "content": "<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><x>&xxe;</x>"}
|
94
|
+
{% raw %}{"name": "test", "content": "<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><x>&xxe;</x>"}{% endraw %}
|
95
95
|
</json_xxe>
|
96
96
|
|
97
97
|
<soap_xxe>
|
@@ -57,6 +57,10 @@ def _run_agent_in_thread(
|
|
57
57
|
- Work independently with your own approach
|
58
58
|
- Use agent_finish when complete to report back to parent
|
59
59
|
- You are a SPECIALIST for this specific task
|
60
|
+
- The previous browser, sessions, proxy history, and files in /workspace were for your
|
61
|
+
parent agent. Do not depend on them.
|
62
|
+
- You are starting with a fresh context. Fresh proxy, browser, and files.
|
63
|
+
Only stuff in /shared_workspace is passed to you from context.
|
60
64
|
</instructions>
|
61
65
|
</agent_delegation>"""
|
62
66
|
|
@@ -192,16 +196,6 @@ def create_agent(
|
|
192
196
|
if prompt_modules:
|
193
197
|
module_list = [m.strip() for m in prompt_modules.split(",") if m.strip()]
|
194
198
|
|
195
|
-
if "root_agent" in module_list:
|
196
|
-
return {
|
197
|
-
"success": False,
|
198
|
-
"error": (
|
199
|
-
"The 'root_agent' module is reserved for the main agent "
|
200
|
-
"and cannot be used by sub-agents"
|
201
|
-
),
|
202
|
-
"agent_id": None,
|
203
|
-
}
|
204
|
-
|
205
199
|
if len(module_list) > 3:
|
206
200
|
return {
|
207
201
|
"success": False,
|
{strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/agents_graph/agents_graph_actions_schema.xml
RENAMED
@@ -59,7 +59,7 @@ Use this tool when:
|
|
59
59
|
<tool name="create_agent">
|
60
60
|
<description>Create and spawn a new agent to handle a specific subtask.
|
61
61
|
|
62
|
-
|
62
|
+
Only create a new agent if no existing agent is handling the specific task.</description>
|
63
63
|
<details>The new agent inherits the parent's conversation history and context up to the point
|
64
64
|
of creation, then continues with its assigned subtask. This enables decomposition
|
65
65
|
of complex penetration testing tasks into specialized sub-agents.
|
@@ -67,12 +67,6 @@ MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any
|
|
67
67
|
The agent runs asynchronously and independently, allowing the parent to continue
|
68
68
|
immediately while the new agent executes its task in the background.
|
69
69
|
|
70
|
-
CRITICAL: Before calling this tool, you MUST first use view_agent_graph to:
|
71
|
-
- Examine all existing agents and their current tasks
|
72
|
-
- Verify no agent is already working on the same or similar objective
|
73
|
-
- Avoid duplication of effort and resource waste
|
74
|
-
- Ensure efficient coordination across the multi-agent system
|
75
|
-
|
76
70
|
If you as a parent agent don't absolutely have anything to do while your subagents are running, you can use wait_for_message tool. The subagent will continue to run in the background, and update you when it's done.
|
77
71
|
</details>
|
78
72
|
<parameters>
|
@@ -93,9 +87,6 @@ MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any
|
|
93
87
|
<description>Response containing: - agent_id: Unique identifier for the created agent - success: Whether the agent was created successfully - message: Status message - agent_info: Details about the created agent</description>
|
94
88
|
</returns>
|
95
89
|
<examples>
|
96
|
-
# REQUIRED: First check agent graph before creating any new agent
|
97
|
-
<function=view_agent_graph>
|
98
|
-
</function>
|
99
90
|
# REQUIRED: Check agent graph again before creating another agent
|
100
91
|
<function=view_agent_graph>
|
101
92
|
</function>
|
@@ -108,7 +99,6 @@ MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any
|
|
108
99
|
<parameter=prompt_modules>sql_injection</parameter>
|
109
100
|
</function>
|
110
101
|
|
111
|
-
# Create specialized authentication testing agent with multiple modules (comma-separated)
|
112
102
|
<function=create_agent>
|
113
103
|
<parameter=task>Test authentication mechanisms, JWT implementation, and session management
|
114
104
|
for security vulnerabilities and bypass techniques.</parameter>
|
@@ -63,6 +63,10 @@
|
|
63
63
|
- When you need multiple characters sent as a single unit
|
64
64
|
12. Do NOT use terminal actions for file editing or writing. Use the replace_in_file,
|
65
65
|
write_to_file, or read_file tools instead.
|
66
|
+
13. PREFER SIMPLE COMMANDS: Avoid complex multiline commands with nested quotes or
|
67
|
+
complex syntax. Break down complex operations into simpler, individual commands
|
68
|
+
for better reliability and readability. Never send multiple commands in a single
|
69
|
+
input list with multiple "Enter" keys - execute one command at a time instead.
|
66
70
|
</notes>
|
67
71
|
<examples>
|
68
72
|
# Create new terminal with Node.js (default terminal)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{strix_agent-0.1.8 → strix_agent-0.1.9}/strix/tools/web_search/web_search_actions_schema.xml
RENAMED
File without changes
|