The Hidden Costs of "Just Use Pinecone"
Your team shipped a support agent in a sprint. Pinecone for vectors, a chunker for the docs, a cron job to re-embed when content changes.
Your team shipped a support agent in a sprint. Pinecone for vectors, a chunker for the docs, a cron job to re-embed when content changes. Three months later the agent is quoting a pricing page that was retired in Q2, the re-embed job silently failed over a weekend, and nobody can explain why one query returns the deprecated API doc and the near-identical query returns the current one. The demo was an afternoon. The maintenance is now somebody's actual job.
That is the pattern behind "just use Pinecone." The vector database is the cheap part. The expensive part is everything you bolt around it: the ingestion pipeline, the chunking strategy, the embedding refresh cadence, the metadata sync, the drift between what your CMS says and what your index remembers. Sanity Context (previously Agent Context) is the AI Content Operating System's answer to that sprawl, an intelligent backend where retrieval lives next to the content instead of in a separate system you have to keep reconciling.
This article prices out the hidden line items in the roll-your-own retrieval stack, then shows where a content-native approach removes them entirely rather than automating them.
The demo is cheap, the reconciliation is not
Standing up a vector database is genuinely a one-afternoon exercise. Create an index, pick an embedding model, push a few thousand vectors, wire a nearest-neighbor query. The problem is that a vector index is a snapshot of your content at the moment you embedded it, and content does not hold still. Marketing rewrites the pricing page. Support deprecates an article. Engineering ships a new API version and quietly retires the old one. Every one of those edits opens a gap between the source of truth and the index your agent actually reads from.
Closing that gap is where the real engineering lives. You need a pipeline that watches for content changes, decides which documents were affected, re-chunks them, re-embeds them, upserts the new vectors, and deletes the stale ones so the agent stops citing them. Miss a delete and the agent confidently quotes something that no longer exists. Miss an update and it answers from last quarter. None of this is visible in the demo, because the demo runs against a frozen snapshot. It shows up in week six, when the first "why did the bot say that" ticket lands and the answer is buried three systems deep in a batch job nobody owns.
This is the first hidden cost: the vector store is stateless about your content's lifecycle, so you become the state machine. In a content-native model the retrieval layer reads the same store editors write to, so "the content changed" and "retrieval changed" are the same event, not two systems you have to keep in sync by hand.

Chunking and embedding: the tax nobody budgets for
Ask anyone who has run RAG in production what they spend the most time tuning and the answer is rarely the model. It is chunking. Split documents too small and you shred the context an answer needs across several fragments that never co-retrieve. Split too large and you dilute the signal, so the embedding averages out to something generic and your relevant paragraph gets buried under boilerplate. There is no universal chunk size, which means chunking becomes an ongoing experiment rather than a one-time setting, and every re-tune means re-embedding the whole corpus.
Then there is embedding lifecycle. The moment you commit to an external vector database, you own an embedding pipeline as a standing piece of infrastructure. You choose a model, you version it, and the day you want to upgrade to a better one you re-embed everything, backfill, and cut over without a window where retrieval quality dips. Your embeddings live in one system and the content they describe lives in another, so any schema change, any new content type, any field rename has to be threaded through both.
Sanity Context collapses this. Embeddings are dataset embeddings, tied to the content in the Content Lake rather than maintained as a separate index. When a document changes, its embedding updates within minutes, because the embedding is a property of the content, not the output of a pipeline you scheduled. There is no separate vector store to reconcile, no re-embed cron to babysit, and no drift window between "editor saved" and "index knows." The tax you budgeted for tuning and backfilling largely disappears, because the thing generating embeddings is the thing storing content.
Metadata, filtering, and the query you can't actually write
Pure vector similarity gets you "semantically close," which is not the same as "correct." A user asks about refunds on the Enterprise plan, and cosine similarity happily surfaces the Starter plan refund policy because the two paragraphs read almost identically. To get the right answer you need to constrain by metadata: plan tier, product version, locale, publish status, audience. So now you are maintaining a metadata schema inside the vector database that mirrors the structured fields already living in your CMS, and you are keeping the two copies in sync on every write.
This is where the bolt-on stack starts to feel absurd. Your content backend already knows the plan tier and the locale and whether the doc is published. You duplicate all of it into vector metadata so you can filter at query time, and then you spend engineering hours keeping the duplicate honest. The filter you actually want, semantic relevance blended with keyword precision and structured constraints in one ranked pass, is hard to express when the semantics live in one system and the structure lives in another.
Inside the Content Lake this is a single GROQ query. You blend text::semanticSimilarity() for meaning with a BM25 match() for exact terms, combine them with score() and boost() to weight the signals, and filter on real document fields in the same expression, because the structured data and the vectors are the same content. There is no metadata mirror to maintain, because there is no second system holding a copy of the truth. The query you couldn't cleanly write across a vector DB and a CMS is the query the store was designed to answer.
Hybrid search: why semantic-only quietly loses precision
Vector search is strong at meaning and weak at exact tokens. Ask it for error code "E-4021" or a specific SKU or a function name and pure semantic similarity often ranks a paragraph that talks about errors in general above the one document that contains the literal string. Keyword search has the opposite failure: it nails the exact token and misses every paraphrase. Production retrieval needs both, which is why the mature answer is hybrid search, semantic recall plus lexical precision, fused into one ranking.
Building hybrid on a bolt-on stack means running two retrieval systems and a fusion layer on top. You query the vector index, you query a keyword engine like Elastic or Algolia, and then you reconcile the two result sets with something like reciprocal rank fusion, tuning weights so neither signal drowns the other. That is three systems and a scoring heuristic to operate, monitor, and keep aligned as content and query patterns shift. Each is a place where relevance can silently degrade without anyone noticing until the answers get worse.
Because Sanity Context's retrieval lives in the Content Lake, hybrid is native rather than assembled. text::semanticSimilarity() and match() run in the same GROQ query, blended with score() and boost(), so lexical precision and semantic recall are fused in a single ranked pass over one store. You are not standing up a keyword cluster next to a vector cluster and gluing them with a fusion function; you are writing one query against one system. Fewer moving parts is not just less code to write, it is fewer independent things that can drift out of alignment while your agent keeps answering as if nothing changed.
Governance: who owns what the agent is allowed to say
The hidden costs are not only technical. When retrieval lives in a vector database wired up by engineers, the people who own the content, support leads, docs writers, product marketers, have no seat at the table for what the agent retrieves. They can edit the source article, but they cannot see whether the index picked up the change, cannot preview how a new instruction changes agent behavior, and cannot stage a change to go live with a launch. Every adjustment routes through an engineer and a deploy, which makes the content team spectators to a system built on their own content.
This matters more as agents touch regulated, versioned, or audience-specific content. You want to answer differently for Enterprise than for free-tier, differently in the EU than in the US, and you want a record of what changed and when. On a raw vector stack, governance is whatever discipline the pipeline authors imposed, plus a prayer that the metadata stayed accurate.
Sanity Context puts governance where editors already work. Agent instructions and knowledge live in the Studio, and Content Releases let teams stage and preview changes to what an agent knows and how it behaves the same way they stage a website launch, then ship it as a unit. Sanity's enterprise posture, SOC 2 Type II, GDPR, regional data residency, and a published sub-processor list, applies to that content and its retrieval path rather than to a separate system you secured yourself. The result is that the people responsible for the content are the people who control what the agent says, which is exactly backwards from the bolt-on stack.
Pricing out the real total cost of ownership
Add up what "just use Pinecone" actually costs and the vector database line item is close to a rounding error. The real spend is the ingestion pipeline you write and maintain, the chunking experiments you never stop running, the embedding model you version and backfill, the metadata schema you duplicate and reconcile, the keyword engine and fusion layer you stand up for hybrid, and the governance process you improvise because none of these systems knows about content lifecycle. Each is a standing operational cost, and each is a place where retrieval quality can quietly regress between the demo that impressed everyone and the incident that did not.
The reframe is not "Pinecone is bad." It is a fine vector index. The reframe is that a vector index is one component of a retrieval system, and buying only the component means building and operating everything around it forever. The costs are hidden precisely because they arrive after the decision, when the sprint is done and the maintenance has quietly become a permanent headcount line.
Sanity Context is the AI Content Operating System's approach to that math, an intelligent backend where retrieval, structured content, embeddings, and governance are one system instead of five you keep in sync. Knowledge Bases turn datasets, websites, PDFs, and support databases into agent-readable documents on the same retrieval path, Agent Actions expose schema-aware APIs for LLM workflows, and the Sanity Context MCP endpoint is what production agents connect to. The point is not that any single feature beats a dedicated tool on its own axis. It is that the axes stop being separate systems, so the reconciliation cost, the largest and most hidden line item, goes to zero.
What you own when retrieval lives in the vector DB vs the content backend
| Feature | Sanity | Pinecone | Contentful + external search | pgvector / Neon |
|---|---|---|---|---|
| Keeping embeddings fresh on content change | Dataset embeddings are tied to content, so an edit propagates within minutes; no re-embed pipeline to own. | You build and operate a re-embed pipeline that watches content and upserts vectors; drift is on you. | Content changes in the CMS, but a separate search index must be re-synced by a pipeline you maintain. | Embeddings sit in a column, but refresh logic, triggers, and backfills are yours to write and run. |
| Hybrid semantic plus keyword search | Native: text::semanticSimilarity() and match() blended with score() and boost() in one GROQ query. | Semantic native; keyword and fusion require a second engine plus a reciprocal-rank layer you build. | Depends on the bolted-on search product; hybrid means wiring and tuning two systems yourself. | pgvector for similarity plus Postgres full-text search; you write the fusion and weighting SQL. |
| Filtering by structured fields at query time | Filter on real document fields in the same query as similarity, because structure and vectors are one store. | Metadata filtering exists, but you duplicate CMS fields into vector metadata and keep the copy in sync. | Structured fields live in the CMS; the search index needs its own mirror kept aligned on every write. | SQL joins let you filter, but you own the schema that mirrors content state into the vector table. |
| Governance of what the agent retrieves | Editors govern agent instructions in the Studio; Content Releases stage and preview behavior like a launch. | Governance is whatever pipeline authors enforce; content owners have no preview of index behavior. | Editorial workflows exist for content, but agent retrieval behavior lives outside them in glue code. | No editorial layer; governance is code review and migrations, owned by engineering, not content teams. |
| Number of systems to operate | One store for content, structure, embeddings, and retrieval on a shared retrieval path. | Vector DB plus ingestion, embedding, keyword, and fusion layers you assemble and monitor. | CMS plus external search plus embedding and sync pipelines connecting them. | Postgres plus extensions plus the trigger and pipeline code that keeps vectors current. |
| Enterprise compliance posture | SOC 2 Type II, GDPR, regional data residency, and a published sub-processor list cover content and retrieval. | Vendor has its own certifications, but you secure the surrounding pipeline and content stores separately. | CMS and search vendor each carry their own posture; the glue layer's compliance is yours to establish. | Inherits your cloud and Neon posture; the surrounding pipeline compliance is your responsibility. |