How it works

The architecture, in plain English.

Two surfaces. One pipeline. ServiceNow holds the case record and the audit trail. SharePoint holds the documents. Azure runs the AI. Your tenant, your data, your governance.


ServiceNow Workspace                            Your Microsoft tenant
┌─────────────────────────────┐                ┌─────────────────────────────┐
│                             │                │                             │
│  Case record (any table)    │                │  SharePoint Online          │
│  ┌───────────────────────┐  │                │  └─ documents (Graph)       │
│  │ Lore iframe           │  │                │                             │
│  │  - Timeline           │◄─┼──── SignalR ───┤  Azure Functions            │
│  │  - Ask the case       │  │                │  └─ Gather AI               │
│  │  - Claim Summary      │  │                │      ├─ /classify-enrich    │
│  │  - EVAM cards         │  │                │      ├─ /classify-email     │
│  └───────────────────────┘  │                │      ├─ /share-create       │
│           ▲                 │                │      └─ /share-revoke       │
│           │                 │                │              │              │
│  Scoped REST (x_verge_*)    │                │              ▼              │
│  ┌───────────────────────┐  │                │  Microsoft Foundry          │
│  │ x_verge_gather_*      │◄─┼─── REST/PATCH─┤  └─ Anthropic Claude         │
│  │  - documents          │  │                │      ├─ Sonnet (PDFs)       │
│  │  - tags               │  │                │      └─ Haiku (emails)      │
│  │  - share events       │  │                │                             │
│  │  - audit              │  │                │                             │
│  └───────────────────────┘  │                │                             │
│                             │                │                             │
└─────────────────────────────┘                └─────────────────────────────┘

Polymorphic table reference

Lore isn't tied to sn_customerservice_case. The backing tables (x_verge_gather_document, x_verge_gather_tag) reference the parent polymorphically by table name + sys_id. Move to a different host table by changing one config line.

Single-file iframe

Vite's single-file plugin compiles the React app to one HTML file. Drop it on any ServiceNow UI Macro. No CDN dependencies, no asset fetches at runtime, no bundle splitting to operate.

Zero document storage in SN

Bytes go to SharePoint via Graph. ServiceNow holds the metadata row with the SharePoint URL and Graph item ID. Storage costs and SN attachment limits stop being the bottleneck.

Per-user real-time

Gather AI publishes SignalR events scoped by userId. Only the user who uploaded the file sees the “enrichment complete” toast and the row update. High-volume teams don’t drown each other in cross-noise.

Tiered models

Sonnet for vision-heavy PDF classification. Haiku for synchronous email tagging. Microsoft Foundry first, direct Anthropic API as fallback. Cost estimates returned in every response.

Audit-grade sharing

Every share goes through tag policy + BAA + role-access checks. Every grant, deny, BAA-block, and policy-block writes an event row. Revoke is a Graph DELETE plus an audit row.