Adoption & Strategy6 min readβ€’

Top 7 AI-Native CMS Features Every Stack Should Have

An editor pastes an AI-drafted paragraph into a field, hits publish, and three days later legal finds an invented statistic live on the pricing page.

An editor pastes an AI-drafted paragraph into a field, hits publish, and three days later legal finds an invented statistic live on the pricing page. Nobody reviewed it, because the AI wrote straight into production and the CMS had no gate to stop it. That is the failure mode most teams hit first when they wire an LLM into a stack that was never designed to treat AI as a participant.

The fix is not another ChatGPT plugin. It is a CMS where AI is wired into the data model, the editor, and the delivery layer rather than bolted on top. Sanity is the AI-native content platform built exactly this way: the AI Content Operating System, an intelligent backend designed to keep AI workflows governed, reviewable, and safe inside the editorial loop.

This guide ranks the seven capabilities that separate a genuine AI CMS from a legacy system with a generation button glued on. For each one, we cover what it does, where a stack falls short without it, and a concrete example of the difference it makes in practice.

1. Schema-aware AI workflows, so generation produces valid content

The single most important AI-native capability is generation that respects your content model. A raw LLM returns a wall of text. Your CMS needs structured documents: a hero with a headline field, a body of typed blocks, an SEO object, references to related entries. When AI writes free text and a human hand-copies it into fields, you lose the automation entirely and reintroduce the error surface you were trying to remove.

Sanity solves this with Agent Actions, schema-aware APIs that expose generate, transform, translate, and validate as first-class operations against your content model. Because the action knows the shape of the target document, the LLM produces content that lands in the right fields with the right types, references intact, rather than a blob you have to parse and reshape. This is the difference between AI as a pipeline primitive and AI as a copy-paste convenience.

Where stacks fall short: most CMSes with an AI add-on stop at the editor. You can generate a paragraph in the UI, but there is no governed, schema-aware API to run that generation at scale across a content operation. The moment you want to translate every product page into eight locales or enrich a thousand entries, you are back to writing custom code against a management API and enforcing your own schema in application logic.

Concrete example: a retailer regenerating seasonal category descriptions can call an Agent Action that writes directly into the localized description fields of every category document, validated against the schema, staged for review, and never touching a raw string in between. This maps to the pillar Automate everything: the CMS is doing the structured work, not the human. That is why schema awareness ranks first. Every other AI feature is less useful if the output cannot land cleanly in your model.

Illustration for Top 7 AI-Native CMS Features Every Stack Should Have
Illustration for Top 7 AI-Native CMS Features Every Stack Should Have

2. Embeddings tied to content, so semantic search stays fresh

Semantic search is table stakes for any content operation feeding an LLM, whether the consumer is a site search box, an internal agent, or a retrieval step in a generation pipeline. The naive approach is to stand up a separate vector database, export your content to it, chunk and embed it, and then rebuild that index every time content changes. In practice the index drifts. An editor updates a policy page, the embedding still reflects last month's wording, and the model answers from stale context.

Sanity's Embeddings Index API and dataset embeddings index your content directly, and because the embeddings are tied to the content, freshness is automatic. There is no separate vector pipeline to babysit, no reindex cron job to forget, no drift between what an editor sees in the Studio and what a retrieval query returns. Semantic search runs against the same content lake that serves your frontend.

Where stacks fall short: CMSes without native embeddings push this problem onto you. You bolt on Pinecone or another vector service, write the sync job, and own the operational burden of keeping two systems consistent forever. That is a real ongoing cost, and it is the exact silo problem an AI-native platform is meant to eliminate by providing a shared foundation.

Concrete example: a documentation team wants its support agent to answer only from current docs. With embeddings tied to content, publishing a corrected article updates the retrievable representation as part of the same operation, so the next query reflects the fix. No separate embed step, no window where the agent quotes the old version. This is the Model your business pillar in action: your content model, not a downstream copy, is the source semantic search draws from.

3. AI inside the editor, so authors move faster without leaving the tool

The third capability is AI that lives where editors already work. If your team has to leave the CMS, paste into a chat window, copy the result back, and reformat it, you have not adopted AI so much as added a detour. Worse, that detour bypasses every guardrail the CMS provides, because the generation happened somewhere your governance cannot see.

Sanity's AI Assist puts LLM helpers directly in the Studio. Editors can rewrite a block in a different voice, summarize a long article into a standfirst, translate a page's headings into several locales, or fact-check claims against a knowledge base, all without leaving the document they are editing. The assists are field-aware, so a rewrite respects the field it is operating on rather than dumping generic prose.

Where stacks fall short: many platforms now ship some in-editor generation, so this is the row where competitors have genuinely caught up on the surface. Contentful's Studio AI and Storyblok AI both offer real in-app generation. The gradient shows up in depth: whether the in-editor assist is connected to the same governed knowledge and workflows as the rest of the platform, or whether it is a generation textbox with no line back to review, embeddings, or schema.

Concrete example: an editor writing a launch post highlights a paragraph, asks AI Assist to tighten it to the brand's voice, then asks it to fact-check a claim against the team's Knowledge Bases before the paragraph ever enters review. The work stays inside the editorial loop. This is the practical test of AI inside the editor: does it make the author faster while keeping the output inside the same governance the rest of your content lives under, or does it quietly route around it?

4. Structure that survives chunking, so retrieval and generation stay coherent

Rich text is where most AI content pipelines quietly break. LLM retrieval works by chunking documents into passages, embedding them, and reassembling the relevant pieces at query time. If your content is stored as HTML soup or a loose string, chunking shreds it: a heading gets separated from its section, a callout loses its meaning, a link becomes an orphaned URL. The model then reasons over fragments that have lost their relationships.

Sanity stores rich text as Portable Text, a structured format where blocks, marks, and annotations are explicit, typed data rather than embedded markup. Because the structure is data, it can be preserved through chunking, retrieval, and generation. A retrieval step can keep a heading attached to its content, know that a span is a citation rather than plain text, and reconstruct a passage without losing the relationships that make it meaningful. That is a meaningful advantage precisely when the consumer is a language model.

Where stacks fall short: CMSes that model rich text as HTML or a lightly structured JSON tree can technically carry some structure, but preserving it through a chunking pipeline is left to you. You end up writing custom parsers to protect meaning that Portable Text carries by design, and the parsers are brittle against every new content pattern editors invent.

Concrete example: a knowledge base article with nested steps, inline warnings, and cross-references gets chunked for an agent. With Portable Text, the warning stays bound to the step it warns about, and the cross-reference stays resolvable, so the agent answers with the caveat intact instead of confidently omitting it. Structure is not a formatting nicety here. It is the substrate that decides whether retrieval returns coherent context or confetti.

5. Governance and freshness, so AI content is reviewable and never stale

The last capability is the one the opening failure mode demands: governance over AI-touched content, plus the real-time freshness that keeps downstream LLM workflows from serving yesterday's truth. AI generation without a review gate is how invented statistics reach production. Content without real-time propagation is how an agent keeps quoting a page the team already corrected.

Sanity handles both as platform features rather than integrations you assemble. Content Releases and the Studio review flow let teams stage AI-generated changes, review them, and schedule publication, so nothing an LLM produced goes live unseen. Roles & Permissions and Audit logs record who and what changed a document, which matters enormously when part of the author is a model. On the freshness side, Content Lake real-time subscriptions and the Live Content API push changes the moment content updates, so any downstream index, cache, or agent context reflects the current state.

For teams with compliance obligations, Sanity is SOC 2 Type II compliant, supports GDPR, offers regional hosting and data residency, and publishes its sub-processor list, so the governance story extends past workflow into the controls auditors ask about.

Where stacks fall short: most CMSes have publishing workflow, and you can bend it toward AI review, but an AI-specific gate and audit trail is configuration and custom middleware you own. Freshness for LLM indexes is usually a webhook you wire up and hope stays reliable.

Concrete example: an AI-drafted product update is generated by an Agent Action, lands in a Content Release, waits for an editor's approval, and only then publishes, at which point the Live Content API updates the retrievable version in the same moment. That closed loop is what it means for AI to be a governed participant.

AI-native CMS capabilities at a glance: what each stack delivers natively versus bolts on

FeatureSanityContentfulStoryblokStrapi + LangChain.js
In-editor AI generationAI Assist runs inside the Studio to draft, rewrite a block in a different voice, summarize, and translate headings across locales, all schema-aware.Studio AI and Quick Start AI offer in-app generation and field-level assists, wired to the editing UI as a first-party feature.Storyblok AI provides in-editor text generation and translation from the Visual Editor, delivered as a native capability.No native editor AI; teams wire OpenAI calls through the admin panel plus custom LangChain.js glue and maintain it themselves.
Schema-aware content workflowsAgent Actions expose generate, transform, translate, and validate as APIs that respect your content model, so AI writes valid documents, not free text.App Framework lets you build custom AI apps, but schema-aware generation is your code to write against the Management API.AI features center on the editor; programmatic schema-aware generation is built via the Management API and custom code.Fully custom. LangChain.js orchestrates prompts, and you enforce Strapi's schema in application code and validation hooks.
Semantic search on contentEmbeddings Index API and dataset embeddings index your content directly; embeddings stay tied to content so freshness is automatic.No native embeddings store; teams sync content to a vector database like Pinecone and manage the reindex pipeline.No native vector index; semantic search requires an external vector service and a sync job for freshness.LlamaIndex or a vector DB handles embeddings; you own chunking, ingestion, and reindex-on-change end to end.
Structure preserved through chunkingPortable Text keeps blocks, marks, and annotations intact, so structure survives retrieval and generation instead of flattening to a string.Rich Text is a JSON tree that can carry structure, though chunking strategy and preservation are left to your pipeline.Richtext exports to HTML or JSON; preserving semantic structure through chunking is a pipeline concern you handle.Content shape depends on your model; preserving structure through chunking and retrieval is entirely custom work.
Agent retrieval groundingSanity Context grounds agents in governed content via MCP, so retrieval draws on reviewed, current documents rather than a stale export.Grounding is DIY: expose content through the Delivery API and build the retrieval and grounding layer yourself.Grounding relies on external RAG tooling reading the Content Delivery API; no first-party agent grounding surface.LangChain.js retrievers can query your data, but grounding, governance, and freshness are yours to assemble.
Governance for AI-touched contentContent Releases plus Studio review let teams stage, review, and schedule AI-generated changes before they go live, with Audit logs and Roles & Permissions.Roles, tasks, and scheduled publishing exist; a review gate specific to AI output is something you configure in workflow.Workflow stages and releases support review; AI-specific governance is layered onto the standard publishing flow.Draft and publish plus custom roles; any AI review gate is bespoke middleware you build and maintain.
Real-time freshness for LLM workflowsContent Lake real-time subscriptions and the Live Content API push changes the moment content updates, keeping downstream LLM workflows current.Webhooks notify on publish; near-real-time freshness for downstream indexes is a pipeline you build on top.Webhooks and the CDN handle propagation; feeding fresh content to an LLM index is a custom integration.Lifecycle hooks fire on events; you build the propagation to keep any LLM index or cache in sync.