DISCINTELCLIENT ONBOARDING

Client Onboarding & Integration Guide

How your institution evaluates DISCINTEL during early access, prepares its own governance model, and checks the evidence without having to take our word for it.

Updated October 23, 2026 · Early access · For evaluation teams, risk and compliance leads, and the engineers who would connect AI agents

What changed on 23 October: the AI processing row, the subprocessor list and the runtime governor entry. Legal Intelligence is named as the only feature that sends content to an AI model provider, Anthropic is listed as its subprocessor, and production is stated to run the governor in shadow mode.

What changed on 21 October: rows for Legal Intelligence, handoffs, agent revalidation and language in What's available today, a matching Known limitations entry, and a link from the status row for guided tours to the Spanish and French tours.

What changed on 15 October: a row for the guided tours in What's available today.

What changed on 14 October: two rows added to What's available today: jurisdiction control (available now) and DORA and NIS2 regulatory context (available, limited).

Open DISCINTEL
The idea in one paragraph. An AI agent should act only within authority a person granted it, for a specific institution, environment and amount, and only after the approvals your policy requires. DISCINTEL checks each proposed action against that authority before it happens, admits the execution once, records what was independently observed afterwards, and writes every step to a hash-linked evidence log you can re-verify on your own machine. This guide covers what you can test today, what to prepare for your own deployment, and how the pieces are designed to connect to your systems.

1. Before you start

These four points shape everything else in the guide.

Status labels in this guide:Available nowAvailable, limitedNot yet available

2. What's available today

Everything marked available can be tested in your workspace now. Everything marked not yet available is designed but not built or connected, and has no committed date.

CapabilityStatusNotes
Governed action lifecycle: decision, approvals, single-use admission, receipt, observed outcome, closureAvailable nowDecisions, approvals, admissions, tool-gate verdicts and closure are issued by the server, not your browser
Approver decisions: approve, request changes (back to the requester for a new revision) or reject (final), each with a recorded reason; approvals lapse after 72 hours unless the obligation sets another periodAvailable nowApprovers are simulated personas in the sample
Evidence-bound research: public sources fetched by the server, hashed evidence, claims that must quote their evidence, synthesis and a completion check that re-verifies every hashAvailable, limitedPublic pages only (text, HTML, JSON, XML up to 2 MB; no PDF yet). Private sources are pasted as text after a Security Administrator approves access. Research never authorizes an action
Jurisdiction control: a payment, claim or purchase order is blocked unless both its tool and its governance domain allow the jurisdiction where it takes effect; a domain's jurisdictions change only through a governed action approved by the CFO and the Security AdministratorAvailable nowChecked by the workspace itself on decisions, tool calls and execution admission, whatever the runtime governor's mode. US, EU, UK and CN in the sample
Regulatory context: DORA and NIS2 events that apply to a decision in the EU or a member state, shown on the decision and recorded with itAvailable, limitedContext only: it never changes a decision and is not legal advice. A dated, hashed snapshot of EU DORA and NIS2 events; other frameworks not yet included
File intake: upload, drag and drop, camera, pasteAvailable nowPDF, CSV, Excel, JSON and images up to 50 MB, each fingerprinted with SHA-256 on arrival
Governed administration: roles, break-glass, retention, suspending and reinstating agents, agent environments, enabling and disabling toolsAvailable nowEvery change is proposed, approved and evidenced like any other action
Hash-linked evidence log, in-app verification and Inspector reconstructionAvailable now
Claim settlements (sample Claims domain): approval on cumulative exposure per claim and payee over 30 days, so splitting a settlement can't evade a limitAvailable nowThresholds are illustrative; the payment rail and observer are simulated
Policy comparison: a policy compared with the workspace's payment-release rules, with each rule marked match or gapAvailable, limitedText, Word (.docx) and PDF policies with selectable text, read in your browser; scanned PDFs can't be read. Payment release only; fixed text rules, not AI. Unreadable sentences are listed, not guessed. Changes nothing the workspace enforces
Evidence packages as JSON: whole institution (NAIC mapping) or a single actionAvailable nowVerifiable offline with the script in section 7
NAIC AI Risk Evaluation Supplement (v5.0 exposure draft) mappingAvailable, limitedDecision support only; not a regulatory filing or certification
Production and Test environmentsAvailable, limitedTest is a label checked on every action, not a separate system or data store
Runtime governor: a second, independent check on each tool useAvailable, limitedShadow mode: its verdict is recorded beside each decision but never changes the outcome
Guided tours: 11 walk-throughs of the real screens, ten for the Business workspace and one for the Personal spaceAvailable nowBuilt from the sample institution; open from Your account → Guided tours or at /tours.html. Available in Spanish and French, and a signed-in person resumes where they left off
Legal Intelligence: a matter's sources are retrieved by the server; the Legal Intelligence agent drafts a research memo and a legal-to-code traceability table from that evidence only; the server checks every quote word for word; each cited source is a link to the retrieved page; a licensed attorney reviews every draftAvailable, limitedPublic sources and provided text only; confidential client material is not supported. Jurisdictions: US federal, North Carolina, South Carolina, Colorado, EU. The agent cannot file, send, sign or give a final opinion, and no action it asks for is executed. Counsel review is self-attested; DISCINTEL cannot verify a licence. A draft is for attorney review, not legal advice
Handoffs: a blocked or held settlement reaches a named owner, who acknowledges it within four business hours or it escalates, and records what was doneAvailable nowDISCINTEL records the outcome the institution reports; it does not judge it
Agent revalidation: an agent whose version changed is revalidated before it acts on a consumer-facing effectAvailable nowA Security Administrator other than the requester records the revalidation, with a note; the approver is simulated in the sample
Language: the app and the guided tours in Spanish and French; chat understands requests in eitherAvailable, limitedTranslations are awaiting native-speaker review. An amount that could be read two ways, or one not in US dollars, is asked about, not guessed. These guides are in English only
Loading your own institution, people, agents, tools and policiesNot yet availablePrepare with the worksheet in section 5
Shared team workspace with real approversNot yet availableApprovers are simulated today
Single sign-on with your identity provider; user provisioningNot yet availableSign-in today is passkey, or email and password
API access for your agents and systemsNot yet availableThe server API serves the DISCINTEL app's own sign-in; no client credentials are issued
Distributing a research summary as its own governed action (decision, approval, sandbox send)Not yet availableDesigned; research results stay in the workspace today
Data source connectors: SharePoint, OneDrive, Google Drive, Box, databases, approved APIsNot yet availableListed in the app under Connect Source as planned
Execution on your systems; independent outcome observationNot yet availableThe payment rail and the observer are simulated

3. Onboarding, step by step

Plan on about an hour for one evaluator to get from sign-up to a verified evidence package.

  1. Create the account. Go to app.getdiscintel.com and choose Create free account. Use a passkey (Face ID, Touch ID or Windows Hello) if you can; there's nothing to phish. Verify your email, then choose Business.
  2. Initialize the sample institution. On first visit choose Initialize sample institution. It loads the institution's records, records its own setup as the first evidence events, and starts the sample request with a 48-payment wire file. You act as Olivia Carter, Treasury Manager, a demo persona.
  3. Confirm you're saving to the server. The status chip in the top bar should read Persisted · Netlify. If it doesn't, see Troubleshooting.
  4. Record a baseline. In Reports & Assurance, generate the NAIC evidence package and run the verifier from section 7 on it. Its last lines read Record this head: <sequence>:<hash>. Keep that line, and the package, somewhere outside DISCINTEL, such as your evaluation file. It's how you'll show later that the log only grew.
  5. Run the evaluation checklist. Work through section 4. Each exercise names what you should see.
  6. Exercise administration. Follow at least one play in the Admin playbook, for example suspending and reinstating an agent, so your control owners see that changes to governance are themselves governed.
  7. Export and verify again. Generate a new NAIC package and an action package, and run the verifier on them, checking the new NAIC package against your baseline as shown in Checking the log only grew.
  8. Map your institution. Fill in the worksheet in section 5 with your risk and technology owners. It is the input for a pilot once your own records can be loaded.

4. Evaluation checklist

Each exercise tests one control. The expected result is what the sample produces. If you see something else, note the evidence sequence number from TrustDNA Evidence and tell us.

#Do thisExpectControl tested
1After initializing, read the analysis of the sample file in Chat & Actions48 payments analyzed; two exceptions held out (a duplicate payment and a changed beneficiary account), leaving a clean batch of 46Files are fingerprinted, and analysis uses no authority
2Submit for governance evaluationASK: $455,900 across 46 payments needs Manager, Dual and CFO approval, bound to the file, agent, tool and environmentServer-issued decision with every check listed
3Record the three approvals, then request execution admissionAdmitted once; a receipt; an observed outcome of CONFIRMED; Closure · CLOSED · server-evaluatedSingle-use admission; receipt kept separate from outcome
4On another action, choose Simulate: replay admissionThe replay is refused and recordedAn admission works once
5In Objects & Data, choose Simulate: modify this file on a bound fileThe decision stops applying; re-evaluation is requiredDecisions are bound to file hashes
6Switch the agent, or the environment, on an evaluated actionDecision and approvals stop applying; re-authorization is requiredA material change invalidates authority
7Select an agent without the screening grant and ask for a sanctions checkSanctions screening was not run, with the reason, recorded under that agent's nameHaving a tool isn't permission to use it
8Run Simulate: rail rejects, then Simulate: short settlementA failed execution that needs a new admission; a MISMATCH outcome that stays open as an exceptionClosure requires a matching observed outcome
9Withdraw an action after evaluation, before executionDecision retired, approvals and admission invalidated, action DISCARDEDNothing executes after withdrawal
10Disable the payment tool through Administration, then try to executeNo dependent action can be admitted while the tool is disabledRevocation takes effect immediately
11Inspector → Reconstruct and verifyEvery link recomputes; the action traces file → request → decision → approvals → admission → receipt → outcomeEnd-to-end reconstruction
12On a request awaiting approval, choose Reject or request changes → Request changes with a reason, then try to re-evaluate the same revisionRefused until a new revision is saved; the old approvals no longer countAn approver's "no" can't be bypassed by resubmitting
13In Research, retrieve a URL on a private network (for example an intranet host)Refused: the host resolves to a non-public address. The refusal is recordedThe server can't be used to reach internal systems
14Record a FACT claim whose quote isn't in the evidenceRefused: the quote does not appear word for word; recorded as CLAIM_REJECTEDNo unsupported facts
15Start research that asks for Connected private sourcesWaits at Authorization required with an access request a Security Administrator (not the requester) must decidePrivate data needs separate human authorization

5. Mapping your institution

DISCINTEL models governance as 19 record types in five groups. Today a workspace holds only the sample institution, so this worksheet is preparation: it is what your own deployment would be built from once loading your records is available.

GroupRecord typesWhat you gatherTypical owner
IdentityInstitution, Governance domain, Principal, Organization role, Agent identityThe legal entity and its jurisdictions; business domains (for example Treasury, Procurement, Compliance) and the environments each allows; the people who request and approve; roles, and the pairs one person must never hold together; each AI agent's purpose, owner, version, consequence class and environmentsRisk, compliance, HR systems
CapabilityTool, Governed objectEvery system an agent can call: its type (HTTP API, MCP server, internal service, enterprise application), owner, consequence class, allowed environments and which agents may invoke it. The kinds of files and data agents act on, and their sensitivityTechnology and data owners
AuthorityAuthority grant, Delegation, Obligation, Revocation eventFor each agent, the effects it may cause (for example prepare a payment, release a payment, read the vendor master, screen sanctions) with scope and amount limits. Approval thresholds, dual-approval rules, outcome-verification and evidence requirementsPolicy owners, first line
ActionGoverned action, Decision, Approval, Execution admission, Execution receipt, Observed outcomeNothing to gather: these are produced as agents act. Decide which system reports receipts and which independent source confirms outcomesOperations
EvidenceEvidence event, Retention policyThe minimum retention for each record class, and who may change itRecords management, legal

Consequence classes

Every agent and tool carries one, from A (low) to D (regulated or financial). Assign it from the worst thing the agent or tool could do, not the usual case.

Questions to settle before a pilot

6. How integration works

This flow runs end to end in the sample today, with the payment rail and the observer simulated. Connecting it to your own agents and systems is designed but not yet available: no client credentials or connectors are issued.

Integration flow: your agent proposes, DISCINTEL decides, your approvers sign, DISCINTEL admits the execution once, your system executes, an independent observer confirms, and DISCINTEL closes the action and records evidence 1 · Your AI agentproposes an action 2 · DISCINTEL decision serviceALLOW · ASK · HOLD · BLOCK, every check listed 3 · Your approverssign where policy says 4 · Admissionsingle use, 5 minutes 5 · Your systemexecutes, sends receipt 6 · Independent sourceobserves the outcome 7 · Closureevidence log sealed approvals complete consumedcheckedmatched

Integration points

PointDirectionWhat crossesStatus
Proposal and decisionYour agent → DISCINTELThe proposed effect, amount, targets, agent, tool, environment and the hashes of the material files; back comes the verdict with every checkNot yet available
ApprovalsYour approvers → DISCINTELSignatures recorded by the server, with segregation of duties enforcedNot yet available
Admission and tool gateYour system ↔ DISCINTELA single-use admission your system presents before acting; DISCINTEL validates and consumes it in one stepNot yet available
Receipt and observed outcomeYour system and an independent source → DISCINTELWhat the executor says happened, and separately what was observedNot yet available
Material filesYou → DISCINTELUploaded or pasted files, fingerprinted on arrivalAvailable now
Research sourcesPublic web → DISCINTELPages you name are fetched by the DISCINTEL server, never from your network; only public addresses, ports 80 and 443, up to 2 MB. Each is stored with its hashAvailable, limited
Data sourcesYour repositories → DISCINTELObjects retrieved under the agent's authority and purpose. Connecting a source never grants use of everything in itNot yet available
Evidence exportDISCINTEL → youSealed JSON packages, verifiable offlineAvailable now

The admission contract

The server enforces these rules today. They are what a connected system would rely on.

7. Verifying evidence yourself

You shouldn't have to trust DISCINTEL's own screen. Every evidence package can be checked on any machine with Node.js 18 or later, using only built-in cryptography and no network access.

What a package contains

FieldMeaning
package_typeNAIC_AIRES_V5_MAPPING (the whole institution) or ACTION_EVIDENCE (one action)
chain_headSequence number and hash of the newest evidence event when the package was made
verificationThe most recent in-app verification and its checks
items, systemsNAIC packages: each item's status and the records behind it; each AI system's tools and outcomes
recordsThe governance records in scope, grouped by record type
evidence_eventsThe evidence events in scope, each with sequence, prev_hash and event_hash
limitationsWhat the package can't show, stated inside the package
package_hashSHA-256 seal over everything above

How the hashes are computed

Canonical JSON means object keys sorted, keys beginning with an underscore left out, and no whitespace. Then:

event_hash   = SHA-256( prev_hash + canonical(event without event_hash) )
prev_hash    = event_hash of the previous event (64 zeros for the first event)
package_hash = SHA-256( canonical(package without package_hash) )
file hash    = SHA-256( the file's exact bytes )

Run the verifier

Download the script, or copy it below and save it as verify-discintel-package.mjs, then run it on a package, optionally followed by original files you uploaded and still hold:

node verify-discintel-package.mjs discintel_naic_v5_<time>.json payments.csv

It checks the seal, recomputes every event hash, checks each link, requires an institution package to run unbroken from the first event, and matches your files to the fingerprints recorded when you provided them. For an institution package it ends by printing the head to record. It exits with 0 when everything passes and 1 when anything fails.

verify-discintel-package.mjs · Download
#!/usr/bin/env node
// Independently verify a DISCINTEL evidence package (NAIC or action package).
// Usage:
//   node verify-discintel-package.mjs <package.json> [file-you-provided ...]
//   node verify-discintel-package.mjs <package.json> --since <earlier-package.json>
//   node verify-discintel-package.mjs <package.json> --expect-head <sequence>:<event_hash>
// Needs Node 18 or later. Uses only Node's built-in crypto; sends nothing anywhere.
import { readFileSync } from "node:fs";
import { createHash } from "node:crypto";
import { basename } from "node:path";

// Canonical JSON, identical to DISCINTEL's: keys sorted, keys starting with "_" dropped, undefined as null.
const canon = (v) => Array.isArray(v) ? "[" + v.map(canon).join(",") + "]"
  : v && typeof v === "object" ? "{" + Object.keys(v).filter((k) => !k.startsWith("_")).sort()
      .map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}"
  : JSON.stringify(v === undefined ? null : v);
const sha256 = (data) => createHash("sha256").update(data).digest("hex");
const ZERO = "0".repeat(64);
const usage = () => { console.error("usage: node verify-discintel-package.mjs <package.json> [file ...] [--since <earlier-package.json>] [--expect-head <sequence>:<event_hash>]"); process.exit(2); };

// Arguments: the package, then any mix of files and options.
const args = process.argv.slice(2), files = [], expect = [];
let pkgPath = null;
for (let i = 0; i < args.length; i++) {
  const a = args[i];
  if (a === "--expect-head") {
    const m = /^(\d+):([0-9a-f]{64})$/i.exec(args[++i] || "");
    if (!m) { console.error("--expect-head needs <sequence>:<64-character event_hash>, as printed under 'Record this head'"); process.exit(2); }
    expect.push({ sequence: Number(m[1]), event_hash: m[2].toLowerCase(), from: "--expect-head" });
  } else if (a === "--since") {
    const p = args[++i]; if (!p) usage();
    const old = JSON.parse(readFileSync(p, "utf8"));
    if (!old.chain_head) { console.error(`${basename(p)} has no chain_head to compare against`); process.exit(2); }
    expect.push({ sequence: old.chain_head.sequence, event_hash: old.chain_head.event_hash, from: basename(p) });
  } else if (a.startsWith("--")) usage();
  else if (!pkgPath) pkgPath = a; else files.push(a);
}
if (!pkgPath) usage();
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
let failed = 0;
const report = (ok, msg) => { console.log((ok ? "PASS  " : "FAIL  ") + msg); if (!ok) failed++; };

// 1. Package seal: SHA-256 of the canonical package without its own package_hash.
const { package_hash, ...body } = pkg;
report(sha256(canon(body)) === package_hash, `package seal ${String(package_hash).slice(0, 16)}… (${pkg.package_type}, generated ${pkg.generated_at})`);

// 2. Every evidence event: its hash recomputes from its own content and the previous event's hash.
const evs = [...(pkg.evidence_events || [])].sort((a, b) => a.sequence - b.sequence);
let bad = 0;
for (const e of evs) { const { event_hash, ...rest } = e; if (sha256(String(e.prev_hash) + canon(rest)) !== event_hash) bad++; }
report(bad === 0, `event hashes: ${evs.length - bad} of ${evs.length} recompute`);

// 3. Links: where consecutive sequences are both present, each prev_hash equals the event before it.
let links = 0, broken = 0;
for (let i = 1; i < evs.length; i++) if (evs[i].sequence === evs[i - 1].sequence + 1) { links++; if (evs[i].prev_hash !== evs[i - 1].event_hash) broken++; }
const full = evs.length > 0 && evs[0].sequence === 1 && evs[0].prev_hash === ZERO && links === evs.length - 1;
report(broken === 0, `chain links: ${links - broken} of ${links} consecutive links match` + (full ? " (complete chain from genesis)" : pkg.package_type === "ACTION_EVIDENCE" ? " (an action package carries only that action's events)" : ""));

// 4. An institution (NAIC) package carries the whole log: it must run unbroken from genesis to the head it names.
if (pkg.package_type === "NAIC_AIRES_V5_MAPPING") report(full, `complete log: ${evs.length} events from sequence 1 with no gaps`);
if (full && pkg.chain_head) {
  const last = evs.at(-1);
  report(pkg.chain_head.sequence === last.sequence && pkg.chain_head.event_hash === last.event_hash, `chain head sequence ${pkg.chain_head.sequence} matches the last event`);
}

// 5. Optional: an earlier head must still be in this log, unchanged, at the same sequence. An honest log only grows.
for (const x of expect) {
  const label = `earlier head ${x.sequence}:${x.event_hash.slice(0, 16)}… (from ${x.from})`;
  if (!full) { report(false, `${label}: not checked. Compare against an institution (NAIC) package, which carries the whole log`); continue; }
  const e = evs.find((v) => v.sequence === x.sequence);
  if (!e) report(false, `${label}: this log has only ${evs.length} events, so it is shorter than the log that head came from`);
  else if (e.event_hash !== x.event_hash) report(false, `${label}: sequence ${x.sequence} here is ${e.event_hash.slice(0, 16)}…, so this is not the same log. If DISCINTEL told you your workspace moved, check its continuity statement; otherwise, contact DISCINTEL`);
  else report(true, `${label} is still in this log, unchanged, ${evs.length - x.sequence} events later`);
}

// 6. Optional: files you still hold match the fingerprints recorded when they were provided.
const objs = (pkg.records && pkg.records.GovernedObject) || [];
for (const f of files) {
  const h = sha256(readFileSync(f));
  const hit = objs.find((o) => o.content_hash === h);
  report(!!hit, `${basename(f)} sha256 ${h.slice(0, 16)}… ` + (hit ? `matches ${hit.record_id} (${hit.filename})` : "matches no file in this package"));
}

if (full && pkg.chain_head) console.log(`\nRecord this head: ${pkg.chain_head.sequence}:${pkg.chain_head.event_hash}\nCheck later packages with:  --expect-head ${pkg.chain_head.sequence}:${pkg.chain_head.event_hash}`);
if (!expect.length) console.log("\nNOTE  These checks prove the package is internally consistent. To show the log wasn't rebuilt wholesale, check it\n      against a head you recorded earlier, with --since <earlier package> or --expect-head <sequence>:<hash>.");
console.log(failed ? `\n${failed} check(s) FAILED. See the FAIL lines above.` : "\nAll checks passed.");
process.exit(failed ? 1 : 0);

Checking the log only grew

On its own, a package can only prove it is internally consistent: nothing in it was edited, reordered or removed after it was sealed. It can't rule out a log rebuilt from scratch. An honest log only grows, so the head you recorded earlier must still be in every later package, unchanged, at the same sequence number. Check that with either option:

node verify-discintel-package.mjs <new NAIC package>.json --since <baseline package>.json
node verify-discintel-package.mjs <new NAIC package>.json --expect-head 284:dc377a80…

The second form takes the full line you recorded (the example hash is shortened here). Both work only with institution (NAIC) packages, because an action package carries only that action's events.

ResultMeaning
is still in this log, unchanged, N events laterThe log grew from your baseline without changing anything before it
is shorter than the log that head came fromThe new package has fewer events than your baseline. A log should never shrink
this is not the same logThe event at that sequence number differs: the log was rebuilt or replaced

If your workspace moves

If DISCINTEL ever has to move your workspace to new storage, the new log starts again at sequence 1, and the check above will report this is not the same log. Before that happens we'll send you a continuity statement: the old log's final head, the new log's first event, the date and the reason. Keep it with your baseline. A different log with no statement is a question to raise with us.

We tested the verifier on packages from the sample workspace, including ones with edited, removed and re-sealed events, and on packages from a live workspace.

8. Security and data handling

AreaToday
Sign-inAuth0, with passkeys supported. Every request to the server carries a signed token that is checked every time
IsolationEach account's Business workspace is stored separately; no other account can read it
Hosting and locationNetlify hosts the app, its server function and its storage. The runtime governor runs on Fly.io in US East (Virginia), behind Cloudflare's proxy. DISCINTEL and its providers process data in the United States
EncryptionTLS in transit
Outbound requestsResearch retrieval is the only feature that fetches from the internet. The server refuses private, loopback, link-local and reserved addresses (including cloud metadata), ports other than 80 and 443, and URLs with credentials; it connects only to the address it checked and re-checks every redirect
AI processingApprovals, decisions and the evidence log are produced by deterministic rules you can inspect. The only feature that sends content to an AI model provider is Legal Intelligence. When it runs, the sources for the matter go to Anthropic's API to draft a research memo. It runs only where a model key is configured.
TrackingNo advertising or analytics scripts
EvidenceHash-linked and append-only within a live workspace. Deleting the account deletes the whole workspace, including its log; packages you downloaded remain yours
DeletionEmail privacy@getdiscintel.com from the account's address
ContractsTerms and Privacy Policy are drafts, not yet in effect. A data processing agreement isn't offered yet

For full detail, read the Privacy Policy draft, and see the questions security teams ask first in section 9.

9. Security questions, answered

The questions security teams ask first, with today's answers. Where the answer is no, it says so.

QuestionAnswer today
Do you have a SOC 2 report or ISO 27001 certification?No. Neither has been started.
Has the service had an independent penetration test?No.
Will you sign a data processing agreement?Not yet. Until one is in place, keep real customer and personal data out of your workspace
Where is our data stored and processed?In the United States. Netlify hosts the app, the server function and the workspace storage, in its US East (Ohio) region. The runtime governor and its audit log run on Fly.io in US East (Virginia); it receives the identifiers, effect, amount, environment and class of each check, and research source addresses, never file contents or payee names
Who are your subprocessors?Auth0 (Okta, Inc.) for sign-in; Anthropic, PBC for Legal Intelligence drafts only, where a model key is configured (Anthropic Ireland, Limited for customers in the European Economic Area); Netlify, Inc. for hosting, server functions and storage; Fly.io, Inc. for hosting the runtime governor; Cloudflare, Inc. for DNS and as the proxy in front of the runtime governor. Details are in the Privacy Policy draft
Is our data encrypted?In transit, with TLS. At rest, workspace records are held in Netlify's managed storage; DISCINTEL doesn't hold separate encryption keys for them
Who at DISCINTEL can see our workspace?DISCINTEL is founder-operated during early access. The founder, as operator of the hosting account, can technically read stored records; this is done only to investigate a problem with your workspace. The app's own Founder dashboard lists each account (email, sign-in method, dates) with how often its users opened each screen and used each control, and the number of records in a workspace by kind, never workspace contents
Can research reach our internal network?No. The server fetches only from public addresses, checks every address a host name resolves to, connects to the address it checked, and re-checks each redirect. Private sources can only be pasted in, after a Security Administrator approves access
Is our content sent to an AI model?No. Decisions come from deterministic rules you can inspect
How do users sign in?Through Auth0, with passkeys, which are phishing-resistant, or email and password. Single sign-on with your identity provider isn't available yet
How are changes to the service controlled?Every release goes through a pull request. Before merging, the automated tests and a check that stored authority matches the canonical records must pass, and the hosting provider's checks must succeed. Each deploy is scanned for exposed secrets
Do you have tested backups and a restore procedure?Not yet. A rehearsed rollback and a timed restore are planned before any production use
Will you notify us of a security incident?Yes, directly by email. There is no contractual notification period yet
How do we report a vulnerability?Email privacy@getdiscintel.com
How do we delete our data?Email privacy@getdiscintel.com from the account's address. Deleting the account deletes the whole workspace, including its evidence log

Send full questionnaires to privacy@getdiscintel.com.

10. Known limitations

Better you read these here than find them yourself.

11. Troubleshooting

You seeDo
No verification emailCheck spam or junk; you can keep evaluating while you wait
Sign in to continue or Your session endedSign in again; your workspace is where you left it
The status chip doesn't say PersistedSaving… clears on its own. Save failed: choose the chip to see which record and why. Read-only: your access can view records but not change them
A decision stopped applyingSomething material changed: the file, agent, environment or tool. Re-evaluate against the current context
Environment … is not registered thereThe agent, tool or domain doesn't allow the environment you're in. Switch it in Action context, or change the agent's environments through Administration
The verifier reports this is not the same logSee If your workspace moves. With no continuity statement from us, contact us before relying on the package
The verifier fails the package sealThe file changed after download; even reformatting it in an editor does that. Download it again
A file you hold matches nothing in the packageCheck it's the exact file you uploaded; re-saving or converting it changes its bytes

12. Getting help

Questions, feedback, evaluation results and pilot discussions: legal@getdiscintel.com. Privacy requests, security questionnaires and security reports: privacy@getdiscintel.com. When you report a result, include the evidence sequence number from TrustDNA Evidence.

DISCINTEL, LLC · Early access. The sample institution and its people, approvers, sanctions list and payment rail are fictional or simulated.