Back to all resources
Strix v1.6.2 Apache-2.0 · free Docker plus your LLM key LIVE

Find the hole before someone else does.

A pentest takes six weeks to book and a scanner hands you two hundred maybes. Strix runs a team of agents in a Docker sandbox with a real attacker's toolkit: a proxy, a browser, a shell and a Python runtime for writing exploits. Every finding arrives with a working proof, so there is nothing to triage. Free, and only on what you own.

By Raj Singh · September 2026 · 65k stars · one command to install · 7 min read

WHAT YOU WATCH IT DO

The tree on the left is the agent team splitting the job between them. The panel on the right is the traffic they are sending right now. Findings land at the bottom as they are proved, not as they are suspected.

The Strix terminal interface showing a tree of running agents, a live feed of requests they are sending, and a list of confirmed findings
The agent team, the live traffic, and the proved findings · usestrix / strix
BEFORE YOU CLICK INSTALL

Only what you own. The project's own warning, and it is the law: run this against systems you own or hold explicit written permission to test, inside the agreed scope. Unauthorised testing is a crime in most places, and pointing an agent at a stranger's site is exactly that.

Set a budget or regret it. There is no spend cap unless you pass --max-budget. The default scan is deep, reasoning effort defaults to high, each agent gets 500 turns, and agents spawn more agents. My first unattended run is always capped, and so should yours be.

Proof, not a maybe list. It writes and runs an exploit for each issue it claims, so what lands in the report has already worked. That is the difference from a scanner: nobody spends the next day deciding which of two hundred findings are real.

Telemetry ships on. STRIX_TELEMETRY defaults to 1 and covers PostHog, Scarf and OpenTelemetry. Set it to 0 to turn all three off. Run data is written locally either way, to strix_runs/<name>/events.jsonl.

It fits in a pull request. A quick scan in GitHub Actions scopes itself to changed files and exits non-zero when it finds something. That is the version most teams keep, rather than the six-week engagement.

Honest limitAgents find what agents can reach. Business logic nobody documented, a flaw needing two accounts and a real bank transfer, anything behind a hardware token: still a human's job. This replaces the boring 80 percent of a pentest, not the person.
Read the whole setup

First scan before lunch.

Drop your email and the rest opens: the install, the model and budget I run, the three scan modes and when each fits, the CI job that scopes itself to a pull request, and the two ways it goes wrong.

One email. No follow-up unless I ship something that fits.

WHAT YOU NEED
  • Docker, running. The first scan pulls the sandbox image
  • An LLM key from any provider LiteLLM speaks: OpenAI, Anthropic, Google, OpenRouter, a local model
  • A target you own. A local folder, a repo you control, a staging URL, or an OpenAPI spec. Written permission if it is not yours
  • Nothing else. The toolkit, the browser and the proxy all live in the sandbox image
INSTALL

One command, two variables, one scan

The installer puts the CLI on your path. Configuration is two environment variables, and Strix remembers them in ~/.strix/cli-config.json so you set them once. Start on a local folder rather than a live URL: the feedback is faster and the blast radius is nothing.

The install

terminala target you own
$ curl -sSL https://strix.ai/install | bash $ export STRIX_LLM="anthropic/claude-sonnet-4-6" $ export LLM_API_KEY="sk-ant-..." $ strix --target ./my-app --scan-mode quick --max-budget 5 → pulls the sandbox image once, then writes to strix_runs/<run-name>

Every run writes to disk as it goes. strix view opens the last one in a local dashboard, bound to 127.0.0.1, with the agent map and the findings. Nothing leaves your machine.

Prove itRun that first scan on a folder you know has a weakness, an old branch with a hardcoded key or an unparameterised query. If it comes back with the exploit and not just the observation, the sandbox and your model are both working. An empty result on a clean folder tells you nothing yet.
CONFIGURE

Five settings, one of them mandatory

Configuration is environment variables, or the same keys in a JSON config file you can commit without secrets. The budget flag is the one I never omit, because an uncapped deep scan with sub-agents is an open tab at your model provider.

~/.strix/cli-config.jsonmy values
{ "env": { "STRIX_LLM": "anthropic/claude-sonnet-4-6", "LLM_API_KEY": "sk-ant-...", "STRIX_REASONING_EFFORT": "high", "STRIX_TELEMETRY": "0" } }
SettingDefaultWhy I change it
--max-budgetnone, uncappedThe single most important flag. In headless mode it stops the scan cleanly at the cap and still writes the report, with sub-agents halted at 90 percent so the root can finish. Interactive mode pauses instead, and any message resumes with the cap extended.
--scan-modedeepDeep is right when you are sitting there watching. Quick is right in CI, where it scopes itself to the files a pull request changed and reasoning effort drops to medium on its own.
STRIX_TELEMETRY1PostHog, Scarf and OpenTelemetry are on out of the box. On client code that is a conversation you do not want to have later. Local run logs are unaffected.
STRIX_DEDUPE_MODELfalls back to STRIX_LLMDeciding whether a finding duplicates another is a cheap classification job. Point it at a small model and the main one stays on the actual testing.
--max-turns500Per agent, not per run. Fine on a real assessment, generous for a smoke test. Lower it with the budget when you just want to know the pipeline works.
The cap is approximateThe budget is checked after each model response, so calls already in flight can overshoot it slightly, most visibly with several sub-agents running at once. Cost is estimated from token usage and provider pricing. Treat the number as a brake, not a contract.
DAILY DRIVING

Four targets, in rising order of nerve

Targets stack: give it the source and the running app together and it correlates the two. Credentials and focus areas go in --instruction, which is where a grey-box test starts. Everything below is a target you own.

.github/workflows/strix.ymlthe part that matters
- uses: actions/checkout@v6 with: { fetch-depth: 0 } - run: curl -sSL https://strix.ai/install | bash - run: strix -n -t ./ --scan-mode quick --max-budget 3 env: { STRIX_LLM: ..., LLM_API_KEY: ... }
  • The codebase first. --target ./app or a repo URL. Cheapest, safest, and it finds the class of bug that never reaches a crawler.
  • Then the API contract. Point it at an OpenAPI file or a Postman export plus the live base URL, and it tests declared endpoints instead of guessing them.
  • Then the running app. A staging URL, black box. Add credentials through --instruction to get behind the login.
  • Then every pull request. Headless, quick mode, exits non-zero on a finding. This is the one that changes how a team ships.

The full history in the checkout is what lets quick mode diff against the base branch. Without it the scope logic has nothing to compare, and you pay for a full scan on every pull request.

WHEN IT DRIFTS

Two failures, both about scope

The scan costs more than expected
Deep mode with sub-agents and no cap. Set --max-budget, drop to quick for routine runs, and move deduplication to a smaller model. Check --max-turns too, since 500 applies to each agent.
It reports things that are not really bugs
Usually an agent testing something outside what you meant. Tell it the scope in --instruction or an instruction file: which hosts, which flows, what is out of bounds. Vague scope is what produces noise here, not the model.
Sharing a runstrix view prints a tokened link that grants access to that run, which includes working exploits against your app. Treat that link like the exploits it contains, and do not paste it into a group chat.
THE SHAPE OF IT

Where everything lives

~/.strix/cli-config.jsonthe model, the key, the defaults you set once ~/.strix/mcp-servers.jsonyour own MCP servers, exposed to the agents strix_runs/<run-name>/findings, report and the full run record strix_runs/<run-name>/events.jsonllocal telemetry, written whether or not you export it skills/nine agent skills, installed with `npx skills add usestrix/strix`

The run folders are the artefact worth keeping: each one holds the proof that a bug existed and the date you knew about it. Treat them as sensitive, because that is exactly what they are.

That is the whole setup

One install, two variables, a budget you always set, and a quick scan on every pull request. The question of whether the thing you just shipped is exploitable stops waiting for a calendar slot.

Open on GitHub →

↑ Unlocks the moment you submit the form above.

RS
WRITTEN BY

Raj Singh

I'm Raj Singh, founder of DebtOps.ai and a Claude certified partner. Over the last five years I've managed $25M in ads, built AI solutions for Fortune 100 companies, and installed AI operating systems and AI brains inside small businesses. Everything here is something I've shipped, debugged, or watched a client ship. My goal with AgileSingh is to make you irreplaceable in this AI age.

$25M
Ads managed · 5 yrs
F100
Enterprise AI builds
Claude
Certified partner
36
Guides shipped
More guides

Now put the same rigour on the agent itself.

An agent that can test your app can reach a lot else besides. The OpenBot guide is the governed version of that idea, and the FreeLLMAPI guide is how you stop paying full price for the model doing the reading.

Keep going

Back to all systems