Inspiration

What it does## Inspiration

Deepfake detectors are stateless. Every video is judged in isolation, and the moment the verdict is returned, the evidence is gone. There is no institutional memory — no way to ask "have we seen this manipulation before?" or "which files came back with conflicting signals last week?"

I wanted to give deepfake detection a memory: something that remembers every analysis, recognizes look-alikes, and can be interrogated in plain language. The hackathon theme — build with agentic memory — was exactly the push I needed.

What it does

AURA Memory extends my existing AURA deepfake-detection pipeline with persistent, queryable memory:

  • Analyzes a video through an 11-layer forensic pipeline and returns a verdict (SUSPICIOUS, CONFLICTING SIGNALS, AUTHENTIC) with a composite score. Layer 10 even identifies the likely generative origin (Sora / Kling / Veo).
  • Remembers every analysis: a durable detection record plus a 1024-dimensional multimodal vector embedding is written to CockroachDB.
  • Recalls similar past detections via cosine similarity — the "seen before" signal is returned inline with every new analysis.
  • Answers questions about its own memory in natural language through the Model Context Protocol (MCP): an AI agent turns "how many detections and with which verdicts?" into SQL, runs it over a read-only connection, and answers.

How I built it

  • Backend: FastAPI, packaged as a Docker image on Amazon ECR, running on Amazon ECS (Express Mode).
  • Embeddings: Amazon Bedrock Titan Multimodal — a fixed-size 1024-dim vector per analysis, so a 5-second clip and a 2-hour film cost the same storage. The video never enters the database, only its fingerprint.
  • Memory: CockroachDB Serverless on AWS stores detection records in a VECTOR column; recall is a nearest-neighbour query using cosine distance.
  • Agentic layer: the CockroachDB MCP server exposes the memory to any MCP client (I used Claude Code), running in --read-only mode.
  • Frontend: Next.js on Vercel. API docs: Swagger.

Challenges I ran into

The MCP integration — the last requirement — fought me the hardest. Every connection attempt returned "Failed to connect." Credentials were valid, the database connection tested fine by hand, everything looked right. The culprit turned out to be embarrassingly simple: the GitHub repo URL I was using pointed to a repository that didn't exist. Once I found the correct org, it connected in 30 seconds. The hardest bug was the most trivial one.

The container image also lacked the CockroachDB CA certificate for sslmode=verify-full, so I moved to sslmode=require — still fully TLS-encrypted — and noted CA baking as future hardening.

Accomplishments that I'm proud of

A two-layer security model I can actually demonstrate: a dedicated aura_readonly SQL user with SELECT-only privileges, plus the MCP server running --read-only. Even a compromised or maliciously-prompted agent is structurally unable to modify the memory. And watching the agent write its own SQL — and self-correct by dropping the huge embedding column when it wasn't needed — was the moment it clicked.

What I learned

Vector memory is cheaper and simpler than it looks: fixed-size embeddings mean storage doesn't grow with media size. And exposing a database to an AI agent safely is a design problem, not a prompt problem — least privilege at the database layer beats trusting the model to behave.

What's next for AURA Memory

  • Bake the CockroachDB CA into the image for sslmode=verify-full.
  • Load credentials from a secrets manager and rotate the read-only user.
  • Batch-ingest a labelled deepfake/authentic corpus to enrich similarity recall.
  • Expose recall thresholds through the API.

How we built it

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for AURA Memory

Built With

Share this project:

Updates