strix-agent 0.1.18__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.
- {strix_agent-0.1.18 → strix_agent-0.1.19}/PKG-INFO +52 -13
- {strix_agent-0.1.18 → strix_agent-0.1.19}/README.md +51 -12
- {strix_agent-0.1.18 → strix_agent-0.1.19}/pyproject.toml +1 -1
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/agents/StrixAgent/strix_agent.py +2 -1
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/agents/StrixAgent/system_prompt.jinja +8 -10
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/agents/base_agent.py +20 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/agents/state.py +18 -1
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/app.py +92 -15
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/main.py +3 -2
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/base_renderer.py +2 -2
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/reporting_renderer.py +2 -1
- strix_agent-0.1.19/strix/prompts/README.md +64 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/prompts/__init__.py +1 -1
- strix_agent-0.1.19/strix/prompts/cloud/.gitkeep +0 -0
- strix_agent-0.1.19/strix/prompts/custom/.gitkeep +0 -0
- strix_agent-0.1.19/strix/prompts/frameworks/fastapi.jinja +142 -0
- strix_agent-0.1.19/strix/prompts/frameworks/nextjs.jinja +126 -0
- strix_agent-0.1.19/strix/prompts/protocols/graphql.jinja +215 -0
- strix_agent-0.1.19/strix/prompts/reconnaissance/.gitkeep +0 -0
- strix_agent-0.1.19/strix/prompts/technologies/firebase_firestore.jinja +177 -0
- strix_agent-0.1.19/strix/prompts/technologies/supabase.jinja +189 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/authentication_jwt.jinja +147 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/broken_function_level_authorization.jinja +146 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/business_logic.jinja +171 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/csrf.jinja +174 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/idor.jinja +195 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/insecure_file_uploads.jinja +188 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/mass_assignment.jinja +141 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/path_traversal_lfi_rfi.jinja +142 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/race_conditions.jinja +164 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/rce.jinja +154 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/sql_injection.jinja +151 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/ssrf.jinja +135 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/xss.jinja +169 -0
- strix_agent-0.1.19/strix/prompts/vulnerabilities/xxe.jinja +184 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/agents_graph/agents_graph_actions.py +4 -3
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/agents_graph/agents_graph_actions_schema.xml +10 -14
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/registry.py +1 -1
- strix_agent-0.1.18/strix/prompts/vulnerabilities/authentication_jwt.jinja +0 -129
- strix_agent-0.1.18/strix/prompts/vulnerabilities/business_logic.jinja +0 -143
- strix_agent-0.1.18/strix/prompts/vulnerabilities/csrf.jinja +0 -168
- strix_agent-0.1.18/strix/prompts/vulnerabilities/idor.jinja +0 -164
- strix_agent-0.1.18/strix/prompts/vulnerabilities/race_conditions.jinja +0 -194
- strix_agent-0.1.18/strix/prompts/vulnerabilities/rce.jinja +0 -206
- strix_agent-0.1.18/strix/prompts/vulnerabilities/sql_injection.jinja +0 -215
- strix_agent-0.1.18/strix/prompts/vulnerabilities/ssrf.jinja +0 -168
- strix_agent-0.1.18/strix/prompts/vulnerabilities/xss.jinja +0 -221
- strix_agent-0.1.18/strix/prompts/vulnerabilities/xxe.jinja +0 -276
- {strix_agent-0.1.18 → strix_agent-0.1.19}/LICENSE +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/agents/StrixAgent/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/agents/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/assets/cli.tcss +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/agents_graph_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/browser_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/file_edit_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/finish_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/notes_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/proxy_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/python_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/registry.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/scan_info_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/terminal_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/thinking_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/user_message_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tool_components/web_search_renderer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/cli/tracer.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/llm/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/llm/config.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/llm/llm.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/llm/memory_compressor.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/llm/request_queue.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/llm/utils.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/prompts/coordination/root_agent.jinja +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/runtime/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/runtime/docker_runtime.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/runtime/runtime.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/runtime/tool_server.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/agents_graph/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/argument_parser.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/browser/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/browser/browser_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/browser/browser_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/browser/browser_instance.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/browser/tab_manager.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/executor.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/file_edit/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/file_edit/file_edit_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/file_edit/file_edit_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/finish/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/finish/finish_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/finish/finish_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/notes/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/notes/notes_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/notes/notes_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/proxy/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/proxy/proxy_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/proxy/proxy_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/proxy/proxy_manager.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/python/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/python/python_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/python/python_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/python/python_instance.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/python/python_manager.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/reporting/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/reporting/reporting_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/reporting/reporting_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/terminal/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/terminal/terminal_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/terminal/terminal_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/terminal/terminal_manager.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/terminal/terminal_session.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/thinking/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/thinking/thinking_actions.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/thinking/thinking_actions_schema.xml +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/web_search/__init__.py +0 -0
- {strix_agent-0.1.18 → strix_agent-0.1.19}/strix/tools/web_search/web_search_actions.py +0 -0
- {strix_agent-0.1.18 → 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.
|
|
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
|
+
[](https://usestrix.com)
|
|
47
48
|
[](LICENSE)
|
|
48
|
-
[](https://discord.gg/yduEyduBsp)
|
|
50
|
+
[](https://pepy.tech/projects/strix-agent)
|
|
51
|
+
[](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
|
-
|
|
100
|
+
First run pulls the sandbox Docker image. Results are saved under `agent_runs/<run-name>`.
|
|
101
|
+
|
|
102
|
+
### ☁️ Cloud Hosted
|
|
78
103
|
|
|
79
|
-
|
|
80
|
-
- **Real Validation** - Dynamic testing and actual exploitation, thus much fewer false positives
|
|
81
|
-
- **Developer-First** - Seamlessly integrates into existing development workflows
|
|
82
|
-
- **Auto-Fix & Reporting** - Automated patching with detailed remediation and security reports
|
|
104
|
+
Want to skip the setup? Try our cloud-hosted version: **[usestrix.com](https://usestrix.com)**
|
|
83
105
|
|
|
84
106
|
## ✨ Features
|
|
85
107
|
|
|
@@ -124,6 +146,9 @@ strix --target https://your-app.com
|
|
|
124
146
|
|
|
125
147
|
# Focused testing
|
|
126
148
|
strix --target api.your-app.com --instruction "Prioritize authentication and authorization testing"
|
|
149
|
+
|
|
150
|
+
# Testing with credentials
|
|
151
|
+
strix --target https://your-app.com --instruction "Test with credentials: testuser/testpass. Focus on privilege escalation and access control bypasses."
|
|
127
152
|
```
|
|
128
153
|
|
|
129
154
|
### ⚙️ Configuration
|
|
@@ -150,19 +175,33 @@ Our managed platform provides:
|
|
|
150
175
|
- **🔌 Third-Party Integrations**
|
|
151
176
|
- **🎯 Enterprise Support**
|
|
152
177
|
|
|
153
|
-
[**Get Enterprise Demo →**](https://
|
|
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
|
+
[](https://usestrix.com)
|
|
7
8
|
[](LICENSE)
|
|
8
|
-
[](https://discord.gg/yduEyduBsp)
|
|
10
|
+
[](https://pepy.tech/projects/strix-agent)
|
|
11
|
+
[](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
|
-
|
|
60
|
+
First run pulls the sandbox Docker image. Results are saved under `agent_runs/<run-name>`.
|
|
61
|
+
|
|
62
|
+
### ☁️ Cloud Hosted
|
|
38
63
|
|
|
39
|
-
|
|
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,6 +106,9 @@ 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
|
|
@@ -110,19 +135,33 @@ Our managed platform provides:
|
|
|
110
135
|
- **🔌 Third-Party Integrations**
|
|
111
136
|
- **🎯 Enterprise Support**
|
|
112
137
|
|
|
113
|
-
[**Get Enterprise Demo →**](https://
|
|
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!
|
|
@@ -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
|
|
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
|
-
|
|
22
|
+
AUTONOMOUS BEHAVIOR:
|
|
23
23
|
- Work autonomously by default
|
|
24
|
-
-
|
|
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
|
|
39
|
-
-
|
|
40
|
-
- Follow
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
@@ -40,7 +40,7 @@ def format_token_count(count: float) -> str:
|
|
|
40
40
|
return str(count)
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
def validate_environment() -> None:
|
|
43
|
+
def validate_environment() -> None: # noqa: PLR0912, PLR0915
|
|
44
44
|
console = Console()
|
|
45
45
|
missing_required_vars = []
|
|
46
46
|
missing_optional_vars = []
|
|
@@ -139,7 +139,8 @@ def validate_environment() -> None:
|
|
|
139
139
|
)
|
|
140
140
|
elif var == "LLM_API_BASE":
|
|
141
141
|
error_text.append(
|
|
142
|
-
"export LLM_API_BASE='http://localhost:11434'
|
|
142
|
+
"export LLM_API_BASE='http://localhost:11434' "
|
|
143
|
+
"# needed for local models only\n",
|
|
143
144
|
style="dim white",
|
|
144
145
|
)
|
|
145
146
|
elif var == "PERPLEXITY_API_KEY":
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Any, ClassVar
|
|
2
|
+
from typing import Any, ClassVar, cast
|
|
3
3
|
|
|
4
4
|
from rich.markup import escape as rich_escape
|
|
5
5
|
from textual.widgets import Static
|
|
@@ -17,7 +17,7 @@ class BaseToolRenderer(ABC):
|
|
|
17
17
|
|
|
18
18
|
@classmethod
|
|
19
19
|
def escape_markup(cls, text: str) -> str:
|
|
20
|
-
return rich_escape(text)
|
|
20
|
+
return cast("str", rich_escape(text))
|
|
21
21
|
|
|
22
22
|
@classmethod
|
|
23
23
|
def format_args(cls, args: dict[str, Any], max_length: int = 500) -> str:
|
|
@@ -27,7 +27,8 @@ class CreateVulnerabilityReportRenderer(BaseToolRenderer):
|
|
|
27
27
|
if severity:
|
|
28
28
|
severity_color = cls._get_severity_color(severity.lower())
|
|
29
29
|
content_parts.append(
|
|
30
|
-
f" [dim]Severity: [{severity_color}]
|
|
30
|
+
f" [dim]Severity: [{severity_color}]"
|
|
31
|
+
f"{cls.escape_markup(severity.upper())}[/{severity_color}][/]"
|
|
31
32
|
)
|
|
32
33
|
|
|
33
34
|
if content:
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# 📚 Strix Prompt Modules
|
|
2
|
+
|
|
3
|
+
## 🎯 Overview
|
|
4
|
+
|
|
5
|
+
Prompt modules are specialized knowledge packages that enhance Strix agents with deep expertise in specific vulnerability types, technologies, and testing methodologies. Each module provides advanced techniques, practical examples, and validation methods that go beyond baseline security knowledge.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🏗️ Architecture
|
|
10
|
+
|
|
11
|
+
### How Prompts Work
|
|
12
|
+
|
|
13
|
+
When an agent is created, it can load up to 5 specialized prompt modules relevant to the specific subtask and context at hand:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# Agent creation with specialized modules
|
|
17
|
+
create_agent(
|
|
18
|
+
task="Test authentication mechanisms in API",
|
|
19
|
+
name="Auth Specialist",
|
|
20
|
+
prompt_modules="authentication_jwt,business_logic"
|
|
21
|
+
)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The modules are dynamically injected into the agent's system prompt, allowing it to operate with deep expertise tailored to the specific vulnerability types or technologies required for the task at hand.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 📁 Module Categories
|
|
29
|
+
|
|
30
|
+
| Category | Purpose |
|
|
31
|
+
|----------|---------|
|
|
32
|
+
| **`/vulnerabilities`** | Advanced testing techniques for core vulnerability classes like authentication bypasses, business logic flaws, and race conditions |
|
|
33
|
+
| **`/frameworks`** | Specific testing methods for popular frameworks e.g. Django, Express, FastAPI, and Next.js |
|
|
34
|
+
| **`/technologies`** | Specialized techniques for third-party services such as Supabase, Firebase, Auth0, and payment gateways |
|
|
35
|
+
| **`/protocols`** | Protocol-specific testing patterns for GraphQL, WebSocket, OAuth, and other communication standards |
|
|
36
|
+
| **`/cloud`** | Cloud provider security testing for AWS, Azure, GCP, and Kubernetes environments |
|
|
37
|
+
| **`/reconnaissance`** | Advanced information gathering and enumeration techniques for comprehensive attack surface mapping |
|
|
38
|
+
| **`/custom`** | Community-contributed modules for specialized or industry-specific testing scenarios |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 🎨 Creating New Modules
|
|
43
|
+
|
|
44
|
+
### What Should a Module Contain?
|
|
45
|
+
|
|
46
|
+
A good prompt module is a structured knowledge package that typically includes:
|
|
47
|
+
|
|
48
|
+
- **Advanced techniques** - Non-obvious methods specific to the task and domain
|
|
49
|
+
- **Practical examples** - Working payloads, commands, or test cases with variations
|
|
50
|
+
- **Validation methods** - How to confirm findings and avoid false positives
|
|
51
|
+
- **Context-specific insights** - Environment and version nuances, configuration-dependent behavior, and edge cases
|
|
52
|
+
|
|
53
|
+
Modules use XML-style tags for structure and focus on deep, specialized knowledge that significantly enhances agent capabilities for that specific context.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 🤝 Contributing
|
|
58
|
+
|
|
59
|
+
Community contributions are more than welcome — contribute new modules via [pull requests](https://github.com/usestrix/strix/pulls) or [GitHub issues](https://github.com/usestrix/strix/issues) to help expand the collection and improve extensibility for Strix agents.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
> [!NOTE]
|
|
64
|
+
> **Work in Progress** - We're actively expanding the prompt module collection with specialized techniques and new categories.
|
|
@@ -58,7 +58,7 @@ def generate_modules_description() -> str:
|
|
|
58
58
|
modules_str = ", ".join(sorted_modules)
|
|
59
59
|
|
|
60
60
|
description = (
|
|
61
|
-
f"List of prompt modules to load for this agent (max
|
|
61
|
+
f"List of prompt modules to load for this agent (max 5). Available modules: {modules_str}. "
|
|
62
62
|
)
|
|
63
63
|
|
|
64
64
|
example_modules = sorted_modules[:2]
|
|
File without changes
|
|
File without changes
|