Skip to main content

Rowan

CI Python 3.10+ License: MIT

Find security issues in your code and AI/ML projects, with evidence you can review.

Rowan reads your project's source code and model files and reports likely vulnerabilities: injection, unsafe deserialization, SSRF, leaked secrets, risky agent tools, unsafe model loading and more. It never runs your code.

Alpha. Treat every finding as a lead to check, not a confirmed bug. A clean report does not prove a project is secure.

Quick start

You need Python 3.10+ and pipx, which installs command-line tools into their own environment (on macOS: brew install pipx, then pipx ensurepath and open a new terminal).

1. Install Rowan:

pipx install "rowan-sast[js-crossfile]"

Already use uv? uv tool install "rowan-sast[js-crossfile]" works too. A plain pip install fails on Homebrew Python by design; see getting started for a virtual-environment install.

2. Install the scan engine (Opengrep) and check it:

rowan install-engine
export PATH="$HOME/.local/bin:$PATH"
rowan self-test

self-test should print [OK] three times.

3. Scan a project:

rowan scan /path/to/your-project

Windows, troubleshooting and more detail: getting started.

Let your coding agent do it

Paste this into Claude Code, Codex, Cursor or any agent that can run terminal commands, with your project open:

Install Rowan and scan this project for security issues.
1. Install it in its own folder (not inside this project) by following
   https://github.com/hedgerow-dev/rowan/blob/main/docs/getting-started.md
2. Run `rowan self-test`. If the engine is not [OK], stop and tell me.
3. Run: rowan scan <this project's absolute path> --no-project-config
   --no-sca --audit -f json -o <a folder outside this project>/rowan-report.json
4. If summary.degraded is true, tell me the scan is incomplete and why.
5. List the High and Critical findings with file:line links. For each one,
   say whether you checked the code or it is still just a lead.
6. Do not change any code in this project.

--no-sca keeps this first scan offline. Drop it to also check your dependencies for known CVEs (this sends package names and versions to OSV).

Common commands

rowan scan PATH                                  # readable report
rowan scan PATH --audit                          # include low-severity findings
rowan scan PATH -f json -o report.json           # save a report (also: html, sarif)
rowan scan PATH --ci --severity high             # CI: exit 1 on high/critical findings
rowan scan PATH --write-baseline base.json       # record today's findings...
rowan scan PATH --ci --baseline base.json        # ...then report only new ones

With --ci, exit code 0 means no findings, 1 means findings, and 2 means the scan was incomplete. Reports can contain source code and secrets: review them before sharing.

What it checks

Area Coverage
Source code Injection, unsafe deserialization, path traversal, SSRF, XSS, secrets
AI/ML apps Model loading, agent tools, LLM output handling, prompt files, MCP config
Dataflow Within-file through Opengrep; cross-file for Python and JS/TS, limited for Go
Dependencies Known CVEs, reachability hints, CycloneDX SBOM and OpenVEX output
Model files Pickle, PyTorch, GGUF, SafeTensors, Keras, ONNX, TensorFlow, numpy, joblib (via Hayward)

Python and JS/TS get the deepest analysis. Java, Kotlin and C# get within-file dataflow. Ruby, PHP and Rust get limited pattern checks. The report lists what it could not analyze.

The rule catalog has 593 rules across 48 YAML files. That is 394 regex rules and 199 taint rules (Opengrep). See the rule catalog.

Privacy

rowan scan never calls an LLM or uploads your code. Its only network calls are dependency lookups (OSV and FIRST EPSS), which --no-sca turns off. The experimental rowan hunt command does send code to the LLM you configure: see the usage guide.

More

License

MIT. Opengrep is a separate LGPL-2.1 engine and is not bundled.

Metadata

Release files for rowan-sast 0.3.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rowan-sast 0.3.11
File Size Uploaded Provenance
rowan_sast-0.3.11.tar.gz 1.3 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for rowan-sast 0.3.11
File Interpreter ABI Platform
rowan_sast-0.3.11-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / rowan_sast-0.3.11.tar.gz

Download URL rowan_sast-0.3.11.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
90a220c77de35ecdbb2638a7c1e47fdff91a3814ec22cc5b10e216808e997334
BLAKE2b-256 checksum
How to use checksums
fc83922f7f14868b211619a030c51f314eaa835fd10ce49fd8297a4f59731c04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Release files / rowan_sast-0.3.11-py3-none-any.whl

Download URL rowan_sast-0.3.11-py3-none-any.whl
Size 905.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac923c7ba243b838f1637400fd03dec218a447e4ef8fe51d55f9f7e589664eb1
BLAKE2b-256 checksum
How to use checksums
18e7fd14d7061555f62b514ef9a2cf67eef6b9b0e84af70035f374ad5fe32789
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Security for rowan-sast 0.3.11

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for rowan_sast-0.3.11.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page