Inspiration
Protection teams keep case files, Slack threads, and donor mail in the same tools everyone else uses: OneDrive, Slack, Outlook. Names, case IDs, GPS, and medical notes leak into those surfaces. When something goes wrong there is often no gate before a redact or a share-revoke, and no durable trail of who approved what.
Agents that classify exposure are useless if the finding, the policy they cited, the human decision, and the remediation evaporate when a process restarts. Memory has to be the system of record, not a log file on a laptop.
What it does
Nuvira is a humanitarian data-protection control room.
- Scan pasted or uploaded OneDrive, Slack, or Outlook content.
- Detect names, case numbers (
CASE-####), GPS coordinates, and medical terms. - Cite ICRC, GDPR, and Sphere Standards from a built-in policy corpus stored in CockroachDB.
- Require a human to approve redact or revoke-access before anything destructive runs.
- Record every scan, policy match, approval, and remediation in a hash-chained audit log.
- Escalate severity when the same content hash was already remediated (recurrence).
Header navigation is Scan / Findings / Approvals / Audit. There is no login on the demo.
How we built it
The control room is a protection loop, not a chatbot:
- Ingest an asset and hash the content.
- Classify exposure and retrieve matching policy rows from CockroachDB.
- Persist the finding as
open. - Record a human approval (
redactorrevoke_access). - Execute only after approval; write before/after hashes.
- Append a hash-chained
agent_eventsrow so the trail cannot be silently rewritten.
CockroachDB Cloud (cluster in AWS eu-central-1) is the persistent memory: data_assets, findings, policy_documents, approvals, remediation_actions, and agent_events. Tables use Cockroach-friendly INT GENERATED BY DEFAULT AS IDENTITY and TIMESTAMPTZ. Schema bootstrap is CREATE TABLE IF NOT EXISTS on connect.
During development we used two Cockroach agent tools: the open-source Agent Skills (schema and SQL guidance) and the CockroachDB Cloud Managed MCP Server pointed at this cluster. Runtime traffic uses a PostgreSQL connection string to the same Cloud cluster.
The public URL is a time-boxed reservation so judges can click the demo today. The intended production path is AWS (container service, object storage for the client and samples, secrets for DATABASE_URL). Cockroach Cloud already runs on AWS in eu-central-1; that is the live memory host.
Challenges we ran into
- Humanitarian data cannot be real. All samples are synthetic. The product still has to feel like a protection desk, not a toy PII regex page.
- Destructive actions must be impossible without an approval row. The server enforces that; the UI is not the security boundary.
- Cockroach identity columns and quoted camelCase names needed care (
INT GENERATED BY DEFAULT AS IDENTITY,"contentHash","createdAt"). Agent Skills were used here instead of guessing Postgres-only idioms. - The hackathon clock forced a reserved public host while the AWS cutover (ECS/App Runner, S3 + CloudFront, Secrets Manager) is documented but not the URL judges will open first.
Accomplishments that we're proud of
- Memory is the product: findings, policies, approvals, and hashes live in one Cockroach cluster, not a separate “AI memory” store.
- Human-in-the-loop is real. Remediation is rejected until an approval exists.
- The audit is hash-chained (
previousHash→eventHash), so a missing or swapped event is visible. - Recurrence: the same content hash after a prior remediation escalates severity and links the prior finding.
- Judges can complete the full loop in under two minutes with no account.
What we learned
Agentic systems in this domain fail on process, not on classification. The classifier can be a heuristic with an optional model; the hard part is durable state: policy memory, an approval gate, and an append-only trail that survives restarts and regions. CockroachDB is a fit because that state is transactional, not a vector-only sidecar.
We also learned to treat the Cloud MCP endpoint and Agent Skills as part of the build toolchain (cluster targeting, schema choices), while the running agent writes memory over the ordinary PostgreSQL wire protocol.
What's next for Nuvira
- Cut DNS from the reserved demo host to AWS: long-lived Node on ECS Fargate or App Runner, static client and
/samples/*on S3 + CloudFront,DATABASE_URLin Secrets Manager, private connectivity to Cockroach. - Optional Cockroach vector index over policy excerpts so retrieval is embeddings-plus-SQL in the same database.
- Connector-backed ingest (real OneDrive / Slack / Outlook) behind the same approval gate.
- Stronger operator auth and role separation (scanner vs approver) now that the demo is intentionally open.
Built With
- aw
- cocrachdb
- ts
Log in or sign up for Devpost to join the conversation.