Security, privacy & compliance
How Cogniseam protects your knowledge — described accurately, with each control backed by shipped code or a documented practice. Nothing here claims a certification we don't hold.
- Enterprise SystemsSlack · Microsoft 365 · Drive · ERP
- Connectorssync · live capture · CDC
- Normalizationone idempotent pipeline
- Knowledge Extractionfacts · entities · policies · skills
- Enterprise Memoryretrieval · history · supersession
- Knowledge Graphentities · relationships
- GovernanceRBAC · audit · approvals · encryption
- Executionanswers · skills · workflows · agents · API
- Business Outcomesfaster decisions · recovered revenue · provable compliance
Security & trust posture
Cogniseam is built with enterprise security principles: per-user permission-filtered retrieval, tenant isolation, encryption at rest and in transit, hardened authentication and SSO, a tamper-evident audit trail, verified backups, and an AI-safety egress gateway. Every claim on this page is backed by shipped code or a documented control, and anything not yet implemented is labelled Planned, In progress, or Not supported — never overstated.
A note on accuracy. This page separates what is implemented from what is configured, in progress, or planned, and keeps technical controls strictly distinct from external certifications. Cogniseam does not currently hold SOC 2, ISO 27001, or any independent security certification, and no third-party penetration test has been completed — those are on the roadmap.
Security
Application- and platform-level protections that guard every request, upload, and outbound call.
Outbound connector/workflow requests are blocked against loopback, link-local, cloud-metadata (169.254.169.254), and private ranges — after DNS resolution and with 3xx-redirect rejection to defeat bypasses.
lib/ssrf.tsOffice/ZIP uploads are bounded by streaming entry-count, per-entry, and whole-archive size limits enforced during inflation, defeating decompression bombs.
lib/zip-safe.tsA fixed-window limiter with spoof-resistant client-IP derivation returns 429 with Retry-After. It is per-instance (the deployment pins a single replica); a shared store is required before horizontal scale-out.
lib/ratelimit.tsEvery response carries CSP, HSTS preload, X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy, and Permissions-Policy. The CSP still allows inline script/style; nonce-based hardening is a follow-up.
next.config.jsMutating requests are checked with an Origin-vs-Host comparison at the edge; machine endpoints use their own key/token auth.
middleware.tsConnector OAuth uses single-use, TTL-bounded, workspace-bound state with a double-submit cookie layer, so authorization callbacks can't be replayed or cross-bound.
lib/connectors/google-oauth-state.tsSecure SDLC
Every change runs lint, strict type-checking, and a security-focused test suite (hundreds of cases, including hostile-input tests) before merge.
.github/workflows/ci.ymlCI runs Semgrep SAST, Trivy dependency/misconfig scanning (gating on fixable critical dependency vulnerabilities), an SBOM (CycloneDX/SPDX), and Gitleaks secret scanning.
.github/workflows/security-scan.ymlA boot/preflight policy refuses to start a production-like deployment when a mandatory control (session secret, encryption key, single-tenant invariant) is missing or unsafe.
lib/security-policy.tsPull requests receive an automated independent review pass in addition to human review.
.github/workflows/claude-review.ymlThe application container runs as a non-root user.
DockerfileAn independent third-party penetration test has not yet been performed; it is on the roadmap.
Authentication
How identities sign in and how sessions are protected and revoked.
Password accounts use per-user salted scrypt with constant-time verification; login is timing-equalised against user enumeration.
lib/auth.tsHMAC-SHA-256 signed httpOnly session cookies with expiry and a per-user epoch, so sign-out-everywhere and password changes invalidate sessions platform-wide.
lib/auth.tsEmail one-time-passcode verification is supported alongside password sign-in.
lib/otp.tsSAML uses signed assertions (SHA-256), audience restriction, clock-skew bounds, single-use assertion replay caching, and HMAC-signed RelayState for CSRF.
lib/saml.ts · lib/saml-replay.tsOIDC uses authorization-code + PKCE (S256), RS256 id_token verification against JWKS, and issuer/audience/expiry/nonce checks.
lib/sso/oidc.tsSCIM 2.0 user/group provisioning is supported for identity-lifecycle automation; the customer configures it against their IdP.
lib/scim.tsFirst-party TOTP (RFC 6238) with authenticator-app enrollment, one-time recovery codes, and single-use anti-replay. A second factor is challenged on password and email-code sign-in via a short-lived, purpose-separated token; workspaces can prompt members to enrol it (org-wide request-time enforcement is planned). SSO sign-ins keep MFA at the identity provider.
lib/mfa/totp.ts · lib/auth.tsAccess Control
Role- and permission-based authorization, tenant isolation, and per-user clearance on retrieval.
A namespaced capability registry grants area.action permissions to admins, everyone, or groups; unknown capabilities fail closed as not-granted.
lib/permissions.tsEvery chunk, fact, and skill carries audiences; retrieval filters to the requesting user's individual clearance before ranking, so restricted content never reaches the model.
lib/acl.tsWorkspace admin is a management capability, not see-all; browsing all tenant content is not granted by default.
lib/acl.tsRequests run inside an AsyncLocalStorage workspace context; the per-tenant secret store is keyed by that context so cross-tenant access is impossible by construction.
lib/workspace-ctx.ts · lib/tenant/secret-store.tsWorkspace membership is re-verified on every request, so deprovisioning or offboarding takes effect immediately.
lib/with-workspace.tsTenant-scoped credentials — AI provider API keys and Slack/Notion/Jira/GitHub/Voyage tokens — resolve per workspace through an encrypted per-workspace secret store keyed by the request's workspace context, with no fallback to a shared global value (an unset secret reads as absent — fail-closed). Provider/model/endpoint config is per-workspace, and Microsoft/Google connected accounts are bound to their owning workspace. GET/POST /api/settings only ever touch the caller's workspace; deployment-level platform credentials (the OAuth app registration and domain-wide-delegation service account) are platform-managed and never exposed through a tenant route.
lib/tenant/credentials.ts · lib/tenant/secret-store.ts · app/api/settings/route.tsData Protection & Encryption
Encryption at rest and in transit, key management, and rotation.
Settings, credentials, tenant secrets, audit log, and lifecycle ledgers are sealed with AES-256-GCM (random IV + auth tag). In production, writing plaintext at rest with no key configured is refused.
lib/secrets.tsTraffic is served over TLS (terminated at the platform ingress) with HSTS preload; outbound server requests require HTTPS.
next.config.js · lib/ssrf.tsCiphertext carries the key id it was sealed under (enc:v2:<keyId>:…), so keys can rotate without re-reading every field up front.
lib/secrets.ts · lib/crypto/key-provider.tsMultiple data-encryption keys with an active-key id are supported; new writes seal under the active key while older ids still decrypt, with a re-encrypt sweep to retire them.
lib/crypto/key-provider.tsBoot/preflight refuses to start production with a weak or default encryption key (minimum length and character-diversity checks).
lib/security-policy.tsEnvelope key management is implemented behind the key-provider seam: per-file data keys are wrapped by a KMS-held key, and an Azure Key Vault adapter (REST wrapKey/unwrapKey) ships. Enable with KMS_PROVIDER. Marked in progress pending verification against a live vault; AWS KMS is a later adapter on the same interface.
lib/crypto/keyring.ts · lib/crypto/kms/azure-key-vault.tsEnvelope encryption is in place: data-encryption keys are wrapped by a key-encryption key (KEK) and only the wrapped form is stored, so revoking the KEK makes stored data unrecoverable at the next process start — the data keys are unwrapped once at boot and held in memory, so a still-running process keeps decrypting until teardown; revocation takes effect on restart, not live. The on-prem/local-KEK reference path is implemented and verified end-to-end (production boot with no DATA_ENCRYPTION_KEY — the KEK wraps the data keys instead — plus encrypt/decrypt, restart-survival, and fail-closed on a wrong/revoked key at boot), and the Azure Key Vault adapter ships behind the same seam (validation against a live vault still pending). Both are deployment-level today: a single KEK protects the whole deployment. Rotation requires provisioning a fresh DEK (scripts/provision-cmk.mjs --rotate) and running the re-seal sweep. For Azure, creating a new Key Vault key version does not by itself migrate existing DEKs: their wrapped entries remain bound to the original key version, which must remain enabled for startup. Retiring an old Azure or local KEK version is not supported until a KEK rewrap-and-removal workflow exists. A per-tenant, customer-held KEK — where each workspace holds and revokes its own key independently — is the remaining work and depends on tenant-scoped keys.
lib/crypto/keyring.ts · lib/crypto/kms/local-kek.tsAI Safety
Governing what leaves the platform to AI providers, and defending against prompt injection.
Every LLM, embedding, and OCR call passes a single egress boundary that evaluates deployment + tenant policy and audits the decision (capability/provider/classification only — never prompt content) before the provider is invoked. Policy-load failures fail closed.
lib/ai-governance/gateway.tsThe gateway takes the strictest of the request class and the tenant's declared sensitivity, so e.g. PHI-classified data can be forced to a permitted provider.
lib/ai-governance/classification.tsRetrieved and imported content is fenced with distinctive untrusted-content markers and provenance labels, and imported skills are quarantined from automatic execution.
lib/ai-safety/untrusted.tsAgent output is screened for leaked secret patterns (API keys, private keys) before egress; enforcement is advisory unless strict mode is enabled.
lib/ai-safety/untrusted.tsAnswers are grounded only in the workspace's own content with inline citations; when the answer isn't present, the system says so rather than inventing one.
lib/ask.tsConfigurable no-training / zero-retention profiles for AI, embedding, and OCR subprocessors are being built.
Audit & Governance
A tamper-evident record of security events, plus the data-lifecycle governance built around it.
Security-relevant events are appended to a keyed hash chain: each record is HMAC(prevHash + record) under an audit key derived from the data key, so altering or reordering any record is detectable.
lib/audit.tsA verifier detects hash mismatches, record injection, and tail truncation (via an off-volume head anchor); it reports whether the chain is keyed (tamper-evident) or unkeyed (corruption-only).
lib/audit.tsUser- and workspace-scoped legal holds with a required basis are consulted before any destructive lifecycle step, which records a retained-with-basis outcome. Reads fail closed.
lib/lifecycle/legal-hold.tsErasures are recorded as encrypted, fail-closed tombstones (users and tenants), deliberately excluded from snapshots so a restore can't resurrect an erased subject.
lib/lifecycle/erasure-ledger.tsDeletion, tenant-deletion, and export receipts are HMAC-SHA-256 signed with a purpose-separated key; in production the system throws rather than emit an unsigned receipt.
lib/crypto/receipt-signing.tsA retention scheduler and lifecycle orchestrator exist; customer-configurable per-tenant retention windows are still maturing.
lib/lifecycle/retention.tsThe tamper-evident audit trail can be streamed to a SIEM (Splunk HEC, Microsoft Sentinel, or a generic HTTPS webhook), where it becomes the immutable long-retention copy. Only a redacted subset leaves the process — no email, IP, or free-form detail, and email-shaped identifiers are pseudonymized — carrying each record's seq and its opaque chain-hash anchor, plus a persisted cursor that makes delivery at-least-once and gap-detecting. The SIEM can therefore detect a missing record (seq gap) and pin an exported record to its chain position, but it cannot itself recompute the HMAC — the redacted payload and the audit key never leave the process — so full tamper-evidence (that no record was altered) is proven by the source's own keyed chain verifier, not reconstructed at the SIEM. Today the export is DEPLOYMENT-WIDE and operator-configured (the whole deployment's audit trail streams to one operator-owned endpoint via env) — suited to a single-tenant / self-host deployment. Per-tenant SIEM routing (tenant-scoped export credentials and records, so a workspace streams only its own events) is the remaining work; on a shared deployment this stays operator-only, never a per-tenant feature. Verified end-to-end against an HTTPS sink.
lib/audit-siem.ts · lib/audit.tsDisaster Recovery
Backups you can actually restore from — verified in CI, not just scheduled.
Rolling snapshots of the data files (including the encrypted stores and audit log) are taken on a throttled schedule and rotated to the last 24.
lib/backup.tsA restore-verification job decrypts every envelope in the restored data under the escrowed key (a wrong key fails the GCM tag) with a vacuity guard, so a 'successful' restore is proven decryptable, not just present.
scripts/verify-restore-decryptable.tsBackup and restore-drill workflows run in CI so the recovery path is exercised, not just documented.
.github/workflows/restore-drill.ymlRestores re-apply erasure and tenant tombstones (fail-closed), so recovering a snapshot can never revive an erased subject.
lib/backup.tsA disaster-recovery plan, restore-test procedure, and RPO/RTO register are maintained in the compliance program.
docs/compliance-program/business-continuity/Backups live on the same platform volume today; cross-region redundancy and guaranteed data residency are roadmap items.
The application runs as a single instance today; moving to a multi-instance, higher-availability architecture is underway.
Compliance
Technical-control alignment to major frameworks. Implementation posture and external certification are tracked separately — we never present one as the other.
| Framework | Technical controls | External certification |
|---|---|---|
OWASP ASVS Application security verification | Partial Controls align to ASVS verification requirements for authentication, session management, access control, and input handling. Self-assessed alignment — no formal ASVS verification has been performed. | Not certified |
NIST CSF Cybersecurity framework | Partial Identify / Protect / Detect functions are partially mapped in the internal control catalog. CSF is a framework, not a certification. | Not certified |
SOC 2 Trust Services Criteria | Partial Technical controls supporting the Security criteria are implemented and a Type I readiness effort is documented internally. No SOC 2 examination has been performed and no report exists. | Not certified |
ISO/IEC 27001 Information security management | Partial A subset of Annex A technical controls is implemented; the management-system and certification effort is roadmap. Not certified. | Not certified |
ISO/IEC 42001 AI management system | Partial AI governance controls (egress gateway, classification, provider register, evaluation) map to an internal ISO 42001 readiness matrix. Not certified. | Not certified |
GDPR EU data protection (technical safeguards) | Partial Technical safeguards — data minimisation, erasure ledger with signed receipts, records of processing, encryption — are implemented. GDPR is a regulation, not a certification; a DPA is contract-dependent. | Not certified |
HIPAA US health data (technical safeguards) | Partial Technical safeguards — PHI classification gating in the AI egress path, encryption, audit — are implemented. A Business Associate Agreement and full HIPAA compliance are contract-dependent and not attested. | Not certified |
Controls align to ASVS verification requirements for authentication, session management, access control, and input handling. Self-assessed alignment — no formal ASVS verification has been performed.
Identify / Protect / Detect functions are partially mapped in the internal control catalog. CSF is a framework, not a certification.
Technical controls supporting the Security criteria are implemented and a Type I readiness effort is documented internally. No SOC 2 examination has been performed and no report exists.
A subset of Annex A technical controls is implemented; the management-system and certification effort is roadmap. Not certified.
AI governance controls (egress gateway, classification, provider register, evaluation) map to an internal ISO 42001 readiness matrix. Not certified.
Technical safeguards — data minimisation, erasure ledger with signed receipts, records of processing, encryption — are implemented. GDPR is a regulation, not a certification; a DPA is contract-dependent.
Technical safeguards — PHI classification gating in the AI egress path, encryption, audit — are implemented. A Business Associate Agreement and full HIPAA compliance are contract-dependent and not attested.
“Technical controls” reflects what is implemented in the product. “External certification” reflects independent third-party attestation, which Cogniseam does not yet hold for any framework above.
Privacy
Data ownership, minimisation, deletion, retention, and the terms that depend on a signed agreement.
Content ingested into a workspace belongs to that workspace; the product embeds no third-party analytics or tracking SDKs.
app/User prompts/questions are not persisted after processing.
lib/ask.tsDocuments are fully removed on delete (cascading to derived facts/chunks); account and tenant erasure are recorded in the erasure ledger with signed receipts.
lib/lifecycle/erasure-ledger.tsSensitive-data classification gates which providers may process a request; automated PII detection/redaction across all ingested content is maturing.
lib/ai-governance/classification.tsA lifecycle retention engine exists; customer-configurable retention windows per data category are still being finished.
lib/lifecycle/retention.tsGuaranteed data residency and region pinning are not currently supported.
Data-processing terms, breach-notification windows, and audit rights are established under a signed agreement.
Architecture
Every request flows through the same trust boundaries — identity, tenant context, authorization, then governed execution and an audited, encrypted store.
User
Authenticated identity (password + OTP, or SAML / OIDC SSO)
Workspace
Tenant context bound to the request; membership re-checked
Authorization
Capability RBAC + per-user ACL clearance
Knowledge layer
Permission-filtered retrieval over facts, skills, graph
Execution layer
AI governance egress gateway + workflow runtime with approvals
Audit
Tamper-evident keyed hash chain of security events
Encrypted storage
AES-256-GCM at rest with rotating keys
Operational Status
Read live from this deployment. Values that can't be read show as Unavailable or Not configured — never a placeholder number.
Responsible Disclosure
Cogniseam operates a coordinated vulnerability disclosure policy. Please report vulnerabilities privately (GitHub private advisory or the security contact) — never via public issues or pull requests.
- Security contact
- Set by deployment (SECURITY_CONTACT) — see SECURITY.md
- Acknowledgement
- Target: within 3 business days
- Initial assessment
- Target: initial severity assessment within 10 business days
- Supported versions
- Fixes are applied to the current main branch and continuously deployed; there is no separate LTS line.
Full policy, scope, and safe-harbour terms are in SECURITY.md.
Roadmap
Enterprise capabilities we're building next. Listed here explicitly so they're never mistaken for shipped controls above.
A per-workspace, customer-held KEK (BYOK/CMK via Azure Key Vault / AWS KMS) that each tenant rotates and revokes independently — beyond today's deployment-level KEK.
Tenant-scoped export credentials and records so each workspace streams only its own audit trail to its own SIEM — beyond today's deployment-wide operator export.
Region pinning and geo-redundant backups.
Multi-instance deployment with a shared rate-limit / replay store.
Independent third-party penetration test and remediation.
Independent SOC 2 examination once readiness is complete.
Formal ISMS certification.