Skip to main content

Raven — Engineering Intelligence Agent

PyPI Python License

Raven learns how a codebase is put together, watches it change, and tells you what changed and why it matters — as plain JSON and Markdown, on your own machine. No account, no cloud upload, no telemetry.

Point it at a repository and it produces five artifacts: a repository profile, an architecture graph, a security report, a risk score, and a daily-style summary. Run it again later and it tells you what got better, what got worse, and what it learned in between.

Evidence first. Engineering second. Opinion last.

Install

pip install ravenscan

Quick start

raven scan .          # analyze the repository → .raven/ artifacts
raven score .         # risk score with grade (A–F)
raven diff            # what changed since the previous scan
raven report          # re-render existing artifacts
raven score --fail-under 70   # CI gate: exit 1 below threshold

Every command supports --format json and --format markdown.

What you get

Artifacts are written to .raven/ in the scanned repository:

Artifact Contents
RepositoryProfile Languages, frameworks, dependencies, structure, CI/CD and container setup
ArchitectureGraph Components and how they connect, with evidence for every edge
SecurityReport Findings with severity, explainable priority, and attack-path membership
RiskScore Overall score /100, letter grade, per-category breakdown
DailyReport What changed, why it matters, and concrete action items

JSON is canonical — Markdown is rendered from the JSON model, never assembled separately, so machine and human outputs can never disagree.

Memory that stays trustworthy (new in 0.2)

Raven remembers what it learns between runs, under your control:

raven memory list       # everything Raven has learned about this project
raven memory delete ... # correct or remove a record
raven memory export ... # take your data with you
raven memory wipe       # start clean

Every write passes a single gate that rejects secrets and credentials, keeps records scoped to the repository they came from, and logs an append-only audit trail. Scan output can never quietly write to memory.

Also new in 0.2: run summaries (a since-last-run narrative in every report), run-vs-run changes (new / resolved / recurring findings and score delta), decision traces (which analyzers ran and which ruleset version applied), and project preferences (raven prefs set format json — set once, applied everywhere).

Consistency you can prove

Same repository in, same bytes out — Raven ships with a golden evaluation harness that scans fixture repositories twice and asserts byte-identical output. Releases don't quietly change your reports, and raven diff between versions shows exactly what moved and why (version-drift detection).

CI integration

Exit code Meaning
0 Clean, or score above threshold
1 Score below --fail-under
2 Execution error
3 Configuration error
# GitHub Actions example
- run: pip install ravenscan
- run: raven scan . && raven score --fail-under 70

Python SDK

from raven import Raven
from raven.core.config import RavenConfig

client = Raven(RavenConfig(path="."))

profile = client.scan()          # RepositoryProfile
arch = client.architecture()     # ArchitectureGraph
security = client.security()     # SecurityReport
risk = client.score()            # RiskScore
daily = client.daily_report()    # DailyReport

print(f"Score: {risk.overall}/100 — Grade {risk.grade}")

See docs/SDK_REFERENCE.md for the full typed API.

Optional: connected mode

If you use WraithWall, Raven can talk to it with your own API key (scope raven:use):

raven wraith campaigns --api-key KEY --api-secret SECRET
raven wraith whoami    --api-key KEY --api-secret SECRET
raven wraith submit .  --api-key KEY --api-secret SECRET

Requests use HTTPS, timestamp/nonce HMAC with replay protection, and public-key-only bearer transport — the secret is never sent as a header or URL value. This is entirely optional; Raven is fully useful offline.

What Raven is not

  • Not a runtime monitor. It analyzes source trees and git history — not live servers, databases, or network traffic.
  • Not an alerting service. It writes local files; it never sends email, chat, or phone notifications on its own.
  • Not a fleet scanner. One raven scan per repository; no cross-machine correlation.
  • Not a replacement for dedicated rule engines. Security plugins cover common languages and common mistakes; exotic frameworks and vendored binaries may be skipped. Treat Raven's report as a prioritized briefing, not an exhaustive audit.
  • Not a SaaS. Nothing leaves your machine unless you run an explicit raven wraith command with your own credentials.

Development

git clone https://github.com/niffyhunt/ezmcyber
cd ezmcyber/ravenscan
pip install -e ".[all]" pytest
pytest tests/ -q

Contributions welcome — see CONTRIBUTING.md. Security reports: SECURITY.md. Release history: CHANGELOG.md.

License

MIT

Metadata

Release files for ravenscan 0.2.0

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

Source distribution (sdist)

Source distribution for ravenscan 0.2.0
File Size Uploaded
ravenscan-0.2.0.tar.gz 118.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ravenscan 0.2.0
File Interpreter ABI Platform
ravenscan-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 247.2 kB

Release files / ravenscan-0.2.0.tar.gz

Download URL ravenscan-0.2.0.tar.gz
Size 118.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a0cf21fadfdea6393fec49a778fdd9f3a6d17028bde0f35a2f02648ba0366151
BLAKE2b-256 checksum
How to use checksums
e40d572a58300ce9730a9f465e2975070932671a99194393031e3c4247995297
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / ravenscan-0.2.0-py3-none-any.whl

Download URL ravenscan-0.2.0-py3-none-any.whl
Size 128.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
16f4003728dc224d5bf49db917e61f31dd10b58ee318d1bb47d6e7e87211e3ad
BLAKE2b-256 checksum
How to use checksums
f89460216be9b108acf08ba113ddf44b62fdbbfd8e1f885445a00d3084a5f6a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

0.2.1

2 release files

This release

0.2.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

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