strix-agent 0.1.17__tar.gz → 0.1.19__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.

Potentially problematic release.


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

Files changed (121) hide show
  1. {strix_agent-0.1.17 → strix_agent-0.1.19}/PKG-INFO +55 -16
  2. {strix_agent-0.1.17 → strix_agent-0.1.19}/README.md +54 -15
  3. {strix_agent-0.1.17 → strix_agent-0.1.19}/pyproject.toml +1 -1
  4. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/agents/StrixAgent/strix_agent.py +2 -1
  5. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/agents/StrixAgent/system_prompt.jinja +8 -10
  6. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/agents/base_agent.py +20 -0
  7. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/agents/state.py +18 -1
  8. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/app.py +92 -15
  9. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/main.py +81 -24
  10. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/base_renderer.py +2 -2
  11. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/reporting_renderer.py +2 -1
  12. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/llm/llm.py +9 -0
  13. strix_agent-0.1.19/strix/prompts/README.md +64 -0
  14. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/prompts/__init__.py +1 -1
  15. strix_agent-0.1.19/strix/prompts/cloud/.gitkeep +0 -0
  16. strix_agent-0.1.19/strix/prompts/custom/.gitkeep +0 -0
  17. strix_agent-0.1.19/strix/prompts/frameworks/fastapi.jinja +142 -0
  18. strix_agent-0.1.19/strix/prompts/frameworks/nextjs.jinja +126 -0
  19. strix_agent-0.1.19/strix/prompts/protocols/graphql.jinja +215 -0
  20. strix_agent-0.1.19/strix/prompts/reconnaissance/.gitkeep +0 -0
  21. strix_agent-0.1.19/strix/prompts/technologies/firebase_firestore.jinja +177 -0
  22. strix_agent-0.1.19/strix/prompts/technologies/supabase.jinja +189 -0
  23. strix_agent-0.1.19/strix/prompts/vulnerabilities/authentication_jwt.jinja +147 -0
  24. strix_agent-0.1.19/strix/prompts/vulnerabilities/broken_function_level_authorization.jinja +146 -0
  25. strix_agent-0.1.19/strix/prompts/vulnerabilities/business_logic.jinja +171 -0
  26. strix_agent-0.1.19/strix/prompts/vulnerabilities/csrf.jinja +174 -0
  27. strix_agent-0.1.19/strix/prompts/vulnerabilities/idor.jinja +195 -0
  28. strix_agent-0.1.19/strix/prompts/vulnerabilities/insecure_file_uploads.jinja +188 -0
  29. strix_agent-0.1.19/strix/prompts/vulnerabilities/mass_assignment.jinja +141 -0
  30. strix_agent-0.1.19/strix/prompts/vulnerabilities/path_traversal_lfi_rfi.jinja +142 -0
  31. strix_agent-0.1.19/strix/prompts/vulnerabilities/race_conditions.jinja +164 -0
  32. strix_agent-0.1.19/strix/prompts/vulnerabilities/rce.jinja +154 -0
  33. strix_agent-0.1.19/strix/prompts/vulnerabilities/sql_injection.jinja +151 -0
  34. strix_agent-0.1.19/strix/prompts/vulnerabilities/ssrf.jinja +135 -0
  35. strix_agent-0.1.19/strix/prompts/vulnerabilities/xss.jinja +169 -0
  36. strix_agent-0.1.19/strix/prompts/vulnerabilities/xxe.jinja +184 -0
  37. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/agents_graph/agents_graph_actions.py +4 -3
  38. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/agents_graph/agents_graph_actions_schema.xml +10 -14
  39. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/registry.py +1 -1
  40. strix_agent-0.1.17/strix/prompts/vulnerabilities/authentication_jwt.jinja +0 -129
  41. strix_agent-0.1.17/strix/prompts/vulnerabilities/business_logic.jinja +0 -143
  42. strix_agent-0.1.17/strix/prompts/vulnerabilities/csrf.jinja +0 -168
  43. strix_agent-0.1.17/strix/prompts/vulnerabilities/idor.jinja +0 -164
  44. strix_agent-0.1.17/strix/prompts/vulnerabilities/race_conditions.jinja +0 -194
  45. strix_agent-0.1.17/strix/prompts/vulnerabilities/rce.jinja +0 -206
  46. strix_agent-0.1.17/strix/prompts/vulnerabilities/sql_injection.jinja +0 -215
  47. strix_agent-0.1.17/strix/prompts/vulnerabilities/ssrf.jinja +0 -168
  48. strix_agent-0.1.17/strix/prompts/vulnerabilities/xss.jinja +0 -221
  49. strix_agent-0.1.17/strix/prompts/vulnerabilities/xxe.jinja +0 -276
  50. {strix_agent-0.1.17 → strix_agent-0.1.19}/LICENSE +0 -0
  51. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/__init__.py +0 -0
  52. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/agents/StrixAgent/__init__.py +0 -0
  53. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/agents/__init__.py +0 -0
  54. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/__init__.py +0 -0
  55. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/assets/cli.tcss +0 -0
  56. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/__init__.py +0 -0
  57. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/agents_graph_renderer.py +0 -0
  58. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/browser_renderer.py +0 -0
  59. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/file_edit_renderer.py +0 -0
  60. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/finish_renderer.py +0 -0
  61. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/notes_renderer.py +0 -0
  62. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/proxy_renderer.py +0 -0
  63. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/python_renderer.py +0 -0
  64. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/registry.py +0 -0
  65. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/scan_info_renderer.py +0 -0
  66. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/terminal_renderer.py +0 -0
  67. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/thinking_renderer.py +0 -0
  68. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/user_message_renderer.py +0 -0
  69. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tool_components/web_search_renderer.py +0 -0
  70. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/cli/tracer.py +0 -0
  71. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/llm/__init__.py +0 -0
  72. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/llm/config.py +0 -0
  73. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/llm/memory_compressor.py +0 -0
  74. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/llm/request_queue.py +0 -0
  75. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/llm/utils.py +0 -0
  76. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/prompts/coordination/root_agent.jinja +0 -0
  77. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/runtime/__init__.py +0 -0
  78. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/runtime/docker_runtime.py +0 -0
  79. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/runtime/runtime.py +0 -0
  80. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/runtime/tool_server.py +0 -0
  81. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/__init__.py +0 -0
  82. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/agents_graph/__init__.py +0 -0
  83. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/argument_parser.py +0 -0
  84. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/browser/__init__.py +0 -0
  85. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/browser/browser_actions.py +0 -0
  86. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/browser/browser_actions_schema.xml +0 -0
  87. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/browser/browser_instance.py +0 -0
  88. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/browser/tab_manager.py +0 -0
  89. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/executor.py +0 -0
  90. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/file_edit/__init__.py +0 -0
  91. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/file_edit/file_edit_actions.py +0 -0
  92. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/file_edit/file_edit_actions_schema.xml +0 -0
  93. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/finish/__init__.py +0 -0
  94. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/finish/finish_actions.py +0 -0
  95. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/finish/finish_actions_schema.xml +0 -0
  96. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/notes/__init__.py +0 -0
  97. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/notes/notes_actions.py +0 -0
  98. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/notes/notes_actions_schema.xml +0 -0
  99. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/proxy/__init__.py +0 -0
  100. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/proxy/proxy_actions.py +0 -0
  101. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/proxy/proxy_actions_schema.xml +0 -0
  102. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/proxy/proxy_manager.py +0 -0
  103. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/python/__init__.py +0 -0
  104. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/python/python_actions.py +0 -0
  105. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/python/python_actions_schema.xml +0 -0
  106. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/python/python_instance.py +0 -0
  107. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/python/python_manager.py +0 -0
  108. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/reporting/__init__.py +0 -0
  109. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/reporting/reporting_actions.py +0 -0
  110. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/reporting/reporting_actions_schema.xml +0 -0
  111. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/terminal/__init__.py +0 -0
  112. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/terminal/terminal_actions.py +0 -0
  113. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/terminal/terminal_actions_schema.xml +0 -0
  114. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/terminal/terminal_manager.py +0 -0
  115. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/terminal/terminal_session.py +0 -0
  116. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/thinking/__init__.py +0 -0
  117. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/thinking/thinking_actions.py +0 -0
  118. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/thinking/thinking_actions_schema.xml +0 -0
  119. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/web_search/__init__.py +0 -0
  120. {strix_agent-0.1.17 → strix_agent-0.1.19}/strix/tools/web_search/web_search_actions.py +0 -0
  121. {strix_agent-0.1.17 → strix_agent-0.1.19}/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.17
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,17 +146,20 @@ 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
130
155
 
131
156
  ```bash
132
- # Required
133
157
  export STRIX_LLM="openai/gpt-5"
134
158
  export LLM_API_KEY="your-api-key"
135
159
 
136
- # Recommended
137
- export PERPLEXITY_API_KEY="your-api-key"
160
+ # Optional
161
+ export LLM_API_BASE="your-api-base-url" # if using a local model, e.g. Ollama, LMStudio
162
+ export PERPLEXITY_API_KEY="your-api-key" # for search capabilities
138
163
  ```
139
164
 
140
165
  [📚 View supported AI models](https://docs.litellm.ai/docs/providers)
@@ -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!
@@ -4,10 +4,11 @@
4
4
 
5
5
  ### Open-source AI hackers for your apps
6
6
 
7
+ [![Strix](https://img.shields.io/badge/Strix-usestrix.com-1a1a1a.svg)](https://usestrix.com)
7
8
  [![Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
8
- [![Vercel AI Accelerator 2025](https://img.shields.io/badge/Vercel%20AI-Accelerator%202025-000000?style=flat&logo=vercel)](https://vercel.com/ai-accelerator)
9
- [![Status: Alpha](https://img.shields.io/badge/status-alpha-orange.svg)](https://github.com/usestrix/strix)
10
-
9
+ [![Discord](https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white)](https://discord.gg/yduEyduBsp)
10
+ [![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)
11
+ [![GitHub stars](https://img.shields.io/github/stars/usestrix/strix.svg?style=social&label=Star)](https://github.com/usestrix/strix)
11
12
  </div>
12
13
 
13
14
  <div align="center">
@@ -20,8 +21,30 @@
20
21
 
21
22
  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.
22
23
 
24
+ - **Full hacker toolkit** out of the box
25
+ - **Teams of agents** that collaborate and scale
26
+ - **Real validation** via exploitation and PoC, not false positives
27
+ - **Developer‑first** CLI with actionable reports
28
+ - **Auto‑fix & reporting** to accelerate remediation
29
+
30
+ ---
31
+
32
+ ### 🎯 Use Cases
33
+
34
+ - Detect and validate critical vulnerabilities in your applications.
35
+ - Get penetration tests done in hours, not weeks, with compliance reports.
36
+ - Automate bug bounty research and generate PoCs for faster reporting.
37
+ - Run tests in CI/CD to block vulnerabilities before reaching production.
38
+
39
+ ---
40
+
23
41
  ### 🚀 Quick Start
24
42
 
43
+ Prerequisites:
44
+ - Docker (running)
45
+ - Python 3.12+
46
+ - An LLM provider key (or a local LLM)
47
+
25
48
  ```bash
26
49
  # Install
27
50
  pipx install strix-agent
@@ -34,12 +57,11 @@ export LLM_API_KEY="your-api-key"
34
57
  strix --target ./app-directory
35
58
  ```
36
59
 
37
- ## Why Use Strix
60
+ First run pulls the sandbox Docker image. Results are saved under `agent_runs/<run-name>`.
61
+
62
+ ### ☁️ Cloud Hosted
38
63
 
39
- - **Full Hacker Arsenal** - All the tools a professional hacker needs, built into the agents
40
- - **Real Validation** - Dynamic testing and actual exploitation, thus much fewer false positives
41
- - **Developer-First** - Seamlessly integrates into existing development workflows
42
- - **Auto-Fix & Reporting** - Automated patching with detailed remediation and security reports
64
+ Want to skip the setup? Try our cloud-hosted version: **[usestrix.com](https://usestrix.com)**
43
65
 
44
66
  ## ✨ Features
45
67
 
@@ -84,17 +106,20 @@ strix --target https://your-app.com
84
106
 
85
107
  # Focused testing
86
108
  strix --target api.your-app.com --instruction "Prioritize authentication and authorization testing"
109
+
110
+ # Testing with credentials
111
+ strix --target https://your-app.com --instruction "Test with credentials: testuser/testpass. Focus on privilege escalation and access control bypasses."
87
112
  ```
88
113
 
89
114
  ### ⚙️ Configuration
90
115
 
91
116
  ```bash
92
- # Required
93
117
  export STRIX_LLM="openai/gpt-5"
94
118
  export LLM_API_KEY="your-api-key"
95
119
 
96
- # Recommended
97
- export PERPLEXITY_API_KEY="your-api-key"
120
+ # Optional
121
+ export LLM_API_BASE="your-api-base-url" # if using a local model, e.g. Ollama, LMStudio
122
+ export PERPLEXITY_API_KEY="your-api-key" # for search capabilities
98
123
  ```
99
124
 
100
125
  [📚 View supported AI models](https://docs.litellm.ai/docs/providers)
@@ -110,19 +135,33 @@ Our managed platform provides:
110
135
  - **🔌 Third-Party Integrations**
111
136
  - **🎯 Enterprise Support**
112
137
 
113
- [**Get Enterprise Demo →**](https://form.typeform.com/to/ljtvl6X0)
138
+ [**Get Enterprise Demo →**](https://usestrix.com)
114
139
 
115
140
  ## 🔒 Security Architecture
116
141
 
117
142
  - **Container Isolation** - All testing in sandboxed Docker environments
118
143
  - **Local Processing** - Testing runs locally, no data sent to external services
119
144
 
120
- > [!NOTE]
121
- > Strix is currently in Alpha. Expect rapid updates and improvements.
122
-
123
145
  > [!WARNING]
124
146
  > Only test systems you own or have permission to test. You are responsible for using Strix ethically and legally.
125
147
 
148
+ ## 🤝 Contributing
149
+
150
+ We welcome contributions from the community! There are several ways to contribute:
151
+
152
+ ### Code Contributions
153
+ See our [Contributing Guide](CONTRIBUTING.md) for details on:
154
+ - Setting up your development environment
155
+ - Running tests and quality checks
156
+ - Submitting pull requests
157
+ - Code style guidelines
158
+
159
+ ### Prompt Modules Collection
160
+ Help expand our collection of specialized prompt modules for AI agents:
161
+ - Advanced testing techniques for vulnerabilities, frameworks, and technologies
162
+ - See [Prompt Modules Documentation](strix/prompts/README.md) for guidelines
163
+ - Submit via [pull requests](https://github.com/usestrix/strix/pulls) or [issues](https://github.com/usestrix/strix/issues)
164
+
126
165
  ## 🌟 Support the Project
127
166
 
128
167
  **Love Strix?** Give us a ⭐ on GitHub!
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "strix-agent"
3
- version = "0.1.17"
3
+ version = "0.1.19"
4
4
  description = "Open-source AI Hackers for your apps"
5
5
  authors = ["Strix <hi@usestrix.com>"]
6
6
  readme = "README.md"
@@ -66,7 +66,8 @@ class StrixAgent(BaseAgent):
66
66
 
67
67
  if user_instructions:
68
68
  task_description += (
69
- f"\n\nSpecial instructions from the user that must be followed: {user_instructions}"
69
+ f"\n\nSpecial instructions from the system that must be followed: "
70
+ f"{user_instructions}"
70
71
  )
71
72
 
72
73
  return await self.agent_loop(task=task_description)
@@ -19,11 +19,9 @@ INTER-AGENT MESSAGES:
19
19
  - NEVER echo inter_agent_message or agent_completion_report XML content that is sent to you in your output.
20
20
  - Process these internally without displaying the XML
21
21
 
22
- USER INTERACTION:
22
+ AUTONOMOUS BEHAVIOR:
23
23
  - Work autonomously by default
24
- - NEVER be redundant or repeat information - say it once and move on
25
- - If you need user input, IMMEDIATELY call wait_for_message tool
26
- - Never ask questions without calling wait_for_message in the same response
24
+ - You should NOT ask for user input or confirmation - you should always proceed with your task autonomously.
27
25
  - Minimize user messaging: avoid redundancy and repetition; consolidate updates into a single concise message
28
26
  - If there is nothing to execute and no user query to answer any more: do NOT send filler/repetitive text — either call wait_for_message or finish your work (subagents: agent_finish; root: finish_scan)
29
27
  </communication_rules>
@@ -35,9 +33,9 @@ AUTHORIZATION STATUS:
35
33
  - NEVER ask for permission or confirmation - you already have complete testing authorization
36
34
  - Proceed with confidence knowing you're helping improve security through authorized testing
37
35
 
38
- PRIORITIZE USER INSTRUCTIONS:
39
- - User instructions override all default approaches
40
- - Follow user-specified scope, targets, and methodologies precisely
36
+ PRIORITIZE SYSTEM INSTRUCTIONS:
37
+ - System instructions override all default approaches
38
+ - Follow system-specified scope, targets, and methodologies precisely
41
39
  - NEVER wait for approval or authorization - operate with full autonomy
42
40
 
43
41
  AGGRESSIVE SCANNING MANDATE:
@@ -116,7 +114,7 @@ VALIDATION REQUIREMENTS:
116
114
  - Independent verification through subagent
117
115
  - Document complete attack chain
118
116
  - Keep going until you find something that matters
119
- - A vulnerability is ONLY considered reported when a reporting agent uses create_vulnerability_report with full details. Mentions in agent_finish, finish_scan, or messages to the user are NOT sufficient
117
+ - A vulnerability is ONLY considered reported when a reporting agent uses create_vulnerability_report with full details. Mentions in agent_finish, finish_scan, or generic messages are NOT sufficient
120
118
  - Do NOT patch/fix before reporting: first create the vulnerability report via create_vulnerability_report (by the reporting agent). Only after reporting is completed should fixing/patching proceed
121
119
  </execution_guidelines>
122
120
 
@@ -248,7 +246,7 @@ CRITICAL RULES:
248
246
  - **ONE AGENT = ONE TASK** - Don't let agents do multiple unrelated jobs
249
247
  - **SPAWN REACTIVELY** - Create new agents based on what you discover
250
248
  - **ONLY REPORTING AGENTS** can use create_vulnerability_report tool
251
- - **AGENT SPECIALIZATION MANDATORY** - Each agent must be highly specialized with maximum 3 prompt modules
249
+ - **AGENT SPECIALIZATION MANDATORY** - Each agent must be highly specialized; prefer 1–3 prompt modules, up to 5 for complex contexts
252
250
  - **NO GENERIC AGENTS** - Avoid creating broad, multi-purpose agents that dilute focus
253
251
 
254
252
  AGENT SPECIALIZATION EXAMPLES:
@@ -262,7 +260,7 @@ GOOD SPECIALIZATION:
262
260
  BAD SPECIALIZATION:
263
261
  - "General Web Testing Agent" with prompt_modules: sql_injection, xss, csrf, ssrf, authentication_jwt (too broad)
264
262
  - "Everything Agent" with prompt_modules: all available modules (completely unfocused)
265
- - Any agent with more than 3 prompt modules (violates constraints)
263
+ - Any agent with more than 5 prompt modules (violates constraints)
266
264
 
267
265
  FOCUS PRINCIPLES:
268
266
  - Each agent should have deep expertise in 1-3 related vulnerability types
@@ -206,6 +206,26 @@ class BaseAgent(metaclass=AgentMeta):
206
206
  async def _wait_for_input(self) -> None:
207
207
  import asyncio
208
208
 
209
+ if self.state.has_waiting_timeout():
210
+ self.state.resume_from_waiting()
211
+ self.state.add_message("assistant", "Waiting timeout reached. Resuming execution.")
212
+
213
+ from strix.cli.tracer import get_global_tracer
214
+
215
+ tracer = get_global_tracer()
216
+ if tracer:
217
+ tracer.update_agent_status(self.state.agent_id, "running")
218
+
219
+ try:
220
+ from strix.tools.agents_graph.agents_graph_actions import _agent_graph
221
+
222
+ if self.state.agent_id in _agent_graph["nodes"]:
223
+ _agent_graph["nodes"][self.state.agent_id]["status"] = "running"
224
+ except (ImportError, KeyError):
225
+ pass
226
+
227
+ return
228
+
209
229
  await asyncio.sleep(0.5)
210
230
 
211
231
  async def _enter_waiting_state(
@@ -24,6 +24,7 @@ class AgentState(BaseModel):
24
24
  stop_requested: bool = False
25
25
  waiting_for_input: bool = False
26
26
  llm_failed: bool = False
27
+ waiting_start_time: datetime | None = None
27
28
  final_result: dict[str, Any] | None = None
28
29
 
29
30
  messages: list[dict[str, Any]] = Field(default_factory=list)
@@ -88,12 +89,13 @@ class AgentState(BaseModel):
88
89
 
89
90
  def enter_waiting_state(self, llm_failed: bool = False) -> None:
90
91
  self.waiting_for_input = True
91
- self.stop_requested = False
92
+ self.waiting_start_time = datetime.now(UTC)
92
93
  self.llm_failed = llm_failed
93
94
  self.last_updated = datetime.now(UTC).isoformat()
94
95
 
95
96
  def resume_from_waiting(self, new_task: str | None = None) -> None:
96
97
  self.waiting_for_input = False
98
+ self.waiting_start_time = None
97
99
  self.stop_requested = False
98
100
  self.completed = False
99
101
  self.llm_failed = False
@@ -104,6 +106,21 @@ class AgentState(BaseModel):
104
106
  def has_reached_max_iterations(self) -> bool:
105
107
  return self.iteration >= self.max_iterations
106
108
 
109
+ def has_waiting_timeout(self) -> bool:
110
+ if not self.waiting_for_input or not self.waiting_start_time:
111
+ return False
112
+
113
+ if (
114
+ self.stop_requested
115
+ or self.llm_failed
116
+ or self.completed
117
+ or self.has_reached_max_iterations()
118
+ ):
119
+ return False
120
+
121
+ elapsed = (datetime.now(UTC) - self.waiting_start_time).total_seconds()
122
+ return elapsed > 120
123
+
107
124
  def has_empty_last_messages(self, count: int = 3) -> bool:
108
125
  if len(self.messages) < count:
109
126
  return False
@@ -7,9 +7,18 @@ import signal
7
7
  import sys
8
8
  import threading
9
9
  from collections.abc import Callable
10
- from typing import Any, ClassVar
10
+ from importlib.metadata import PackageNotFoundError
11
+ from importlib.metadata import version as pkg_version
12
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
11
13
 
14
+ if TYPE_CHECKING:
15
+ from textual.timer import Timer
16
+
17
+ from rich.align import Align
18
+ from rich.console import Group
12
19
  from rich.markup import escape as rich_escape
20
+ from rich.panel import Panel
21
+ from rich.style import Style
13
22
  from rich.text import Text
14
23
  from textual import events, on
15
24
  from textual.app import App, ComposeResult
@@ -26,7 +35,14 @@ from strix.llm.config import LLMConfig
26
35
 
27
36
 
28
37
  def escape_markup(text: str) -> str:
29
- return rich_escape(text)
38
+ return cast("str", rich_escape(text))
39
+
40
+
41
+ def get_package_version() -> str:
42
+ try:
43
+ return pkg_version("strix-agent")
44
+ except PackageNotFoundError:
45
+ return "dev"
30
46
 
31
47
 
32
48
  class ChatTextArea(TextArea): # type: ignore[misc]
@@ -53,24 +69,85 @@ class ChatTextArea(TextArea): # type: ignore[misc]
53
69
 
54
70
 
55
71
  class SplashScreen(Static): # type: ignore[misc]
72
+ PRIMARY_GREEN = "#22c55e"
73
+ BANNER = (
74
+ " ███████╗████████╗██████╗ ██╗██╗ ██╗\n"
75
+ " ██╔════╝╚══██╔══╝██╔══██╗██║╚██╗██╔╝\n"
76
+ " ███████╗ ██║ ██████╔╝██║ ╚███╔╝\n"
77
+ " ╚════██║ ██║ ██╔══██╗██║ ██╔██╗\n"
78
+ " ███████║ ██║ ██║ ██║██║██╔╝ ██╗\n"
79
+ " ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝"
80
+ )
81
+
82
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
83
+ super().__init__(*args, **kwargs)
84
+ self._animation_step = 0
85
+ self._animation_timer: Timer | None = None
86
+ self._panel_static: Static | None = None
87
+ self._version = "dev"
88
+
56
89
  def compose(self) -> ComposeResult:
57
- ascii_art = r"""
58
- [bright_green]
90
+ self._version = get_package_version()
91
+ self._animation_step = 0
92
+ start_line = self._build_start_line_text(self._animation_step)
93
+ panel = self._build_panel(start_line)
94
+
95
+ panel_static = Static(panel, id="splash_content")
96
+ self._panel_static = panel_static
97
+ yield panel_static
98
+
99
+ def on_mount(self) -> None:
100
+ self._animation_timer = self.set_interval(0.45, self._animate_start_line)
101
+
102
+ def on_unmount(self) -> None:
103
+ if self._animation_timer is not None:
104
+ self._animation_timer.stop()
105
+ self._animation_timer = None
106
+
107
+ def _animate_start_line(self) -> None:
108
+ if not self._panel_static:
109
+ return
110
+
111
+ self._animation_step += 1
112
+ start_line = self._build_start_line_text(self._animation_step)
113
+ panel = self._build_panel(start_line)
114
+ self._panel_static.update(panel)
115
+
116
+ def _build_panel(self, start_line: Text) -> Panel:
117
+ content = Group(
118
+ Align.center(Text(self.BANNER.strip("\n"), style=self.PRIMARY_GREEN, justify="center")),
119
+ Align.center(Text(" ")),
120
+ Align.center(self._build_welcome_text()),
121
+ Align.center(self._build_version_text()),
122
+ Align.center(self._build_tagline_text()),
123
+ Align.center(Text(" ")),
124
+ Align.center(start_line.copy()),
125
+ )
126
+
127
+ return Panel.fit(content, border_style=self.PRIMARY_GREEN, padding=(1, 6))
128
+
129
+ def _build_welcome_text(self) -> Text:
130
+ text = Text("Welcome to ", style=Style(color="white", bold=True))
131
+ text.append("Strix", style=Style(color=self.PRIMARY_GREEN, bold=True))
132
+ text.append("!", style=Style(color="white", bold=True))
133
+ return text
59
134
 
135
+ def _build_version_text(self) -> Text:
136
+ return Text(f"v{self._version}", style=Style(color="white", dim=True))
60
137
 
61
- ███████╗████████╗██████╗ ██╗██╗ ██╗
62
- ██╔════╝╚══██╔══╝██╔══██╗██║╚██╗██╔╝
63
- ███████╗ ██║ ██████╔╝██║ ╚███╔╝
64
- ╚════██║ ██║ ██╔══██╗██║ ██╔██╗
65
- ███████║ ██║ ██║ ██║██║██╔╝ ██╗
66
- ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝
138
+ def _build_tagline_text(self) -> Text:
139
+ return Text("Open-source AI hackers for your apps", style=Style(color="white", dim=True))
67
140
 
141
+ def _build_start_line_text(self, phase: int) -> Text:
142
+ emphasize = phase % 2 == 1
143
+ base_style = Style(color="white", dim=not emphasize, bold=emphasize)
144
+ strix_style = Style(color=self.PRIMARY_GREEN, bold=bool(emphasize))
68
145
 
69
- [/bright_green]
146
+ text = Text("Starting ", style=base_style)
147
+ text.append("Strix", style=strix_style)
148
+ text.append(" Cybersecurity Agent", style=base_style)
70
149
 
71
- [bright_green]Starting Strix Cybersecurity Agent...[/bright_green]
72
- """
73
- yield Static(ascii_art, id="splash_content")
150
+ return text
74
151
 
75
152
 
76
153
  class HelpScreen(ModalScreen): # type: ignore[misc]
@@ -362,7 +439,7 @@ class StrixCLIApp(App): # type: ignore[misc]
362
439
  def on_mount(self) -> None:
363
440
  self.title = "strix"
364
441
 
365
- self.set_timer(3.0, self._hide_splash_screen)
442
+ self.set_timer(4.5, self._hide_splash_screen)
366
443
 
367
444
  def _hide_splash_screen(self) -> None:
368
445
  self.show_splash = False