Trust
Every control here says what enforces it, and where it stops.
This page describes the controls in our repository, and where each one stops. Some of these controls are not yet in the build we run. Nervos holds no certification and says so. Each statement below is traceable to a file or a migration.
Identifiers such as HIST-01 refer to the claims register. It gives each claim’s status in our repository. Its production column follows our next production verification.
The security address at the foot of every page is the responsible-disclosure channel. It reaches a person.
Posture
What is held, what is not, and what is public.
Buyers waste weeks discovering which claims on a security page are certifications and which are mappings. Here they are separated.
Nervos has no customers yet.
Not for CUI. Nervos holds no FedRAMP authorization. Its controls are mapped to NIST 800-171 and the SOC 2 criteria, not certified against them.
The claims register gives the status of each of our security claims in our repository. Its production column follows our next production verification.
| Document | Status | Note |
|---|---|---|
| Security overview | Public | This page. |
| Claims register | Public | Each claim’s status in our repository. |
| Model-output controls | Public | Prompt injection and excessive agency, mapped to OWASP. |
| Ledger verifier | Public | Recomputes an execution-ledger export in your browser. |
| Sub-processors | Public | Every provider that processes customer data. |
| Data Processing Addendum | Public | Covers the return and deletion of your data. |
| Security questionnaire | On request | Pre-filled, in the SIG and CAIQ style. Its sign-on and provisioning answers are being revised. |
| Full claims register, with evidence | On request | Under NDA. |
| NIST 800-171 and SOC 2 criteria mappings, with evidence | On request | Under NDA. Mappings, not certifications. |
| SOC 1 report | Not held | No auditor has been engaged. |
| SOC 2 report | Not held | No auditor has been engaged. |
| ISO 27001 certificate | Not held | No auditor has been engaged. |
| Third-party penetration test report | Not held | An internal hardening review was completed in June 2026. |
| Cyber and tech E&O insurance certificate | Not held | Not yet held. |
Control alignment
NIST 800-171, with each control tied to the code that enforces it.
Each row describes the control in our repository. It is marked enforced when its implementation there is a structural constraint. That means blocking rather than logging, and verifiable from source. It is marked partial when part of it does not hold yet, and the row says which. A control’s status in the service we run follows our next production verification. Nothing in this table is a policy statement.
- Enforced
- in our repository: blocking, verifiable from source
- Partial
- in our repository: part holds, and the row names what does not yet
| Family | Control | Name | Implementation | Repository status |
|---|---|---|---|---|
| Access control | AC-5 | Separation of duties | An approval by the proposer on record is refused, at approval and again at dispatch. Until a pending migration is applied, a member can set who is on record (SOD-01). | Partial |
| Access control | AC-6 | Least privilege | Four roles (viewer, analyst, admin, owner), each with a fixed set of capabilities. In our repository, this control is partial (RBAC-01). | Partial |
| Access control | AC-17 | Remote access | Every session requires a valid, short-lived token. Connector credentials are encrypted with AES-256-GCM, or held in Supabase Vault where it is enabled. In our repository, their binding to an organization is partial (SECRETS-03, SECRETS-04). | Partial |
| Audit and accountability | AU-2 | Audit events | The server audits proposal creation, approval, rejection, execution, rollback, replay and credential changes, with the caller’s identity and the action type. Audit writes are best-effort. A write that fails leaves a server log line and no row, and does not fail the request. In our repository, a member writes no audit row (AUD-02). In our repository, each row the server writes belongs to the organization it concerns (AUD-01). | Partial |
| Audit and accountability | AU-9 | Protection of audit information | The execution step ledger is hash-chained. Each row’s hash covers its own content and the previous row’s hash. An altered row, or a deleted row with rows after it, breaks the chain at that row. Removing the last rows, or rewriting from one row to the end, does not. The chain has no external anchor. Members cannot update or delete a row. The database owner can, and until a pending migration is applied so can anyone holding the service key (HIST-01). | Partial |
| Audit and accountability | AU-12 | Audit record generation | Automatic on every state transition in the governed execution path. If the preflight step cannot be written, nothing is sent. If the step recording a sent write cannot be written, the result is flagged ledgerMissing and that write is missing from the chain. | Partial |
| Configuration management | CM-5 | Access restrictions for change | In our repository, a write is dispatched only under a server-recorded human authorization bound to the proposal (AUTHZ-01). In our repository, a revocation stops it up to the send (AUTHZ-04). Its separation of duties rests on the proposer on record (SOD-01). | Partial |
| Identification and authentication | IA-2 | Identification and authentication | Every signed-in API route validates the caller before any data access. Webhook and cron routes check a signature or a secret instead. Access that bypasses row-level security is limited to an allowlist of files. A test fails on any new use. It blocks a merge only where CI runs and the main branch is protected (CI-02). | Partial |
| System and information integrity | SI-7 | Software and information integrity | SHA-256 hash chaining on the ledger. In our repository, a NetSuite webhook event is accepted only inside a replay window (INGEST-01). Content Security Policy is enforced, not report-only. Its script-src still allows inline scripts (HDR-01). A dependency audit is configured to run on every push (CI-02). | Partial |
Architecture
Six properties, and what enforces each.
Each item says what enforces it. A sentence that holds only in our repository says so. A property’s status in the service we run follows our next production verification.
- 01
Row-level security on every table.
Row-level security is on every table in the public schema, per the production catalog read on September 24, 2026 (RLS-01). The service role bypasses it, so server code scopes by organization itself. In our repository, each tenant table’s policies scope rows to the caller’s organization (TEN-01). Three read policies, on the global catalog and the public status, admit every row by design. A test fails on a table without a policy, an over-permissive policy or an unreviewed bypass. It blocks a merge only where CI runs and the main branch is protected (CI-02).
Postgres · tests - 02
Credentials encrypted at rest.
Connector credentials are encrypted with AES-256-GCM, or held in Supabase Vault where it is enabled. In our repository, their binding to an organization is partial (SECRETS-03, SECRETS-04).
AES-256-GCM · Vault - 03
Webhooks checked against a secret.
In our repository, a NetSuite webhook event is accepted only inside a replay window, and recorded once per account (INGEST-01). In our repository, it must carry an HMAC-SHA256 over its timestamp, event id and body (INGEST-01). Until the NetSuite sending script is updated, the legacy shared-secret header is accepted instead.
HMAC-SHA256 - 04
A hash-chained ledger.
Each step carries the SHA-256 hash of the step before it. An altered step, or a deleted step with steps after it, breaks the chain at that step. The ledger verifier recomputes an export’s chain in your browser. Members cannot update or delete a step. The chain has no external anchor. The database owner can delete the last steps, or rewrite a step and every step after it, without detection. Until a pending migration is applied, so can anyone holding the service key (HIST-01).
migration 0030 - 05
Secret scanning and dependency audits.
A dependency audit is configured to run on every push. Secret scanning is configured for pull requests and pushes to the main branch, and runs nightly. The claims register records whether CI runs (CI-02). Environment files, keys and secrets directories are excluded from the repository. Content Security Policy is enforced. Its script-src still allows inline scripts (HDR-01).
CI - 06
The reasoning layer holds no credentials.
Analysis produces a proposal that enters the queue and waits for a person. No model can approve, and no model has credentials for any connected system.
write gate
Data handling
Where the data lives and which providers touch it.
The sub-processor register is public and lists every provider named here.
- Residency
- Supabase on AWS us-west-2 (Oregon)
- One shared, multi-tenant service. No dedicated or regional deployment is available today.
- Model inference
- Groq
- Decision objectives and their context are sent to Groq when an analysis runs. The sub-processor register lists what each provider receives. Groq’s API terms state that prompts are not used to train its models. The provider’s data processing agreement is available.
- Embeddings
- OpenAI, optional
- Used for semantic recall when an OpenAI key is configured. When it is, the text of decision objectives and memory entries is sent to compute embeddings.
- Retention and deletion
- Set in the Data Processing Addendum
- The addendum covers the return of your data and its deletion on termination.
Documentation package
Under NDA, the full set.
The package holds the full claims register, with its evidence. It holds the NIST 800-171 and SOC 2 criteria mappings, with their evidence, and the pre-filled security questionnaire.
It carries the mechanism detail of findings still open in production, until they are fixed.
The ledger verifier
Recompute an execution ledger in your browser.
Paste an execution-ledger export and recompute its SHA-256 chain. The check makes no server round-trip and needs no account. The verification page says how to reproduce each of its claims. Most need a signed-in user on a Nervos tenant.