9 min readBy Flow

Why We Built Inherent: The Production Memory Problem

The founder story behind Inherent: a 2am session where the same query returned different context — and why that became a context engine for reliable AI memory.

why we built inherentbuilding in publicAI memory architecturecontext engineproduction RAGdeterministic retrievalmanaged context infrastructure
Branded title card reading Why We Built Inherent: The Production Memory Problem

Key takeaway: We did not build Inherent because language models are bad. We built it because the layer around the model — ingestion, retrieval, and audit — is where production AI actually breaks, and no one was managing it. The origin story is one debugging session: the same question returned different supporting context on two runs. That was not a model bug. It was a memory bug. Inherent is the context engine we kept rebuilding by hand until we decided to build it once, properly: a truth layer, a memory layer, and an audit layer.

If you are shipping retrieval-augmented AI to production, the most useful thing this post can do is reframe where you look when it misbehaves. The instinct is to blame the model — swap providers, tune the prompt, raise the temperature floor. But the failures that survive to production usually start upstream, in the context you feed the model: a stale chunk, a document that changed and was never re-ingested, a retrieval step that is not reproducible, an answer no one can trace.

So the "so what" is simple and it costs you real debugging hours: before you blame the model, debug the context. Most teams cannot, because the context layer is invisible — it has no logs, no receipts, no determinism guarantee. That gap is the entire reason Inherent exists.

Previous post: Inherent vs pgvector: Extension You Run or Pipeline You Buy?. For the architecture frame behind this story, read RAG Architecture Tradeoffs in Plain English.

What this post covers

Inherent Demo

Building an internal AI agent?

Join the Inherent demo pipeline — we help you connect private company context to Claude, GPT, Cursor, or your own agent.

By the end, you should be able to tell — for your own AI feature — whether the next failure you chase is a model problem or a memory problem, and what to build (or buy) if it is the latter.

  • The wall: a production chatbot that was loved for three days, then stopped being trustworthy.
  • The 2am epiphany: same query, different context — why that is a memory bug, not a model bug.
  • What we tried first, and why bolting a full pipeline onto a vector database broke in the edge cases.
  • What we built instead: the AI Memory Stack — truth, memory, and audit as three managed layers.
  • What we refuse to fake: building in public with zero customers and no invented numbers.
  • A five-minute test to classify your own failure, and the one next step that follows from it.

The wall: a demo everyone loved, then stopped trusting

Start where every version of this story starts: with something that worked.

We shipped a production AI assistant over a company's documents — the ordinary shape, an LLM answering questions grounded in retrieved context. For about three days it was the best demo in the room. Then the complaints started, and they were not the complaints you expect. Nobody said "it hallucinated." They said "it told me two different things," "it quoted the old policy," "I can't tell where that answer came from."

That is the wall. The model was fine. The demo-to-production gap was not about intelligence; it was about consistency, freshness, and traceability — three properties the model does not own and the vector store does not provide. A support lead does not care that cosine similarity worked. They care that on Monday the assistant cited the refund policy correctly and on Thursday, after the policy PDF changed, it confidently cited the version that no longer applied.

The implication: the thing that broke was never in the model weights. It was in the pipeline that decided which context the model saw — and that pipeline had no owner.

The 2am epiphany: same query, different context

The turning point was a single debugging session that ran too late.

The same question, asked twice, was retrieving different supporting chunks — and therefore producing different answers. Traced backward, the cause was not randomness in the model. It was the retrieval state underneath: re-embedding drift, an index that had been rebuilt between runs, ranking that was not reproducible. The context feeding the "reasoning" was itself unstable.

Technical view: the failure mode is non-deterministic retrieval. Same documents plus same query should produce the same context, every time. When they do not, every downstream guarantee you thought you had — correctness, reproducibility, the ability to debug — quietly evaporates, because you can no longer hold the input constant while you investigate the output.

Business view: picture a finance or compliance workflow. A customer asks, "why did the AI tell me I qualified?" If the same query can return different context on different runs, you cannot answer that question honestly. You have shipped a system whose behavior you cannot reproduce — which, in a regulated setting, is not a rough edge. It is a defect.

That was the reframe: this is not a model problem. It is a memory problem. The model was doing exactly what it was told; the context layer was handing it different memories each time.

What we tried first: bolting a pipeline onto a vector database

The honest middle of the story is that we did the obvious thing first, and it did not hold.

Everyone's advice was "just use a vector database." So we did — and then spent weeks building the parts a vector database assumes you already have: an ingestion job that parses and chunks every source format; a re-embedding step that fires whenever a document changes; invalidation logic so stale chunks stop being returned; tenant isolation so one customer never retrieves another's data; and an audit log that could reconstruct why any given answer happened. Each piece was a weekend. Together they were a second product, running in production, that nobody had budgeted to maintain.

To be fair to the tools: the vector databases were good at their job. Pinecone is a strong managed vector store (Pinecone); pgvector is an excellent Postgres extension (pgvector). The problem was never the index. It was that similarity search is one primitive, and production memory is the pipeline before and after it — the ingestion, freshness, isolation, and audit that no vector store claims to own. We were not missing a better index. We were missing the layer above it.

The implication we could not unsee: this pipeline was not client-specific. We were rebuilding the same plumbing for every workflow instead of shipping the feature. Margin — and reliability — was in the product, not the plumbing.

What we built instead: the AI Memory Stack

So we built the layer we kept rebuilding, once, as managed infrastructure. Its shape is three layers, and the exhibit below is the whole thesis on one page.

Exhibit: the AI Memory Stack — a Truth Layer that owns source of record and managed ingestion, a Memory Layer that makes retrieval deterministic and tenant-safe, and an Audit Layer that issues a receipt for every answer; orchestration sits above and vector storage sits below

The truth layer decides what the current source of record is and keeps it fresh: managed ingestion that parses, chunks, and re-processes a document the moment it changes, so the system never answers from a version that no longer exists. The memory layer makes retrieval deterministic and tenant-safe: the same documents plus the same query return the same context, inside a workspace boundary where isolation is on by default rather than a rule you hand-maintain. The audit layer issues a receipt for every answer — which documents, which chunks, which version, which permissions shaped it — so "why did it say that?" has an evidence-backed answer instead of a shrug.

Inherent sits above vector storage and below your orchestration. It is not a faster index and not a hosted database. It is the context engine — managed ingestion, deterministic retrieval, immutable audit — that turns a working demo into a system you can put in front of a customer, an auditor, or a regulator.

What we refuse to fake

A founder story published during a launch is tempting to inflate. We are choosing not to, and saying so on purpose, because trust is the actual product of this post.

As of today, Inherent has zero paying customers. The Public API is live; the customer count is honest. There are no invented adoption metrics in our writing, no testimonials we did not receive, no benchmark numbers without a source. When we make a claim we cannot yet prove at scale, we mark it as a design goal or a hypothesis, not a result. That discipline is not modesty for its own sake — it is the same discipline the product enforces. A system that promises "every answer has a receipt" cannot be sold by a company that fabricates its own. Building in public only compounds if the public can check your math.

The implication for you as a reader: weigh this post as an argument about where AI breaks, tested against your own experience — not as social proof. If the memory-problem framing does not match what you have seen in production, it is wrong, and you should discard it.

A five-minute test: model problem or memory problem?

Before you spend another sprint tuning prompts, classify the failure. Take one AI workflow you have shipped and mark each row honestly.

Symptom you have seen If yes, the failure is… What actually fixes it
Same question, different answers on different runs Memory (non-deterministic retrieval) Deterministic retrieval, not a new model
Confidently quotes a document that has since changed Memory (stale context) Managed ingestion + invalidation on change
Cannot show which source or version produced an answer Memory (no audit) Retrieval receipts / immutable audit log
One tenant can surface another tenant's context Memory (isolation) Workspace isolation by default
Answer is fluent but factually wrong despite correct, fresh context Model (genuine reasoning error) Prompt, model, or evaluation work

The pattern the test exposes: four of the five rows above are memory problems wearing a model costume. Only the last row is a genuine model problem. If your marks cluster in the top four rows, a better model will not save you — the work you are avoiding is the context layer, and it is the work that breaks at 2am.

The bottom line, and where to start

We built Inherent because we kept meeting the same failure — a demo that worked until the context underneath it drifted, went stale, or became impossible to explain — and because that failure was never in the model. It was in the unmanaged layer between the model and the data. The fix was not a smarter prompt. It was a truth layer, a memory layer, and an audit layer, managed for you instead of rebuilt by you.

Small action for today: run the five-row test above on one workflow. If your failures land in the memory rows, wire one of them into a deterministic, auditable pipeline instead of patching it again. Start with the Inherent Public API and put a single workflow behind managed context: get started in the docs. Prefer to map the problem before you build? Book a company context audit and we will trace one workflow's source truth, retrieval path, permissions, and evidence together. Building the memory layer yourself and hitting the same walls we did? DM Flow on X with where it breaks — that failure mode is exactly what we are building against.

Next read: Inherent vs Pinecone: Vector Database or Managed Context Layer?.

Inherent Demo

Building an internal AI agent?

Join the Inherent demo pipeline — we help you connect private company context to Claude, GPT, Cursor, or your own agent.

Inherent on Substack

Keep yourself updated on the latest in AI news and trends.

Everything you need to know about AI, delivered to your inbox. Every week.

Subscribe
Powered by Substack. Unsubscribe anytime.