Security assessment that tells you what it did not test.
PenSec scans your own repository locally, keeps an evidence ledger across sessions, and reports undecided controls as plainly as failed ones. Use it as a CLI or as a Claude Code plugin.
Built to be safe on your machine
The rules below are enforced by the engine, not by prompts.
Passive by default
Reads the repository as data. Never runs install scripts, builds or repository hooks, and sends no traffic to any target.
Human-approved network tests
A scope manifest you write, approved from an interactive terminal, bound to the file's hash, with a request budget and no redirects.
Secrets stay masked
Values are redacted before they are stored, printed, reported or returned to a model. .env and key files are recorded by name only.
No AI-confirmed findings
Agents are read-only and can only record hypotheses. PenSec reads the cited lines itself, so a model cannot supply evidence.
State that survives
A local SQLite ledger keeps assessments, findings and evidence across sessions, compaction and restarts.
Private
No account, no telemetry, no cloud backend. AGPL-3.0 open source.
Honest statuses
Only PASS and FAIL are decisive. Everything else is shown as a gap, never as "no issues".
Cross-domain, not just per file
Eighteen domains, A to R. When two domains share a real asset in your code, PenSec creates an edge and tracks it on its own, so "authorization passed" never hides "identity to object access is untested".
| Edge | Created when | Scenario |
|---|---|---|
AB1 | login or token routes exist | new auth route missing session coverage |
CG1 | routes take object IDs | a user reads another tenant's object |
DG1 | webhook routes exist | unsigned callback drives privileged state |
FG1 | payments and webhooks | replay moves a payment into an invalid state |
IN1 | third-party CI actions | unpinned action changes code in your pipeline |
DP1 | LLM SDK usage | retrieved text triggers a tool action |
Install
Prebuilt, checksum-verified binaries for Linux, macOS and Windows. Nothing else to install.
Claude Code plugin
/plugin marketplace add ratomirjovanovic/pensec /plugin install pensec@pensec # macOS, Linux /plugin install pensec-windows@pensec # Windows # restart Claude Code, then in your project # ask Claude to check its security, or: /pensec:start
Claude runs the whole assessment, asks one question at the end and applies what you choose, retesting after every fix.
CLI
# macOS, Linux brew tap ratomirjovanovic/pensec https://github.com/ratomirjovanovic/pensec brew install ratomirjovanovic/pensec/pensec # Windows scoop bucket add pensec https://github.com/ratomirjovanovic/pensec scoop install pensec/pensec # or a release binary, or go install (Go 1.23+) cd your-project pensec assess
Step-by-step instructions, updating and troubleshooting are in the installation guide. Releases can be verified with checksums, an SBOM and signed build provenance.
What it is not
PenSec is alpha software and an automated technical assessment. It is not a certification, attestation, legal opinion or independently signed penetration test, and it cannot prove the absence of vulnerabilities. Runtime profiles beyond passive header review are on the roadmap.