Code-grounded · Multi-framework · Local-first

Governance-as-code
for the AI in your repo

Janus scans your codebase for AI features and control gaps, maps each one to the regulations that apply, and gives legal, engineering, and security one shared surface to review and sign off.

It reads your actual code — not a questionnaire — and shows every obligation in three languages: legal, plain, and code.

Grounded in EU AI Act / NIST AI RMF / ISO/IEC 42001 / OWASP LLM Top 10

Local-first by default. Runs on your own models (Ollama / vLLM). Your source and policies never leave your infrastructure — cloud analysis is off unless you opt in.

The pipeline

Detect, map, then review

One pass over your repository turns raw code into a governance position a person can actually sign.

01

Detect the AI

Scan for every model call, endpoint, and data flow — and for missing controls: no auth, no rate limiting, no AI disclosure, unsafe model loading.

An AI Bill of Materials of what you actually run.

02

Map to policy

Each finding is tied to the exact obligation it implicates — across the EU AI Act, NIST, ISO 42001, OWASP LLM Top 10, and your own policies — with the source text.

Policy-as-code: one repo, every framework at once.

03

Review as a team

Findings become a shared surface — like a pull request — where legal, engineering, and security each get their own lens and a human sign-off of record.

The decision is a person's, backed by evidence.

The core idea

One obligation, two faces

The hard part was never scanning code — it's the translation between what a lawyer means and what a developer builds. Janus holds both in view, at once.

Legal

Providers must ensure AI systems intended to interact with people are designed so those people are informed they are interacting with an AI system.

EU AI Act · Article 50(1)

In the code

Look for a user-facing disclosure near the AI call — a banner, a system message, or an "AI-generated" label on the response.

actions/message_summary.py:80

Plain

People are told, clearly, that they're talking to an AI and not a human — so they aren't misled.

Where it sits

Neither a questionnaire nor a scanner

GRC platforms ask you to self-attest. Security scanners read code but stop at threats. Janus reads the code, maps it to regulation, and adds the human review layer.

GRC platforms
Code / LLM security
Janus
Reads your source code
Questionnaire
Maps to AI regulation
Threats only
Legal + engineering review
Legal only
Dev only
Runs on your own infra
Partial
Partial

Findings are AI-generated flags for human review — not legal advice or a certification.

The deliverables

Auditor-ready, generated from evidence

Not just a report — the paperwork a regulator can act on, every claim traceable back to a line of code.

AI Bill of Materials

A CycloneDX inventory of every AI model, service, and endpoint in your code — each linked to the obligations it triggers.

EU AI Act Annex IV draft

A technical-documentation draft in the Annex IV structure, generated deterministically so it reproduces exactly.

Evidence package

One zip: Annex IV doc, model card, translation report, framework-coverage matrix, AI-BOM, and findings.

Findings, not verdicts

Each control is flagged — addressed, partial, or a potential gap — with the evidence, for a human to confirm. Honest about uncertainty.

Shift-left in CI

Run a governance check on every pull request and fail the build on a gap above your severity threshold.

Suggested fixes

For each gap, a concrete code edit is drafted and checked so it applies cleanly — a patch to review, not a generic note.

Inside the tool

Every finding, self-contained

The obligation, its two faces, the real regulation text, the actual source, and your sign-off — on one card.

R-004 Disclose AI-generated summaries to end users Partial HIGH
Legal What the regulation says
EU AI Act · Article 50(1)
Providers shall ensure that AI systems intended to interact directly with natural persons are designed so the persons are informed they are interacting with an AI system.
Engineering The code in question
actions/message_summary.py:80–96
def do_summarize_narrow(user, messages):
    summary = make_message_summary(
        formatted, model, max_tokens,
    )
    # returned to the client with no
    # user-facing AI disclosure
    return SummaryResult(summary=summary)
Your assessment: Genuine obligation? Yes Finding fair? Yes Sign off …
Explore findings on real apps

Six real applications loaded · runs on your own models · no account needed to start

Partner with us

Pressure-test Janus with us

We're working with legal, compliance, and security experts to test Janus on real applications. If that's you, we'd love to talk.