strix-agent 0.1.8__tar.gz → 0.1.10__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.
Files changed (106) hide show
  1. {strix_agent-0.1.8 → strix_agent-0.1.10}/PKG-INFO +6 -4
  2. {strix_agent-0.1.8 → strix_agent-0.1.10}/README.md +2 -2
  3. {strix_agent-0.1.8 → strix_agent-0.1.10}/pyproject.toml +6 -3
  4. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/agents/StrixAgent/strix_agent.py +18 -6
  5. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/agents/StrixAgent/system_prompt.jinja +29 -203
  6. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/agents/base_agent.py +3 -0
  7. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/app.py +3 -1
  8. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/main.py +95 -8
  9. strix_agent-0.1.10/strix/cli/tool_components/terminal_renderer.py +131 -0
  10. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/llm/config.py +1 -1
  11. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/llm/llm.py +66 -2
  12. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/llm/memory_compressor.py +1 -1
  13. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/__init__.py +9 -13
  14. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/authentication_jwt.jinja +7 -7
  15. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/csrf.jinja +1 -1
  16. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/idor.jinja +3 -3
  17. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/rce.jinja +1 -1
  18. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/sql_injection.jinja +3 -3
  19. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/xss.jinja +3 -3
  20. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/xxe.jinja +1 -1
  21. strix_agent-0.1.10/strix/runtime/docker_runtime.py +315 -0
  22. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/runtime/runtime.py +3 -2
  23. strix_agent-0.1.10/strix/runtime/tool_server.py +205 -0
  24. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/agents_graph/agents_graph_actions.py +4 -10
  25. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/agents_graph/agents_graph_actions_schema.xml +18 -12
  26. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/argument_parser.py +2 -1
  27. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/executor.py +3 -0
  28. strix_agent-0.1.10/strix/tools/terminal/__init__.py +4 -0
  29. strix_agent-0.1.10/strix/tools/terminal/terminal_actions.py +35 -0
  30. strix_agent-0.1.10/strix/tools/terminal/terminal_actions_schema.xml +143 -0
  31. strix_agent-0.1.10/strix/tools/terminal/terminal_manager.py +151 -0
  32. strix_agent-0.1.10/strix/tools/terminal/terminal_session.py +447 -0
  33. strix_agent-0.1.8/strix/cli/tool_components/terminal_renderer.py +0 -99
  34. strix_agent-0.1.8/strix/runtime/docker_runtime.py +0 -271
  35. strix_agent-0.1.8/strix/runtime/tool_server.py +0 -97
  36. strix_agent-0.1.8/strix/tools/terminal/__init__.py +0 -4
  37. strix_agent-0.1.8/strix/tools/terminal/terminal_actions.py +0 -53
  38. strix_agent-0.1.8/strix/tools/terminal/terminal_actions_schema.xml +0 -114
  39. strix_agent-0.1.8/strix/tools/terminal/terminal_instance.py +0 -231
  40. strix_agent-0.1.8/strix/tools/terminal/terminal_manager.py +0 -191
  41. {strix_agent-0.1.8 → strix_agent-0.1.10}/LICENSE +0 -0
  42. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/__init__.py +0 -0
  43. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/agents/StrixAgent/__init__.py +0 -0
  44. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/agents/__init__.py +0 -0
  45. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/agents/state.py +0 -0
  46. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/__init__.py +0 -0
  47. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/assets/cli.tcss +0 -0
  48. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/__init__.py +0 -0
  49. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/agents_graph_renderer.py +0 -0
  50. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/base_renderer.py +0 -0
  51. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/browser_renderer.py +0 -0
  52. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/file_edit_renderer.py +0 -0
  53. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/finish_renderer.py +0 -0
  54. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/notes_renderer.py +0 -0
  55. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/proxy_renderer.py +0 -0
  56. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/python_renderer.py +0 -0
  57. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/registry.py +0 -0
  58. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/reporting_renderer.py +0 -0
  59. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/scan_info_renderer.py +0 -0
  60. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/thinking_renderer.py +0 -0
  61. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/user_message_renderer.py +0 -0
  62. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tool_components/web_search_renderer.py +0 -0
  63. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/cli/tracer.py +0 -0
  64. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/llm/__init__.py +0 -0
  65. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/llm/request_queue.py +0 -0
  66. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/llm/utils.py +0 -0
  67. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/coordination/root_agent.jinja +0 -0
  68. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/business_logic.jinja +0 -0
  69. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/race_conditions.jinja +0 -0
  70. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/prompts/vulnerabilities/ssrf.jinja +0 -0
  71. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/runtime/__init__.py +0 -0
  72. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/__init__.py +0 -0
  73. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/agents_graph/__init__.py +0 -0
  74. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/browser/__init__.py +0 -0
  75. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/browser/browser_actions.py +0 -0
  76. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/browser/browser_actions_schema.xml +0 -0
  77. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/browser/browser_instance.py +0 -0
  78. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/browser/tab_manager.py +0 -0
  79. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/file_edit/__init__.py +0 -0
  80. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/file_edit/file_edit_actions.py +0 -0
  81. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/file_edit/file_edit_actions_schema.xml +0 -0
  82. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/finish/__init__.py +0 -0
  83. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/finish/finish_actions.py +0 -0
  84. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/finish/finish_actions_schema.xml +0 -0
  85. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/notes/__init__.py +0 -0
  86. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/notes/notes_actions.py +0 -0
  87. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/notes/notes_actions_schema.xml +0 -0
  88. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/proxy/__init__.py +0 -0
  89. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/proxy/proxy_actions.py +0 -0
  90. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/proxy/proxy_actions_schema.xml +0 -0
  91. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/proxy/proxy_manager.py +0 -0
  92. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/python/__init__.py +0 -0
  93. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/python/python_actions.py +0 -0
  94. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/python/python_actions_schema.xml +0 -0
  95. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/python/python_instance.py +0 -0
  96. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/python/python_manager.py +0 -0
  97. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/registry.py +0 -0
  98. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/reporting/__init__.py +0 -0
  99. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/reporting/reporting_actions.py +0 -0
  100. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/reporting/reporting_actions_schema.xml +0 -0
  101. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/thinking/__init__.py +0 -0
  102. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/thinking/thinking_actions.py +0 -0
  103. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/thinking/thinking_actions_schema.xml +0 -0
  104. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/web_search/__init__.py +0 -0
  105. {strix_agent-0.1.8 → strix_agent-0.1.10}/strix/tools/web_search/web_search_actions.py +0 -0
  106. {strix_agent-0.1.8 → strix_agent-0.1.10}/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.8
3
+ Version: 0.1.10
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,8 +22,10 @@ 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.5.post1,<2.0.0)
25
+ Requires-Dist: libtmux (>=0.46.2,<0.47.0)
26
+ Requires-Dist: litellm[proxy] (>=1.75.8,<1.76.0)
26
27
  Requires-Dist: numpydoc (>=1.8.0,<2.0.0)
28
+ Requires-Dist: openai (>=1.99.5,<1.100.0)
27
29
  Requires-Dist: openhands-aci (>=0.3.0,<0.4.0)
28
30
  Requires-Dist: playwright (>=1.48.0,<2.0.0)
29
31
  Requires-Dist: pydantic[email] (>=2.11.3,<3.0.0)
@@ -68,7 +70,7 @@ Strix are autonomous AI agents that act just like real hackers - they run your c
68
70
  pipx install strix-agent
69
71
 
70
72
  # Configure AI provider
71
- export STRIX_LLM="anthropic/claude-opus-4-1-20250805"
73
+ export STRIX_LLM="openai/gpt-5"
72
74
  export LLM_API_KEY="your-api-key"
73
75
 
74
76
  # Run security assessment
@@ -131,7 +133,7 @@ strix --target api.your-app.com --instruction "Prioritize authentication and aut
131
133
 
132
134
  ```bash
133
135
  # Required
134
- export STRIX_LLM="anthropic/claude-opus-4-1-20250805"
136
+ export STRIX_LLM="openai/gpt-5"
135
137
  export LLM_API_KEY="your-api-key"
136
138
 
137
139
  # 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="anthropic/claude-opus-4-1-20250805"
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="anthropic/claude-opus-4-1-20250805"
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.8"
3
+ version = "0.1.10"
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,8 @@ strix = "strix.cli.main:main"
45
45
  python = "^3.12"
46
46
  fastapi = "*"
47
47
  uvicorn = "*"
48
- litellm = {extras = ["proxy"], version = "^1.75.5.post1"}
48
+ litellm = { version = "~1.75.8", extras = ["proxy"] }
49
+ openai = ">=1.99.5,<1.100.0"
49
50
  tenacity = "^9.0.0"
50
51
  numpydoc = "^1.8.0"
51
52
  pydantic = {extras = ["email"], version = "^2.11.3"}
@@ -59,6 +60,7 @@ textual = "^4.0.0"
59
60
  xmltodict = "^0.13.0"
60
61
  pyte = "^0.8.1"
61
62
  requests = "^2.32.0"
63
+ libtmux = "^0.46.2"
62
64
 
63
65
  [tool.poetry.group.dev.dependencies]
64
66
  # Type checking and static analysis
@@ -126,6 +128,7 @@ module = [
126
128
  "gql.*",
127
129
  "textual.*",
128
130
  "pyte.*",
131
+ "libtmux.*",
129
132
  ]
130
133
  ignore_missing_imports = true
131
134
 
@@ -26,9 +26,21 @@ class StrixAgent(BaseAgent):
26
26
  task_parts = []
27
27
 
28
28
  if scan_type == "repository":
29
- task_parts.append(
30
- f"Perform a security assessment of the Git repository: {target['target_repo']}"
31
- )
29
+ repo_url = target["target_repo"]
30
+ cloned_path = target.get("cloned_repo_path")
31
+
32
+ if cloned_path:
33
+ workspace_path = "/workspace"
34
+ task_parts.append(
35
+ f"Perform a security assessment of the Git repository: {repo_url}. "
36
+ f"The repository has been cloned from '{repo_url}' to '{cloned_path}' "
37
+ f"(host path) and then copied to '{workspace_path}' in your environment."
38
+ f"Analyze the codebase at: {workspace_path}"
39
+ )
40
+ else:
41
+ task_parts.append(
42
+ f"Perform a security assessment of the Git repository: {repo_url}"
43
+ )
32
44
 
33
45
  elif scan_type == "web_application":
34
46
  task_parts.append(
@@ -37,12 +49,12 @@ class StrixAgent(BaseAgent):
37
49
 
38
50
  elif scan_type == "local_code":
39
51
  original_path = target.get("target_path", "unknown")
40
- shared_workspace_path = "/shared_workspace"
52
+ workspace_path = "/workspace"
41
53
  task_parts.append(
42
54
  f"Perform a security assessment of the local codebase. "
43
55
  f"The code from '{original_path}' (user host path) has been copied to "
44
- f"'{shared_workspace_path}' in your environment. "
45
- f"Analyze the codebase at: {shared_workspace_path}"
56
+ f"'{workspace_path}' in your environment. "
57
+ f"Analyze the codebase at: {workspace_path}"
46
58
  )
47
59
 
48
60
  else:
@@ -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,11 @@ 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 ENVIRONMENTS:
147
- - Each agent has isolated: browser, terminal, proxy, /workspace
148
- - Shared access to /shared_workspace for collaboration
149
- - Use /shared_workspace to pass files between agents
150
-
151
- AGENT HIERARCHY TREE EXAMPLES:
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
+ - All agents run in the same shared Docker container for efficiency
149
+ - Each agent has its own: browser sessions, terminal sessions
150
+ - All agents share the same /workspace directory and proxy history
151
+ - Agents can see each other's files and proxy traffic for better collaboration
346
152
 
347
153
  SIMPLE WORKFLOW RULES:
348
154
 
@@ -399,6 +205,27 @@ CRITICAL RULES:
399
205
  - **ONE AGENT = ONE TASK** - Don't let agents do multiple unrelated jobs
400
206
  - **SPAWN REACTIVELY** - Create new agents based on what you discover
401
207
  - **ONLY REPORTING AGENTS** can use create_vulnerability_report tool
208
+ - **AGENT SPECIALIZATION MANDATORY** - Each agent must be highly specialized with maximum 3 prompt modules
209
+ - **NO GENERIC AGENTS** - Avoid creating broad, multi-purpose agents that dilute focus
210
+
211
+ AGENT SPECIALIZATION EXAMPLES:
212
+
213
+ GOOD SPECIALIZATION:
214
+ - "SQLi Validation Agent" with prompt_modules: sql_injection
215
+ - "XSS Discovery Agent" with prompt_modules: xss
216
+ - "Auth Testing Agent" with prompt_modules: authentication_jwt, business_logic
217
+ - "SSRF + XXE Agent" with prompt_modules: ssrf, xxe, rce (related attack vectors)
218
+
219
+ BAD SPECIALIZATION:
220
+ - "General Web Testing Agent" with prompt_modules: sql_injection, xss, csrf, ssrf, authentication_jwt (too broad)
221
+ - "Everything Agent" with prompt_modules: all available modules (completely unfocused)
222
+ - Any agent with more than 3 prompt modules (violates constraints)
223
+
224
+ FOCUS PRINCIPLES:
225
+ - Each agent should have deep expertise in 1-3 related vulnerability types
226
+ - Agents with single modules have the deepest specialization
227
+ - Related vulnerabilities (like SSRF+XXE or Auth+Business Logic) can be combined
228
+ - Never create "kitchen sink" agents that try to do everything
402
229
 
403
230
  REALISTIC TESTING OUTCOMES:
404
231
  - **No Findings**: Agent completes testing but finds no vulnerabilities
@@ -423,7 +250,7 @@ Tool calls use XML format:
423
250
  CRITICAL RULES:
424
251
  1. One tool call per message
425
252
  2. Tool call must be last in message
426
- 3. End response after </function> tag
253
+ 3. End response after </function> tag. It's your stop word. Do not continue after it.
427
254
  5. Thinking is NOT optional - it's required for reasoning and success
428
255
 
429
256
  SPRAYING EXECUTION NOTE:
@@ -484,8 +311,7 @@ PROGRAMMING:
484
311
  - You can install any additional tools/packages needed based on the task/context using package managers (apt, pip, npm, go install, etc.)
485
312
 
486
313
  Directories:
487
- - /workspace - Your private agent directory
488
- - /shared_workspace - Shared between agents
314
+ - /workspace - where you should work.
489
315
  - /home/pentester/tools - Additional tool scripts
490
316
  - /home/pentester/tools/wordlists - Currently empty, but you should download wordlists here when you need.
491
317
 
@@ -239,6 +239,9 @@ class BaseAgent(metaclass=AgentMeta):
239
239
  self.state.sandbox_token = sandbox_info["auth_token"]
240
240
  self.state.sandbox_info = sandbox_info
241
241
 
242
+ if "agent_id" in sandbox_info:
243
+ self.state.sandbox_info["agent_id"] = sandbox_info["agent_id"]
244
+
242
245
  if not self.state.task:
243
246
  self.state.task = task
244
247
 
@@ -248,6 +248,8 @@ class StrixCLIApp(App): # type: ignore[misc]
248
248
 
249
249
  if args.target_type == "local_code" and "target_path" in args.target_dict:
250
250
  config["local_source_path"] = args.target_dict["target_path"]
251
+ elif args.target_type == "repository" and "cloned_repo_path" in args.target_dict:
252
+ config["local_source_path"] = args.target_dict["cloned_repo_path"]
251
253
 
252
254
  return config
253
255
 
@@ -876,7 +878,7 @@ class StrixCLIApp(App): # type: ignore[misc]
876
878
  result = tool_data.get("result")
877
879
 
878
880
  tool_colors = {
879
- "terminal_action": "#22c55e",
881
+ "terminal_execute": "#22c55e",
880
882
  "browser_action": "#06b6d4",
881
883
  "python_action": "#3b82f6",
882
884
  "agents_graph_action": "#fbbf24",
@@ -8,11 +8,13 @@ import asyncio
8
8
  import logging
9
9
  import os
10
10
  import secrets
11
+ import shutil
12
+ import subprocess
11
13
  import sys
14
+ import tempfile
12
15
  from pathlib import Path
13
16
  from typing import Any
14
17
  from urllib.parse import urlparse
15
- import shutil
16
18
 
17
19
  import docker
18
20
  import litellm
@@ -74,7 +76,7 @@ def validate_environment() -> None:
74
76
  error_text.append("• ", style="white")
75
77
  error_text.append("STRIX_LLM", style="bold cyan")
76
78
  error_text.append(
77
- " - Model name to use with litellm (e.g., 'anthropic/claude-opus-4-1-20250805')\n",
79
+ " - Model name to use with litellm (e.g., 'openai/gpt-5')\n",
78
80
  style="white",
79
81
  )
80
82
  error_text.append("• ", style="white")
@@ -91,9 +93,7 @@ def validate_environment() -> None:
91
93
  )
92
94
 
93
95
  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
- )
96
+ error_text.append("export STRIX_LLM='openai/gpt-5'\n", style="dim white")
97
97
  error_text.append("export LLM_API_KEY='your-api-key-here'\n", style="dim white")
98
98
  if missing_optional_vars:
99
99
  error_text.append(
@@ -127,7 +127,9 @@ def check_docker_installed() -> None:
127
127
  error_text.append("DOCKER NOT INSTALLED", style="bold red")
128
128
  error_text.append("\n\n", style="white")
129
129
  error_text.append("The 'docker' CLI was not found in your PATH.\n", style="white")
130
- error_text.append("Please install Docker and ensure the 'docker' command is available.\n\n", style="white")
130
+ error_text.append(
131
+ "Please install Docker and ensure the 'docker' command is available.\n\n", style="white"
132
+ )
131
133
 
132
134
  panel = Panel(
133
135
  error_text,
@@ -144,7 +146,7 @@ async def warm_up_llm() -> None:
144
146
  console = Console()
145
147
 
146
148
  try:
147
- model_name = os.getenv("STRIX_LLM", "anthropic/claude-opus-4-1-20250805")
149
+ model_name = os.getenv("STRIX_LLM", "openai/gpt-5")
148
150
  api_key = os.getenv("LLM_API_KEY")
149
151
 
150
152
  if api_key:
@@ -204,6 +206,84 @@ def generate_run_name() -> str:
204
206
  return f"{adj}-{noun}-{number}"
205
207
 
206
208
 
209
+ def clone_repository(repo_url: str, run_name: str) -> str:
210
+ console = Console()
211
+
212
+ git_executable = shutil.which("git")
213
+ if git_executable is None:
214
+ raise FileNotFoundError("Git executable not found in PATH")
215
+
216
+ temp_dir = Path(tempfile.gettempdir()) / "strix_repos" / run_name
217
+ temp_dir.mkdir(parents=True, exist_ok=True)
218
+
219
+ repo_name = Path(repo_url).stem if repo_url.endswith(".git") else Path(repo_url).name
220
+
221
+ clone_path = temp_dir / repo_name
222
+
223
+ if clone_path.exists():
224
+ shutil.rmtree(clone_path)
225
+
226
+ try:
227
+ with console.status(f"[bold cyan]Cloning repository {repo_name}...", spinner="dots"):
228
+ subprocess.run( # noqa: S603
229
+ [
230
+ git_executable,
231
+ "clone",
232
+ "--depth=1",
233
+ "--no-recurse-submodules",
234
+ "--single-branch",
235
+ repo_url,
236
+ str(clone_path),
237
+ ],
238
+ capture_output=True,
239
+ text=True,
240
+ check=True,
241
+ )
242
+
243
+ return str(clone_path.absolute())
244
+
245
+ except subprocess.CalledProcessError as e:
246
+ error_text = Text()
247
+ error_text.append("❌ ", style="bold red")
248
+ error_text.append("REPOSITORY CLONE FAILED", style="bold red")
249
+ error_text.append("\n\n", style="white")
250
+ error_text.append(f"Could not clone repository: {repo_url}\n", style="white")
251
+ error_text.append(
252
+ f"Error: {e.stderr if hasattr(e, 'stderr') and e.stderr else str(e)}", style="dim red"
253
+ )
254
+
255
+ panel = Panel(
256
+ error_text,
257
+ title="[bold red]🛡️ STRIX CLONE ERROR",
258
+ title_align="center",
259
+ border_style="red",
260
+ padding=(1, 2),
261
+ )
262
+ console.print("\n")
263
+ console.print(panel)
264
+ console.print()
265
+ sys.exit(1)
266
+ except FileNotFoundError:
267
+ error_text = Text()
268
+ error_text.append("❌ ", style="bold red")
269
+ error_text.append("GIT NOT FOUND", style="bold red")
270
+ error_text.append("\n\n", style="white")
271
+ error_text.append("Git is not installed or not available in PATH.\n", style="white")
272
+ error_text.append("Please install Git to clone repositories.\n", style="white")
273
+
274
+ panel = Panel(
275
+ error_text,
276
+ title="[bold red]🛡️ STRIX CLONE ERROR",
277
+ title_align="center",
278
+ border_style="red",
279
+ padding=(1, 2),
280
+ )
281
+ console.print("\n")
282
+ console.print(panel)
283
+ console.print()
284
+ sys.exit(1)
285
+
286
+
207
287
  def infer_target_type(target: str) -> tuple[str, dict[str, str]]:
208
288
  if not target or not isinstance(target, str):
209
289
  raise ValueError("Target must be a non-empty string")
@@ -544,16 +624,23 @@ def main() -> None:
544
624
  if sys.platform == "win32":
545
625
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
546
626
 
627
+ args = parse_arguments()
628
+
547
629
  check_docker_installed()
548
630
  pull_docker_image()
549
631
 
550
632
  validate_environment()
551
633
  asyncio.run(warm_up_llm())
552
634
 
553
- args = parse_arguments()
554
635
  if not args.run_name:
555
636
  args.run_name = generate_run_name()
556
637
 
638
+ if args.target_type == "repository":
639
+ repo_url = args.target_dict["target_repo"]
640
+ cloned_path = clone_repository(repo_url, args.run_name)
641
+
642
+ args.target_dict["cloned_repo_path"] = cloned_path
643
+
557
644
  asyncio.run(run_strix_cli(args))
558
645
 
559
646
  results_path = Path("agent_runs") / args.run_name