Aegis.
How it works

A pipeline you can explain to your auditor.

This page is the long answer to the question every technical evaluator asks: what is actually happening between "upload" and "score"? Five stages, all of them named, none of them magic.

The pipeline

Five stages, one deterministic path.

  1. 1Chunk

    Documents are split once, snapping to section boundaries, with overlap so nothing falls between the cracks.

  2. 2Enumerate

    One pass per framework under bounded concurrency. Every control in the catalog is assessed; none can be skipped.

    ISO/IEC 27001 · 93 controls
    SOC 2 · 61 criteria
    GDPR · 36 obligations
    NIST CSF 2.0 · 106 subcategories
  3. 3Merge

    Chunk verdicts merge deterministically: best evidence wins, ties break by earliest position in the document.

  4. 4Score

    Fixed weights produce the numbers. Full 1.0, partial 0.5, missing 0.0, totaled per framework.

  5. 5Persist

    Results land with pinned policy versions, frozen scope, and audit events. History is immutable.

The core decision

Complete enumeration, not retrieval.

A gap analysis must examine every control, because its job is to find what is absent. Retrieval systems fetch what looks relevant, and absence is precisely what never looks relevant. So the catalogs are enumerated structured data, and gaps can never be silently dropped.

Retrieval-based chat
  • Fetches the controls that look similar to the text it was given
  • A control with no matching text is simply never retrieved
  • Coverage depends on the question you happened to ask
  • Two runs can silently examine different controls
Aegis enumeration
  • Iterates the full catalog: all 296 controls, every run
  • A control with no evidence is recorded as a finding, which is the point
  • Coverage is a structural guarantee, enforced by tests
  • One result per control, or the run does not complete
Scoring

Numbers the model cannot invent.

The model classifies; the engine calculates. Each control's verdict maps to a fixed weight, chunk verdicts merge by a documented rule, and the total is arithmetic. Ask twice and the same verdicts produce the same score, to the decimal.

full    = 1.0
partial = 0.5
missing = 0.0
score = Σ weights / controls_in_scope × 100
Merge across chunks: best verdict wins; ties break by earliest chunk. Scores are never averaged across frameworks.
The LLM boundary

The model is a component, and it is treated like one.

Aegis engineers around the model the way you engineer around any unreliable dependency: strict contracts, budgets, retries, and failure modes designed in advance.

Forced structured output

The model answers through a mandatory tool call with a fixed schema, not free text. There is no prose to parse and no room for the reply to wander.

Computed token budgets

Response budgets are calculated from the control count of the framework being assessed, not guessed. Costs stay predictable and bounded.

An explicit retry ladder

Transient failures retry with exponential backoff, then fall back to a second model, then fail cleanly. Nothing hangs and nothing retries forever.

Graceful partial degradation

If one framework pass fails, the run completes as partial with the other results intact. A model hiccup never poisons a whole assessment.

History

Assessments are records, not chat transcripts.

  • Policy versions are immutable once ingested; new uploads create new versions.
  • Every run pins the exact policy version and framework version it assessed.
  • Scope is resolved and frozen when the run is created, forever.
  • Framework content updates never disturb recorded results.
  • Hard deletes are refused while any run references the version: the audit trail wins.
  • Dispositions and evidence overlay results; raw verdicts are never rewritten.
Skeptic's FAQ

The questions we hope you ask.

Is this just GPT with a prompt?

No. The model performs one narrow job: reading a document chunk against a structured control catalog and answering through a fixed schema. Enumeration, merging, scoring, scoping, versioning, and the audit trail are deterministic engine code. Swap the model and the engine still stands; delete the engine and the model alone cannot produce a defensible assessment.

What exactly leaves my network?

Document chunks and catalog context travel to the model API over TLS, to exactly one allow-listed host. Nothing else leaves: no telemetry, no embeddings shipped to third parties, no update phone-home. Every egress attempt, allowed or denied, is written to a ledger you can inspect in the app.

Can I reproduce a score?

The scoring is fully deterministic: given the same per-control verdicts, the same numbers come out every time, and the merge rules are documented. The model layer is where variance can enter, which is exactly why verdicts are recorded per control and per chunk, so any surprising verdict can be traced to the specific passage that produced it.

What happens when the model call fails?

Retries with exponential backoff, then a fallback model, then a clean failure that marks the run partial while every other framework keeps its results. Failure states are first-class citizens, not exceptions to hide.

Who reviewed the control catalogs?

NIST CSF 2.0 ships as verbatim official text. ISO/IEC 27001, SOC 2, and GDPR ship complete-coverage control objectives paraphrased by our team, disclosed as such, with a verbatim overlay path for deployers who hold the relevant licenses. Coverage is guaranteed and test-enforced; the wording is honest about what it is.

Want this in writing? Download the security review packet for your team.

Bring the hardest question you have.

The demo is a working session with the engine, not a slideshow about it.