The clean version: ownership is checked before the object is returned.
Try SecHelix on a target that can prove it is wrong.
Install the Agent Skill, optionally add the runner, and audit a demo app where every vulnerable file has a clean twin. No signup, no email, no cloud, nothing leaves your machine.
Five commands
- 01
Install the Agent Skill
Works inside Claude Code, Codex and Copilot. No Python, no runner, no account.
npx skills@latest add omarmohelal/SecHelix --skill sechelix - 02
Add the runner (optional)
Only if you want the workflow driven by code instead of by an agent. The skill above keeps working without it.
pipx install sechelix - 03
Check what is available
Reports Python, Git, container runtime, network mode and whether a reasoning executor is configured. Optional components are allowed to be missing.
sechelix doctor - 04
Audit the demo app
Five vulnerable files, each paired with a clean counterpart that differs in exactly one security-relevant way.
sechelix audit examples/demo-app - 05
Open the evidence
Every node has a record, including the ones that did not run. Nothing disappears from a report.
sechelix report --format html > report.html
Your first run will say INCOMPLETE. That is correct.
The runner orchestrates; it does not reason about code. With no reasoning executor configured, every specialist lane is BLOCKED and the run refuses to make a claim in either direction.
BLOCKED authorization no reasoning executor configured; this node
analyses code and cannot be answered by the
runner alone
SUCCEEDED map
BLOCKED verify dependency not satisfied: authorization
BLOCKED gate dependency not satisfied: verify
RESULT INCOMPLETE - unsatisfied mandatory nodes: gate, verify
No security claim can be made from this run.The alternative would be worse. A stub returning “no findings” produces a report indistinguishable from a genuine clean audit, and a fail-closed release gate would hand out a pass for a run in which nothing was examined. To analyse code, point the runner at a reasoning executor with --executor.
Why the demo app has clean twins
A target that only contains bugs measures whether a tool finds things. It cannot measure whether the tool stops — an agent that flags every line scores perfectly on a vulnerable-only corpus and is useless in a real repository. Each pair differs in exactly one security-relevant way, so a false positive is visible.
The clean version: the refund is bounded by what was actually paid.
The clean version: the destination is validated against an allowlist.
The clean version: user text is escaped rather than interpolated.
The clean version: the redemption is atomic and idempotent.
A tool that reports the five vulnerable files and says nothing about the clean ones has done well. These are teaching examples, not a benchmark: too few and too obvious to measure anything, and no accuracy claim should be made from them.
What runs where
- Nothing leaves your machine.
STATICis the default and performs no network access at all — it will refuse to issue a network grant. - No account, ever, for the offline path. Install, doctor, audit, report, replay and coverage all work with no signup and no key.
- The runner is optional. The Agent Skill is the product; a test asserts the skill ships no copy of the runner and that the core never imports it.
- Run data is local and gitignored. Everything lands in
.sechelix/runs/, with credential-shaped values redacted on write.