September 2, 2026
FREE PENTEST TOOL
Strix on Kali Linux

By HackerBlogs
9 min read
FREE PENTEST TOOL
Strix on Kali Linux
Complete Installation, Configuration & Troubleshooting Report
Document Type: Technical Installation & Troubleshooting Report Operating System: Kali Linux Shell: Zsh Tool: Strix Multi-Agent Cybersecurity Penetration Testing Tool Initial Strix Version: 1.5.3 Final Strix Version: 1.6.0 LLM Provider: OpenRouter LLM Interface: LiteLLM Local LLM Runtime: Ollama Test Environment: Docker / OWASP Juice Shop Purpose: Complete reproducible installation and troubleshooting documentation
1. Introduction
This document records the complete process used to install, configure, troubleshoot, and verify Strix on Kali Linux.
The purpose of this report is to provide a self-contained technical reference so that another user can follow the installation without having to search through multiple tutorials or repeat the same mistakes.
The report documents both successful steps and problems encountered during the setup.
Each troubleshooting section follows this structure:
Problem โ Error โ Investigation โ Cause โ Solution โ Verification
2. Final Architecture
The completed environment consists of the following components:
Kali Linux
โ
โโโ Strix 1.6.0
โ
โโโ LiteLLM 1.99.0
โ
โโโ OpenRouter
โ โโโ openai/gpt-oss-120b
โ
โโโ Ollama 0.33.2
โ โโโ CPU-only
โ
โโโ Docker
โโโ OWASP Juice Shop
โโโ localhost:3001Kali Linux
โ
โโโ Strix 1.6.0
โ
โโโ LiteLLM 1.99.0
โ
โโโ OpenRouter
โ โโโ openai/gpt-oss-120b
โ
โโโ Ollama 0.33.2
โ โโโ CPU-only
โ
โโโ Docker
โโโ OWASP Juice Shop
โโโ localhost:3001The Docker/Juice Shop portion was used only as a controlled local testing environment. It is not required to use Strix against every target.
3. Prerequisites
Before starting the Strix installation, the following components are required or useful:
- Kali Linux
- Internet connection
- Git
- Python / pipx
- Docker
- An LLM API key
- Zsh or another supported shell
Check Git:
git --versiongit --versionCheck Python:
python3 --versionpython3 --versionCheck pipx:
pipx --versionpipx --versionCheck Docker:
docker --versiondocker --versionIf Docker is installed but the daemon is not running:
sudo systemctl start dockersudo systemctl start dockerVerify:
docker infodocker infoStrix requires Docker for its security-testing sandbox. The official documentation also lists Docker and an LLM API key as prerequisites.
4. Phase 1 โ Obtaining the Strix Source Code
4.1 Clone the Repository
The Strix source repository can be obtained using Git:
git clone https://github.com/usestrix/strix.gitgit clone https://github.com/usestrix/strix.gitMove into the repository:
cd strixcd strixVerify the repository contents:
lslsThe repository contains the Strix source code, configuration files, scripts, Docker-related files, and build configuration.
5. Understanding the Strix Installation Methods
There are two relevant approaches:
Method A โ Official installer
The current Strix documentation provides:
curl -sSL https://strix.ai/install | bashcurl -sSL https://strix.ai/install | bashIt also documents:
pipx install strix-agentpipx install strix-agentas an installation option.
Method B โ Source repository
For development/source-based installation, clone the repository:
git clone https://github.com/usestrix/strix.git
cd strixgit clone https://github.com/usestrix/strix.git
cd strixThe repository contains a pyproject.toml defining the package as strix-agent and exposing the strix command.
For a normal user installation, Method A is simpler. For documenting/building from source, Method B is useful.
6. Phase 2 โ Verify Strix Installation
After installation, verify the command:
which strixwhich strixThen:
strix --versionstrix --versionThe initial installation used during this setup reported:
1.5.31.5.3This confirmed that Strix was installed and accessible from the terminal.
7. Phase 3 โ Updating Strix
The installed Strix version was later updated.
After updating, verify:
strix --versionstrix --versionFinal version:
1.6.01.6.0Therefore:
Initial version โ 1.5.3
Final version โ 1.6.0Initial version โ 1.5.3
Final version โ 1.6.08. Phase 4 โ Installing Ollama
Ollama was installed as a local LLM runtime.
After installation, verify it:
ollama --versionollama --versionThe installed version was:
ollama version 0.33.2ollama version 0.33.29. Starting and Checking Ollama
Check whether the Ollama service is running.
The local Ollama endpoint used was:
127.0.0.1:11434127.0.0.1:11434A basic API check can be performed with:
curl http://127.0.0.1:11434/api/tagscurl http://127.0.0.1:11434/api/tagsIf Ollama is not running, start the service:
sudo systemctl start ollamasudo systemctl start ollamaThen check:
sudo systemctl status ollamasudo systemctl status ollama10. Ollama Hardware Limitation
During the setup, the system did not have a detected NVIDIA or AMD GPU.
Therefore, Ollama operated in:
CPU-only modeCPU-only modeThis is important because local LLM inference can be considerably slower without GPU acceleration.
The system therefore used OpenRouter as the primary LLM provider for Strix.
Ollama remained installed as a local LLM option but was not the final primary provider configuration.
11. Phase 5 โ Configure OpenRouter
OpenRouter was selected as the external LLM provider.
The API key was stored in:
export LLM_API_KEY="YOUR_API_KEY"export LLM_API_KEY="YOUR_API_KEY"Replace YOUR_API_KEY with the actual key.
Security Warning
Never publish the real API key.
Do not put the complete key into:
- GitHub
- Screenshots
- Public documentation
- Videos
- Chat messages
- Public
.envfiles
Use:
YOUR_API_KEYYOUR_API_KEYwhen documenting the configuration.
12. Verify the API Key Safely
Instead of printing the complete API key, verify only part of it:
echo "${LLM_API_KEY:0:10}"echo "${LLM_API_KEY:0:10}"This confirms that the variable contains a value without displaying the complete secret.
13. Phase 6 โ Test OpenRouter Independently
Before troubleshooting Strix, OpenRouter was tested directly.
Command:
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY"curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY"A successful response returned the available model list.
This confirmed:
Internet connectivity โ
OpenRouter reachable โ
API key accepted โ
Authentication working โ
Model API accessible โInternet connectivity โ
OpenRouter reachable โ
API key accepted โ
Authentication working โ
Model API accessible โThis was an important troubleshooting step because it separated provider/API problems from Strix problems.
14. Phase 7 โ Initial Strix LLM Configuration
The first Strix model configuration used was:
export STRIX_LLM="openrouter/openai/gpt-oss-120b:free"export STRIX_LLM="openrouter/openai/gpt-oss-120b:free"Verify it:
echo $STRIX_LLMecho $STRIX_LLMOutput:
openrouter/openai/gpt-oss-120b:freeopenrouter/openai/gpt-oss-120b:free15. Problem 1 โ LiteLLM.NotFoundError
After configuring the initial model, Strix produced a LiteLLM error similar to:
LiteLLM.NotFoundErrorLiteLLM.NotFoundErrorAt this point, reinstalling Strix would not have been the correct first response.
The model/provider configuration needed to be investigated.
16. Investigation โ Verify the Model Through OpenRouter
The OpenRouter API was queried directly:
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY" |
grep -o '"id":"openai/gpt-oss-120b"' |
headcurl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY" |
grep -o '"id":"openai/gpt-oss-120b"' |
headThe response confirmed:
"id":"openai/gpt-oss-120b""id":"openai/gpt-oss-120b"Therefore, the model identifier available through the API was:
openai/gpt-oss-120bopenai/gpt-oss-120b17. Resolution โ Correct the Model Configuration
The original configuration:
openrouter/openai/gpt-oss-120b:freeopenrouter/openai/gpt-oss-120b:freewas changed to:
openrouter/openai/gpt-oss-120bopenrouter/openai/gpt-oss-120bCommand:
export STRIX_LLM="openrouter/openai/gpt-oss-120b"export STRIX_LLM="openrouter/openai/gpt-oss-120b"Verify:
echo $STRIX_LLMecho $STRIX_LLMExpected:
openrouter/openai/gpt-oss-120bopenrouter/openai/gpt-oss-120bLesson
Do not assume that a model name copied from an old tutorial is still the correct provider route.
Verify the provider's actual model ID.
18. Phase 8 โ Install LiteLLM
LiteLLM was required for the LLM integration.
First check whether it was already available:
which litellmwhich litellmThe command did not find the executable.
Therefore, LiteLLM was installed with:
pipx install litellmpipx install litellm19. Problem 2 โ litellm Dependency Error
After installation:
litellm --versionlitellm --versionwas executed.
The command produced:
ModuleNotFoundError: No module named 'websockets'ModuleNotFoundError: No module named 'websockets'This indicated that LiteLLM was installed but one of its required dependencies was missing.
20. Resolution โ Install LiteLLM Proxy Dependencies
The required dependencies were injected into the LiteLLM environment:
pipx inject litellm "litellm[proxy]"pipx inject litellm "litellm[proxy]"When a forced refresh was required:
pipx inject --force litellm "litellm[proxy]"pipx inject --force litellm "litellm[proxy]"After installation, verify:
litellm --versionlitellm --versionFinal working version:
1.99.01.99.021. Why pipx inject Was Used
pipx creates isolated environments for Python applications.
Instead of installing random Python packages globally, the missing dependencies were added specifically to the LiteLLM environment:
pipx inject litellm "litellm[proxy]"pipx inject litellm "litellm[proxy]"This kept the dependency change associated with LiteLLM.
22. Phase 9 โ Make the Strix Model Configuration Persistent
The following command:
export STRIX_LLM="openrouter/openai/gpt-oss-120b"export STRIX_LLM="openrouter/openai/gpt-oss-120b"only affects the current shell session.
To make the configuration available when opening a new Zsh terminal, it was added to:
~/.zshrc~/.zshrcCommand:
echo 'export STRIX_LLM="openrouter/openai/gpt-oss-120b"' >> ~/.zshrcecho 'export STRIX_LLM="openrouter/openai/gpt-oss-120b"' >> ~/.zshrcReload the configuration:
source ~/.zshrcsource ~/.zshrcVerify:
echo $STRIX_LLMecho $STRIX_LLMExpected:
openrouter/openai/gpt-oss-120bopenrouter/openai/gpt-oss-120bImportant
Do not append the same line repeatedly.
If the line already exists in ~/.zshrc, leave it as it is.
23. API Key Persistence
If the API key is also intended to be available in every new terminal, it can be exported through the shell environment.
Example:
export LLM_API_KEY="YOUR_API_KEY"export LLM_API_KEY="YOUR_API_KEY"For security, avoid committing shell configuration containing real secrets to public repositories.
24. Phase 10 โ Verify the Strix CLI
Run:
strix --helpstrix --helpThe available options include:
-t / --target
--target-list
--instruction
--instruction-file
-n / --non-interactive
-m / --scan-mode
--scope-mode
--max-budget
--max-turns
--resume-t / --target
--target-list
--instruction
--instruction-file
-n / --non-interactive
-m / --scan-mode
--scope-mode
--max-budget
--max-turns
--resumeAvailable scan modes include:
quick
standard
deepquick
standard
deepThis confirmed that the Strix CLI was functioning correctly.
25. Phase 11 โ Docker Verification
Docker was required by Strix for its sandbox environment.
Check Docker:
docker --versiondocker --versionFinal Docker version:
Docker 28.5.2+dfsg4Docker 28.5.2+dfsg4Check Docker Compose:
docker compose versiondocker compose versionFinal version:
Docker Compose 2.40.3-3Docker Compose 2.40.3-3Check the Docker daemon:
docker infodocker infoIf Docker is functioning, the command should return Docker system information rather than a daemon connection error.
26. Phase 12 โ Local Testing Environment
A local OWASP Juice Shop instance was created for testing Strix.
This was not part of the Strix installation itself.
It was only a safe, controlled target for testing the installed tool.
Start Juice Shop:
docker run -d \
--name juice-shop \
-p 3001:3000 \
bkimminich/juice-shopdocker run -d \
--name juice-shop \
-p 3001:3000 \
bkimminich/juice-shopVerify:
docker psdocker psThe application was then available at:
http://localhost:3001http://localhost:300127. Juice Shop Container Already Exists
If Docker reports that the container already exists, do not create another container.
Start the existing container:
docker start juice-shopdocker start juice-shopVerify:
docker psdocker psThis is preferable to repeatedly running docker run.
28. Phase 13 โ First Strix Run
Start Strix:
strixstrixFor the local Juice Shop test environment, the target was:
http://localhost:3001http://localhost:3001This provided a controlled environment for verifying the complete Strix โ LLM โ Docker workflow.
29. Troubleshooting Methodology
When Strix fails, the following order should be used.
Step 1 โ Check Strix
strix --versionstrix --versionExpected:
1.6.01.6.0Step 2 โ Check the model
echo $STRIX_LLMecho $STRIX_LLMExpected:
openrouter/openai/gpt-oss-120bopenrouter/openai/gpt-oss-120bStep 3 โ Check the API key
echo "${LLM_API_KEY:0:10}"echo "${LLM_API_KEY:0:10}"Do not print the complete key.
Step 4 โ Check OpenRouter
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY"curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY"Step 5 โ Check LiteLLM
litellm --versionlitellm --versionExpected:
1.99.01.99.0Step 6 โ Check Docker
docker infodocker infoStep 7 โ Check the local test target
docker psdocker psStep 8 โ Run Strix
strixstrixThis order prevents unnecessary reinstalls.
30. Complete Problem-and-Solution Record
ProblemWhat HappenedSolutionStrix initially reported 1.5.3Older installed versionUpdated to 1.6.0Model configuration failedInitial model route produced LiteLLM.NotFoundErrorVerified model through OpenRouter APIIncorrect model routeopenrouter/openai/gpt-oss-120b:free was problematicChanged to openrouter/openai/gpt-oss-120blitellm unavailableLiteLLM was not installedpipx install litellmwebsockets missingLiteLLM dependency problempipx inject litellm "litellm[proxy]"Dependency environment needed refreshExisting pipx environmentpipx inject --force litellm "litellm[proxy]"Model variable was temporaryexport only affects current shellAdded STRIX_LLM to ~/.zshrcOllama had no GPUNo NVIDIA/AMD GPU detectedContinued with CPU-only Ollama / OpenRouterJuice Shop container already existedDocker container name conflictdocker start juice-shop
31. Final Environment Verification
Run the following commands.
Strix
strix --versionstrix --versionExpected:
1.6.01.6.0LiteLLM
litellm --versionlitellm --versionExpected:
1.99.01.99.0Ollama
ollama --versionollama --versionExpected:
ollama version 0.33.2ollama version 0.33.2Strix Model
echo $STRIX_LLMecho $STRIX_LLMExpected:
openrouter/openai/gpt-oss-120bopenrouter/openai/gpt-oss-120bOpenRouter
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY"curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $LLM_API_KEY"Docker
docker infodocker infoLocal Test Target
docker psdocker ps32. Final Configuration
The final working configuration was:
Strix:
Version: 1.6.0
LLM:
Provider: OpenRouter
Model: openai/gpt-oss-120b
LiteLLM:
Version: 1.99.0
Ollama:
Version: 0.33.2
Mode: CPU-only
Docker:
Version: 28.5.2+dfsg4
Docker Compose:
Version: 2.40.3-3
Shell:
Zsh
Persistent model configuration:
~/.zshrc
Testing target:
OWASP Juice Shop
http://localhost:3001Strix:
Version: 1.6.0
LLM:
Provider: OpenRouter
Model: openai/gpt-oss-120b
LiteLLM:
Version: 1.99.0
Ollama:
Version: 0.33.2
Mode: CPU-only
Docker:
Version: 28.5.2+dfsg4
Docker Compose:
Version: 2.40.3-3
Shell:
Zsh
Persistent model configuration:
~/.zshrc
Testing target:
OWASP Juice Shop
http://localhost:300133. Security and Operational Notes
API Keys
Never expose the real:
LLM_API_KEYLLM_API_KEYUse placeholders when sharing configuration:
YOUR_API_KEYYOUR_API_KEYAuthorized Testing
Strix should only be used against:
- Your own applications
- Authorized systems
- CTF/lab environments
- Systems for which explicit permission has been provided
The local Juice Shop instance was used specifically to provide a controlled testing target.
34. Important Distinction: Strix vs. Juice Shop
Juice Shop was not installed because Strix requires Juice Shop.
The relationship is:
Strix
โ
Security testing tool
Juice Shop
โ
Temporary vulnerable application
โ
Local test targetStrix
โ
Security testing tool
Juice Shop
โ
Temporary vulnerable application
โ
Local test targetTherefore, someone installing Strix for normal use does not necessarily need to install Juice Shop.
Juice Shop was included in this setup only to test Strix safely against a deliberately vulnerable application.
35. Post-Installation Startup Procedure
After everything has already been installed and configured, the startup process is much shorter.
If you only want to start Strix
Open a new Kali terminal and run:
source ~/.zshrcsource ~/.zshrcThen:
strixstrixThat is all that is required for Strix itself.
36. If Using the Local Juice Shop Test Environment
If you want to continue using the local Juice Shop test target, first start the existing container:
docker start juice-shopdocker start juice-shopCheck:
docker psdocker psThen start Strix:
strixstrixTarget:
http://localhost:3001http://localhost:3001Therefore, the complete local testing startup sequence is:
source ~/.zshrc
docker start juice-shop
strixsource ~/.zshrc
docker start juice-shop
strixThen use:
http://localhost:3001http://localhost:3001as the authorized local testing target.
37. Final Daily Workflow
After the installation is complete, there is no need to reinstall everything every time.
Strix only:
source ~/.zshrc
strixsource ~/.zshrc
strixStrix + local Juice Shop:
source ~/.zshrc
docker start juice-shop
strixsource ~/.zshrc
docker start juice-shop
strixThe following should not be repeated every time:
git clone
Strix installation
LiteLLM installation
Ollama installation
API key generation
Model configuration
Juice Shop creationgit clone
Strix installation
LiteLLM installation
Ollama installation
API key generation
Model configuration
Juice Shop creationThose are installation/configuration tasks.
The final daily workflow is simply:
Load configuration
โ
Start test target (only if using Juice Shop)
โ
Start Strix
โ
Enter authorized targetLoad configuration
โ
Start test target (only if using Juice Shop)
โ
Start Strix
โ
Enter authorized target38. Conclusion
The Strix installation was completed through several stages rather than a single command.
The major troubleshooting points were:
- Strix was initially installed at version 1.5.3 and later updated to 1.6.0.
- Ollama was installed and verified, but the system operated without supported GPU acceleration.
- OpenRouter was configured as the primary external LLM provider.
- The initial
openrouter/openai/gpt-oss-120b:freeconfiguration produced a LiteLLMNotFoundError. - The OpenRouter API was queried directly to verify the correct model identifier.
- The model configuration was changed to:
openrouter/openai/gpt-oss-120b - LiteLLM was installed using
pipx. - A missing
websocketsdependency was identified and corrected using LiteLLM's proxy dependencies. - The Strix model configuration was made persistent through
~/.zshrc. - Docker was verified and a local OWASP Juice Shop instance was used only as a controlled test target.
- The final startup process was reduced to a few commands.
The main troubleshooting principle from this installation is:
Do not reinstall the entire environment when one component fails. Identify the failing layer, test it independently, fix that layer, and verify it before continuing.
PREPARE BY HACKER BLOGS AS GHULAM AHMAD