# monsys.ai — Next 12 weeks: Audit-Ready by August

*Strategic plan, 2026-05-19, based on Claude's analyse (the sharpest of the three).*

## TL;DR

Stop bouwen aan diepte. Bouw één deliverable: **één maandelijkse PDF die een
auditor in 10 minuten begrijpt.** Alles wat we de komende 12 weken bouwen
voedt die PDF of maakt 'm verkoopbaar. Geen losse features.

De pitch verandert van *"5 servers gratis, monitoring stack"* naar
*"NIS2-compliance, automatisch maandelijks bewezen, met cryptografisch
ondertekende audit-trail. Vraag de proefmaand aan."*

## Strategische conclusies (na de drie analyses)

| Wat ChatGPT zei | Wat Gemini zei | Wat Claude zei | Wat we nemen |
|---|---|---|---|
| "Sovereign Fleet Commander", 4 acties | 30 engineering verbeteringen | Verkoop aan CISO niet sysadmin; bouw Trust Score + Compliance Coverage + Audit Pack als één bundel; speel MSP-spel | **Claude's diagnose**. ChatGPT's framing is correct maar te breed. Gemini is engineering-debt zonder verkoopprioritering. |

**Positionering die we vanaf vandaag voeren:**

> *"Beheer je servers zonder ze ooit weg te geven."*

Of voor de internationale pitch:
> *"Detect, decide, and remediate — without giving anyone permanent root."*

**Doelgroep die we vanaf vandaag schrijven:**
- Primair: CISO of compliance-lead, Belgische SME 50-500 medewerkers, NIS2-onderworpen.
- Secundair: Belgische MSPs (Easi-, Combell-, Cegeka-light-spelers) die honderden klanten in compliance moeten brengen.
- Tertiair: sysadmins blijven de gebruikers, niet de kopers.

**Wat we niet doen** (Claude's no-list):
- Geen OpenTelemetry-compatibel maken voor AI ingest.
- Geen Kubernetes-installer als first-class deployment.
- Geen LLM-gegenereerde EATs zonder mens-in-de-lus.
- Geen "AI-native" claim — wel "audit-grade AI observability".
- NL-default blijft (Zwitserse + Luxemburgse markt waardeert het).

## De ene deliverable: het **Monthly Audit Pack**

Eén ondertekende PDF per tenant per maand met deze secties:

1. **Executive summary** — Trust Score deze maand (één getal 0-100), trend
   over 12 maanden, top 3 risicoposten met aanbevolen actie.
2. **Compliance coverage matrix** — NIS2 Annex II + CRA Annex I + (later)
   ISO 27001:2022 Annex A. Per control: gedekt / gedeeltelijk / niet, met
   referentie naar het bewijssignaal.
3. **CVE-history van de maand** — KEV-listed first, fix-times (p50/p95),
   nog open watching-CVEs.
4. **EAT-log van de maand** — wie issued wat, wanneer, met welk resultaat,
   ondertekend door welke hub-key.
5. **SLA-rapport per kritisch service** — uit `sla_buckets`.
6. **Evidence-pack manifest** — alle gegenereerde packs (AI + Copilot +
   OpenAI + de Audit Pack zelf), met hashes en signing-key references.
7. **Cryptografische appendix** — Ed25519-signature over de gehele PDF,
   hub-pubkey reference, transparency log entry.

Dit is de "PDF die de auditor in 10 minuten begrijpt" uit Claude's
conclusie. Alles wat we bouwen, voedt deze PDF.

## Sprint 1 — Weeks 1-4: Build the Audit Pack

**Doel einde week 4:** voor één pilot-tenant (canvoseu-dev + een echte
SME-klant) genereren we de eerste echte Audit Pack PDF.

### Week 1 — Trust Score 1.0

Schema `056_trust_score_scaffolding` bestaat al. Algorithm is TBD.

**Formule (Claude's voorstel, gevalideerd):**

| Component | Weging | Data source |
|---|---|---|
| Patch hygiene | 30% | `inventory_dependency_cves` × KEV/EPSS × age-sinds-fix-available |
| Agent health | 20% | `agent_metrics` heartbeat uptime + `agents.agent_version` currency |
| Secrets exposure | 15% | `inventory_security_findings` open vs `cve_suppressions`/resolved |
| Drift | 15% | Process DNA divergences + lifecycle-script anomalies |
| EAT discipline | 10% | `emergency_tokens` acknowledged % vs `acknowledged_at IS NULL` na 7d |
| Evidence continuity | 10% | maandelijkse evidence packs aanwezig × signature-verify-OK |

**Concrete werkstappen:**
- [ ] `TrustScoreWorker` (Go, hourly tick): compute per `(tenant_id, agent_id)`
      + per `(tenant_id, NULL)` aggregaat. Write to `trust_scores` (al
      gescaffold in migratie 056).
- [ ] `GET /api/v1/agents/:id/trust-score` + `GET /api/v1/tenants/me/trust-score`
      handlers. Returnt huidige score + 12-maands trend.
- [ ] Dashboard `/trust-score` page: één grote score-cirkel, 12-maands
      grafiek, breakdown per component, top-3 verbeteringsacties met
      "Fix dit nu"-knop die de juiste EAT-flow opent.
- [ ] PDF-export endpoint `GET /api/v1/tenants/me/trust-score.pdf`.

### Week 2 — Compliance Coverage Engine

Schema `053_compliance_control_mappings` + `055_signal_streams` zijn er al.
Wat ontbreekt: de daadwerkelijke mapping-tabel + coverage-handler.

**Concrete werkstappen:**
- [ ] **Control catalog seed**: SQL fixture met NIS2 Annex II (10 maatregelen)
      + CRA Annex I (13 eisen). ISO 27001:2022 (93 controls) komt later.
- [ ] **Mapping fixture**: per control, welke `signal_streams.signal_key`
      (of welke combinatie) dit dekt. Voorbeeld:
      - NIS2 Art. 21(2)(d) supply-chain security → dekt door
        `dependency_scan` + `inventory_dependency_cves` + `evidence_pack:supply_chain`.
      - NIS2 Art. 21(2)(a) risk-analyse → `trust_score` + maandelijkse rollup.
      - CRA Annex I §6 secure updates → `monsys-package-update`-EAT-log.
- [ ] `GET /api/v1/compliance/coverage?framework=nis2` → returnt per control:
      `{covered: bool|partial, signal_refs: [], last_evidence_at, gaps_text}`.
- [ ] Dashboard `/compliance/coverage` view: matrix met groen/geel/rood +
      uitklap met bewijs-link per cel.

### Week 3 — PDF assembly

**Concrete werkstappen:**
- [ ] Server-side PDF renderer (Go): `gofpdf` of `chromedp` headless Chrome
      tegen een Next.js print-CSS pagina. Tweede pad lijkt beter — we
      hergebruiken dashboardcomponenten.
- [ ] `MonthlyAuditPackWorker`: 1× per maand (1e van de maand om 02:00 UTC)
      voor elke tenant met `>= 1 agent` + `audit_pack_enabled = true`. Schrijf
      naar `audit_packs(tenant_id, year_month, pdf_path, signature, signing_key_id)`.
- [ ] Ed25519-sign de PDF-bytes met hub-key voor de tenant.
- [ ] `GET /api/v1/audit-packs` + `GET /api/v1/audit-packs/:id/download` handlers.
- [ ] Dashboard `/audit-packs` page: lijst met groen=signed/geel=missing/
      rood=signature-mismatch indicators. Eén-klik download.

### Week 4 — Polish + first real pack

- [ ] Apply Audit Pack worker on pilot tenant; review the actual generated PDF
      with a real Belgian compliance consultant (you have contacts).
- [ ] Fine-tune Trust Score weights based on what a real pilot CISO would
      want to see.
- [ ] Iterate PDF layout — this is sales material, not a developer tool.
- [ ] **Marketing milestone:** publish landing page section
      `monsys.ai/nis2` that says "ontvang je eerste Audit Pack binnen 30
      dagen, gratis tijdens proefperiode".

**Einde sprint 1 deliverable:** een echte PDF, ondertekend, voor een echte
tenant. Verkoopbaar.

## Sprint 2 — Weeks 5-8: MSP play + AI incident summarisation

### Week 5 — MSP wholesale model

Schema-infrastructuur (`074_groups_sla_rbac_failover`, `064_auditor_msp`,
multi-tenant) is er al. Wat ontbreekt: het commerciële model + cross-tenant
cockpit.

**Concrete werkstappen:**
- [ ] Stripe + PayPal: voeg "MSP wholesale" subscription plan toe (€1.50/server,
      min 50 servers commitment, NET-30 invoicing).
- [ ] `partner_organizations` tabel: een entiteit boven `tenants` waar één
      MSP eigenaar is van N tenants en marges + branding aanstuurt.
- [ ] `partner_users` role: kan over alle child-tenants kijken zonder hun
      data te kunnen muteren behalve via expliciete tenant-impersonation
      (TOTP-gated, audit-logged).
- [ ] `MSP cockpit` page (`/msp/cockpit`) bestaat al als skeleton — bouw 'm
      uit: cross-tenant CVE-search ("alle KEV-CVEs over al mijn 47 klanten"),
      cross-tenant agent-list, fleet-wide alert-stream.

### Week 6 — Cross-tenant operational features

- [ ] **Cross-tenant patch-windows**: één bulk-update-actie die per tenant
      een EAT genereert in hun eigen tenant-context (signature komt van
      tenant-key, niet partner-key — Claude's "per-tenant signing keys"-punt
      blijft heilig).
- [ ] **Per-MSP SLA-templates**: één SLA-definitie kan op N tenants toegepast
      worden. Maandelijkse rollup loopt onafhankelijk.
- [ ] **White-label rapporten**: Audit Pack heeft een MSP-logo + footer
      reseller-branding optie (bestaand `tenant_branding` mechanisme).

### Week 7 — AI Incident Summarisation

Alles wat we nodig hebben staat in de stack: `pgvector` (013), Apache AGE
graph, Ollama, `anomaly_correlations` (063).

**Concrete werkstappen:**
- [ ] `IncidentSummariseWorker`: bij elke nieuwe `alerts.severity='critical'`:
      1. pgvector cosine-similarity over historische alert-descriptions
         (top-3 most similar in afgelopen 90d).
      2. AGE graph traversal: downstream services van de getroffen agent.
      3. Ollama call: prompt = `(current alert + 3 historical + blast
         radius + recent 5 EATs)` → "in 2 zinnen: wat is dit en wat is de
         veiligste actie?"
      4. Write to `alerts.ai_summary` column (nieuwe kolom in alerts).
- [ ] Dashboard: toon de AI-samenvatting prominent op elk critical alert,
      met een "Suggested EAT" button die een drafted (NIET auto-signed!)
      EAT opent in de Emergency-builder.
- [ ] **Critical guard:** geen automatische uitvoer. Voorgestelde EAT staat
      in `emergency_tokens_drafts`, operator moet bewust signeren.

### Week 8 — Demo polish + sales motion

- [ ] **Sales demo script** rond een echt incident: disk-full op een
      pilot-server → AI samenvat ("dit lijkt op het Redis-OOM-patroon van
      12 april, downstream: flowd-api in 4min") → operator signs voorgestelde
      EAT → resolution in onder 60s.
- [ ] Marketing-update: korte video (90s) van het bovenstaande, op
      monsys.ai/why frame en in een sales-deck.
- [ ] Eerste MSP-pilot binnenhalen (warm contact via je BeHosted-netwerk).

## Sprint 3 — Weeks 9-12: Differentiatie + mobile

### Week 9-10 — Multi-party EAT signing voor Level 3

Claude's punt is sterk: bij een Reboot of DeleteAgent moet 1 operator niet
genoeg zijn. Dit is geen "feature", dit is een verkoopargument bij
defensieleveranciers en gemeentes.

**Concrete werkstappen:**
- [ ] Schema 084: `emergency_token_signatures` (per nonce: N signatures met
      respective user_id + ts + sig).
- [ ] EAT-builder UI: voor Level 3 acties toont de hub "needs 2 of N
      operators in scope 'admin'". Eerste operator klikt sign → token wacht
      in `state='partially_signed'`. Tweede operator krijgt notification +
      moet apart bevestigen met eigen TOTP.
- [ ] Per-tenant policy: hoeveel signatures vereist (default 2 voor Level 3,
      configurable). Cool-down tussen first en second signature
      (anti-coercion: niet onder druk in 30s afhandelen).
- [ ] Agent-side verify: refuse EAT als `signatures.length < required_for_level`.
- [ ] Marketing: "*geen enkele operator kan in zijn eentje je productie omleggen.*"

### Week 11 — Mobile-first PWA

Geen React Native nog. Een goed gebouwde PWA dekt 95% van de
mobiele-use-cases voor on-call.

**Concrete werkstappen:**
- [ ] Next.js PWA-config + service worker + manifest.
- [ ] Three mobile-first routes only:
      - `/m/alerts` — lijst actieve critical alerts, swipe-to-ack.
      - `/m/agents/:id` — Trust Score + recente events + één-klik
        "Isolate this agent" (TOTP-gated, pre-getekende voor degraded mode).
      - `/m/audit-pack` — laatste maand's PDF download.
- [ ] iOS Add-to-Home-Screen + Android PWA install.
- [ ] Notifications: web-push voor critical alerts (gewoon op ntfy
      voortgebouwd).

### Week 12 — Pre-issued playbook EATs (hub-down resilience)

Claude's juiste antwoord op het "hub is single point of failure"-probleem:
geen lokale escape-hatch, maar pre-issued conditional EATs.

**Concrete werkstappen:**
- [ ] Schema 085: `playbook_eats(playbook_id, agent_id, condition_jsonb,
      eat_payload, signed_at, valid_until)`.
- [ ] Hub bundelt deze EATs met `/heartbeat` response (1× per uur, geen
      polling-overhead).
- [ ] Agent slaat ze lokaal op met TTL en `condition_jsonb` (e.g.
      `{type: "disk_full", threshold: 95, mount: "/var/lib/docker"}`).
- [ ] Wanneer agent lokaal voorwaarde triggert EN hub onbereikbaar is voor
      > 10min: voer EAT lokaal uit. Single-use nonce zorgt voor replay-bescherming
      ook als hub later weer up gaat.
- [ ] Audit: bij volgende hub-contact stuurt agent het resultaat zodat
      audit-trail compleet is.

**Einde sprint 3 deliverable:** een verkoopbare differentiator-stack die
Datadog en CrowdStrike echt niet hebben:
1. Multi-party signing voor destructive ops.
2. Mobile PWA voor on-call.
3. Hub-down resilience via pre-issued playbook EATs.

## Wat we NIET bouwen in deze 12 weken

Bewust uitgesteld, ook al staan ze in Claude's lijst:

- **Browser-extensie voor client-side EAT-verificatie via transparency log**
  (Claude 4.4). Sterk idee maar enterprise-only verkoopargument. Komt na de
  eerste defensie-deal aan tafel.
- **Configuration integrity / drift engine** (Gemini en Claude beiden).
  Aparte product-laag, 6+ weken werk. In een aparte epic later in 2026.
- **Community marketplace voor playbooks** (Claude 3.3 fase 3). Pas zodra
  we 50+ paying tenants hebben — anders is de marketplace leeg.
- **Native Slack/Discord-formaten** (Gemini B2). Webhooks werken al — eerst
  schaal halen, dan polish.
- **SBOM export** (Gemini B5). Klopt dat CRA dit eist. Maar de Audit Pack
  PDF bevat al de dependency-lijst — een dedicated SPDX/CycloneDX export is
  een follow-up van sprint 1, geen voorrang.
- **AI supply chain governance** (ChatGPT module 1.3 deepening, Claude 6.5).
  Aparte module na de huidige AI observability GA in juli 2026.

## De technische werkschuld die we ondertussen WEL aanpakken

Niet als feature, maar als hygiëne — kleine PRs ingebed in de sprints
hierboven:

- **A5** SLA rollup typo. ~30 min, sprint 1 week 1.
- **A4** topology_worker ON CONFLICT dedup. ~1u, sprint 1.
- **A3** Trivy cache perm. ~30 min, sprint 1.
- **A1** yoga-jeroen agent update unblocking. ~15 min, vóór sprint 1.
- **C5** Hub-side gzip ingest. ~half dag, sprint 2.

Verderop in 2026 (sprint 4+):
- **C2** RLS gotcha — uniforme `withTenant(ctx, tenantID, func)` helper.
- **A2** Caddy reload-without-admin-API fix.
- **E1** EAT signing-key rotation enforcement.

## KPI's om succes te meten

| Metric | Sprint 1 doel | Sprint 2 doel | Sprint 3 doel |
|---|---|---|---|
| Audit Packs gegenereerd | 1 (pilot) | 5 tenants | 10 tenants |
| Trust Score actief op | 1 tenant | 5 tenants | 10 tenants |
| MSP-partners aangesloten | 0 | 1 | 3 |
| Paying tenants | huidig + 0 | huidig + 2 | huidig + 5 |
| Sales calls met CISO/CFO target | 0 | 3 | 8 |
| Demo-conversie naar pilot | n/a | ≥1 | ≥3 |

KPI's die we **niet** najagen in deze fase (Claude's "stop bouwen aan
diepte"-instructie):

- ❌ Aantal features shipped per maand
- ❌ Github stars
- ❌ Code lines toegevoegd
- ❌ HackerNews mentions

## Sales-motion verandering (parallel met de bouw)

Niet alleen ontwikkelaarswerk — pitch-deck moet meeveranderen.

| Vandaag | Vanaf sprint 1 eind |
|---|---|
| Frontpage: "Monitor je servers vanuit één plek" | "Bewijs je NIS2-compliance maandelijks, automatisch ondertekend" |
| Sales-pitch: feature-overzicht | Sales-pitch: laat de Audit Pack PDF van vorige maand zien |
| Demo: dashboard rondleiding (30 min) | Demo: één incident-resolution flow (5 min) + Audit Pack walkthrough (3 min) |
| Doelgroep-pagina: "voor sysadmins" | Doelgroep-pagina's: "/voor-cisos", "/voor-msps", "/voor-auditors" |
| Pricing pagina: €3/server (sysadmin frame) | Pricing pagina: €3/server + "Audit Pack inbegrepen" + MSP wholesale aanvragen |

Het bestaande gratis-tier (5 servers) blijft als acquisitie-trigger — maar
de boodschap eromheen verschuift van "test 't" naar "geef je accountant
deze maand al een PDF te zien".

## Eerste taak — wat doen we deze week?

Een 4-week sprint heeft alleen waarde als er een gedefinieerd week-1 begin is.

**Week 1 dag 1-2 (deze week):**
1. Schrijf de Trust Score formule uit in pseudocode (1 dag).
2. Begin met `TrustScoreWorker` implementatie (1 dag).
3. Klein technisch werk inhalen (A1, A3, A4, A5) tussen door.

**Week 1 dag 3-5:**
- Worker → `trust_scores` rows voor canvoseu-dev + monsysai + websitenormnest.
- Eerste `GET /api/v1/agents/:id/trust-score` handler.
- Dashboard `/trust-score` skeleton met de score-cirkel en breakdown.

Dat is concreet werk voor maandag-vrijdag. Daarna komt de echte UI-polish
+ PDF-renderer in week 2-3.

## Tot slot — wat Claude's analyse ons echt geeft

De drie analyses zeggen verschillende dingen:
- ChatGPT: "je hebt een killer feature in EAT, marketing eromheen bouwen"
- Gemini: "hier is je engineering-backlog"
- Claude: **"je verkoopt aan de verkeerde persoon"**

Claude's bijdrage is de enige strategische, niet alleen tactische, omdraaiing.
De 12-weken-plan hierboven implementeert die strategische omdraaiing als
één samenhangend product (Audit Pack) waar alle bestaande techniek in
samenkomt, in plaats van zoveelste features uitsplitsen.

Dat is wat we vanaf nu bouwen.
