opengate

IIIContext

Everything you run,on one index.

Connect what you already run.

1C, Drive, mail and CRM join one index, each with the permissions it already enforces. Nothing is migrated, and every result opens in its own system.

One index over every source

Every document arrives with its system's permissions, so the index answers each person with only what they may open.

1source1C over OData, cursor: DataVersion
2fetchdelta on change, resumable41 changed
3normaliseone record shape, permissions per itemrequired
4indexthe index never knows which system it came from

Written against one contract

Cursor-based sync, delta on change, and a record shape the index reads without knowing which system it came from.

Drive: per-file sharingread from the source at ingestioncaptured
1C: user roleread from the sourcecaptured
Bitrix24: access rightsread from the sourcecaptured
rules written by hand on our sidethere is no such table

Permissions arrive with the content

Each source's sharing model is read at ingestion and becomes the check that runs on every query. We translate rules; we never assign them.

Find it by BIN, or by what it means.

BIN, IIK and contract numbers need an exact match, and search built on meaning alone misses them. Context runs both and returns one list.

BIN 190740005302Open Gate Digital LLP, 1C, Counterpartiesexact
IIK KZ21 601A 2400 0000 4417Halyk, current accountexact
Contract no. 77-ADrive, Contracts, 14 passagesexact
“who supplies our meat”Et-Service LLP, contract no. 41by meaning

The identifier is the query

A number finds its record, a phrase finds its meaning, and both come back in one list.

Contract_77-A.pdfread in full, split by clause14 passages
Sale_4400.xlsxevery row a record, every column a fieldrows as fields
Email: estimate approvalthe thread, in orderthread
passage 9 of 14“9.1. This contract is valid until…”matched

The whole document is searchable

PDF, Word, spreadsheets and email are read in full and split into passages. A clause in the middle of a contract is as findable as its title.

Russian and Kazakh, all the way down.

Search has to understand the language before the model sees it: word forms, spelling variants, mixed sentences. Context handles both languages at every step.

«Целинный» = «АТЦ-галерея» = «ТОО АТЦ»three spellings, four systemsone entity
«шарт» = «договор»Kazakh and Russian, one indexone term
a document in two languagestokenised and stemmed in bothindexed whole
«Кто подписал акт по Целинному?»act, e-invoice, email3 documents

It reads the way your company writes

Mixed Russian and Kazakh in one document, and the same counterparty spelled three ways across four systems.

“that act for 16 million”FD
by meaning, then by the figure3 records
ATC Gallery, 16 130 000 ₸17 Feb 2026, 1C salematch
E-invoice, bank statementthe two beside it2 more

The vague question still lands

People ask for what they half-remember. A loose question against a precise index finds the record and the two beside it.

On your servers, or in Kazakhstan.

On-premise, air-gapped, or a Kazakhstan datacentre. The index and the permission check run where your data has to stay.

On-premiseyour own servers, your own network
Air-gappeda self-hosted model, no egress
Kazakhstan datacentrethe same package, a named datacentre
Data leaves the perimeternothing is sent out to be searched

Deployed where the data must stay

The same index and the same check, packaged for a datacentre you name. Nothing leaves the perimeter to be searched.

Providerunder your own accountyour key
Retentionnothing kept after the answerzero
Trainingin the terms and at the gatewayexcluded
Modelswappable without touching the indexswappable

Your data trains nobody

The answering model is yours to choose and yours to key. Retention is zero, training is excluded, and both are enforced at the gateway on every call.

Permission first, retrieval second.

The filter runs inside the query. A document the asker cannot open never enters the candidate set, so nothing leaks through a summary, a citation or a count.

1query“payroll for August”
2permission filterinside the query, before retrieval11 of 208
3candidatesdrawn from the permitted set only
4answerone path for search, answers and agentsheld by a test
candidates → filter → answer

The check runs inside the query

Retrieval starts from the set the asker may read. Filtering results afterwards would already have read what it then hides.

FDCFO: “payroll for August”Drive/Finance, 1C11 documents
FDanswer, with the figurePayroll_08.xlsxgranted
STIntern: the same questionno permitted document0 documents
STanswer: no access, and no hint of another resultrefused

Two people, one question, two results

Neither is told the other's result exists. The difference is a different retrieval, and a different count.

Your systems' rules, and only those.

Each system already decides who may open what, and Context applies that decision on the way out. On our own corpus: 197 of 208 files open to hello@, 51 to a client address, 0 leaks in 16 queries.

hello@by Drive's own sharing197 of 208 files
a client addressby Drive's own sharing51 of 208
16 queries, 2 identitiesmeasured on our own corpus0 leaks
a rule re-declared by handnothing to maintain, nothing to drift

Drive's own sharing decides

A file shared with one person is found by that person. A file shared with a link is found by everyone who holds it. Nothing is re-declared by hand.

09:14share revoked in DriveReconciliation_Q2.xlsx, one reader removed
09:20next syncrights re-read with the contentrights updated
09:21STquery from the removed readerthe file never enters the candidate set0 results
rights read at query timeyesterday's rights have nowhere to live

Permissions are re-read every time

A share revoked at the source stops here on the next sync. The check binds at query time, so yesterday's rights have nowhere to live.

Connectors for the systems you run.

One connector per source, each reading the records and the permissions that system already holds.

Driveper-file sharing, read from the source208 files
Gmailthreads, one per conversation523 threads
delta on changeTokenevery 10 minutes, resumable

Google Workspace

Drive and Gmail. Per-file sharing read from the source, which is what makes the permission check real.

Salesacts, e-invoices, payments1 240 records
CounterpartiesBIN, IIK, contracts312 records
delta on DataVersionover OData, user role captured

1C

Sales, counterparties and the product catalogue over OData, delta on DataVersion. The records this market searches by.

Deals, contactsover REST, access rights captured58 open
Taskswith their assignees140 open
outbound webhookseach change arrives as it happens

Bitrix24

Deals, contacts and tasks over REST, with outbound webhooks carrying each change.

One governed path to any model.

Every model call leaves through one gateway. It counts the tenant's spend, refuses a provider that may not see this data, and enforces zero retention in one place.

a provider, under your keythe answering model todayactive
a self-hosted modelon your hardware, the same indexfirst-class
swapretrieval, permissions and the log untouched

Model Hub

Swap the answering model without touching retrieval. A self-hosted model is a first-class choice, which an air-gapped deployment requires.

1calla question or an agent run
2gatewayzero retention, tokens countedper tenant
3providerunder your key

AI Gateway

One egress point for every model call, with token and spend accounting per tenant and per agent.

deployment: Kazakhstanthe constraint every call inherits
a provider in the permitted regionserves the query
a provider outside itrefused, and no setting overrides that

Residency routing

A deployment in Kazakhstan constrains which provider may serve a query. The gateway refuses the rest, and no setting overrides it.

Start with your systems.

Context is delivered against a real corpus with real permissions, by the engineers who built it. Tell us what you run and where the data must stay.