Security

Verified

Isolation you can prove, not policy you must trust.

Three independently enforced layers keep every tenant apart. We probe them adversarially and sign the result into a receipt you can reproduce without trusting us.

LAYER 1 · PHYSICALschema-per-tenant · NOLOGIN role · REVOKE PUBLICLAYER 2 · LOGICALFORCE RLS · holds even for the table ownerLAYER 3 · CRYPTOGRAPHICAES-256-GCM · tenant bound into the ciphertextOne tenant's memorymoved ciphertext refuses to decryptliveprobesISOLATION RECEIPT2026-07-27GRANT denial under the wrong role114/114RLS row policy holdsowner toocross-tenant decrypt refused3 of 3ed25519:3f9c1a…b21e · public key as JWKVERIFIEDbuyer-reproducible, offline

The receipt

Reproduce it offline, no trust required

The receipt is signed with Ed25519. Verify it against our published public key (a JWK at hunta.ai/.well-known/jwks.json) and re-run the probes against your own tenant.

Isolation receiptlatest
Schema isolation, one per tenantenforced
Row-level security, FORCE modeenforced
Per-tenant AES-256-GCM, tenant id bound into the cipherenforced
Adversarial cross-tenant probe0 leaks
Receipt signature, Ed25519valid
ed25519: b7a1c4…9f3c · JWK at hunta.ai/.well-known/jwks.json
Verifiedreproducible offline, no trust in us required
terminal
$ curl -sX POST https://mcp.hunta.ai/v1/admin/verify-isolation -H "Authorization: Bearer <YOUR_KEY>"

  fetch receipt ............ ok
  verify ed25519 signature . ok
  re-run isolation probes .. 0 leaks
  compare to attestation ... match

verdict: VERIFIED
No credentials leave your machine.

Boundary manifest

What is plaintext, and why

Honesty over hand-waving. Some columns stay plaintext by necessity. Here is every one, and the reason.

Ciphertext
encrypted
Fact values are encrypted with a per-tenant key. The server never stores them in the clear.
Severity
plaintext
A smallint ranking column. Plaintext so facts can be ranked by severity and loaded into an agent's context without decrypting the store.
Timestamps
plaintext
valid_from, valid_to, and learned-at drive bi-temporal queries (what was true at a time, and what was known at a time) and must stay plaintext so the database can scan time ranges.
Tenant id
plaintext, bound
Bound into every row and used as additional authenticated data in the cipher, so a row cannot be replayed across tenants.

Severity and timestamps are plaintext on purpose. Ranking facts by severity and scanning event-time ranges both require the column outside the ciphertext. Values stay encrypted, tenant id is bound into the cipher, and the isolation receipt covers all of it.

Isolation you can prove, in five minutes.

Create a key, connect your agent, and reproduce the signed receipt yourself.