DOGM's AI sees your schema's table and column names, not your rows, and real data you need masked stays on your machine with dogm mask. This page describes the hosted service as it runs in the early-access beta, and labels what isn't there yet. The in-browser demo sends nothing anywhere.
The in-browser demo. Generation, masking, checks and CSV export run on your machine, with fictional data only.
In the beta
The hosted service: accounts, AI drafting and hosted runs are live in the early-access beta, with the encryption and tenant isolation described below.
What DOGM sees
Metadata by default.Rows only if you send them.
To draft a spec, DOGM needs the shape of your data, not what's in it. Here is where each kind of input goes.
What DOGM and the AI model receive, by type of data
Data
Sent to DOGM
Seen by the AI model
The description, SQL DDL or Prisma schema you paste
Sent to DOGM: Yes, stored with the spec version it drafted. Don't paste real rows
AI model: A description as written; a schema as parsed table and column metadata
Table names, column names, types and constraints
Sent to DOGM: Yes, when you import a schema
AI model: Yes
Values in INSERT statements inside pasted DDL
Sent to DOGM: Yes, as part of the stored text
AI model: Only when the project's AI sample values setting is on, and masked first
Rows from your database
Sent to DOGM: Never: DOGM doesn't connect to databases
AI model: Never
Masking keys
Sent to DOGM: Hosted runs use a project key DOGM generates and encrypts. dogm mask keys never leave your machine
AI model: Never
AI data handling
AI drafts.The engine decides.
AI helps you write a spec once, and every run after that is deterministic and uses no AI. Drafting uses Anthropic's Claude models through the Anthropic API, and DOGM treats everything they return as untrusted.
01
Draft
Claude turns your request and schema metadata into a draft spec.
02
Schema check
The draft must match the spec's JSON Schema, or it's rejected.
03
Compile
The engine's own compiler checks it again and reports errors by path.
04
Approve
Nothing runs until a person on your team approves the spec.
What the AI never does
Generate data rows
Decide whether a check passes
Hold or see masking keys
Connect to your database
Column names and schema comments are treated as data, never as instructions. The spec language has no code execution and no SQL passthrough, so injected text cannot run anything.
Every AI call is logged with the fields it sent.
The Claude API has no EU-only processing option. AI runs only when someone in your workspace drafts a spec or asks for an explanation of a failed check, so if you need EU-only processing, write specs by hand and skip those two actions.
Protection
Keys, tenantsand local work.
Live in the beta
Encryption with Tink and Cloud KMS
Webhook signing secrets and project masking keys are encrypted with a Google Tink AES-256-GCM keyset. That keyset is itself encrypted by a key held in Google Cloud KMS, which never leaves the KMS. Database connection strings will be stored the same way once database connections arrive; they aren't in the product yet.
Workers decrypt a masking key in memory for the length of one run only.
Live in the beta
Tenant isolation with row-level security
Every tenant table carries an organization ID and is protected by Postgres row-level security. The app connects as a role that owns nothing and cannot bypass it, and the tenant is set per transaction.
Staff admin actions use a separate role and are written to an audit log.
CLI, from source
Masking on your machine
dogm mask runs the same engine locally, so real rows and their masking keys stay on your machine. No KMS and no DOGM server are involved.
dogm mask is in the CLI, which you build from source until its first release.
Masking is pseudonymization, not anonymization. Anyone with the key can rebuild the mapping for a list of candidate values, and under the Data Privacy Act of 2012 masked personal data is still personal data.
Responsible disclosure
Found a security issue?
Email us what you found and the steps to reproduce it. Give us time to fix it before you share it, and don't access other people's data or degrade the service while you test.