After migrating from Webflow to Sanity and Astro, the biggest workflow change is that non-technical teammates lose the visual editor. The [eve Sanity copilot](https://vercel.com/templates/eve/eve-sanity-copilot) closes that gap: your team @mentions a bot in Slack, and it queries and edits Sanity content in plain English, shapes schemas, manages releases, and drafts long-form pieces into Notion. Anything destructive, such as publishing or deploying a schema, pauses for your approval first.

This guide covers why teams make the Webflow to Sanity move, what the copilot does, and how to deploy it in one click.

## [Copy link to heading](#why-are-teams-moving-from-webflow-to-sanity-and-astro)Why are teams moving from Webflow to Sanity and Astro?

Teams outgrow Webflow when content needs to live in more than one place. Webflow bundles the CMS, the visual editor, and hosting into one platform, which works until you need structured content that several surfaces can reuse, a frontend you fully own, or a content model that lives in version control.

The common replacement stack pairs Sanity with Astro:

- **Sanity** stores content as structured documents. You define the schema in code, query it with GROQ, and reuse the same content across your site, app, and anywhere else that reads the API.

- **Astro** renders the frontend and ships minimal JavaScript by default, and it deploys to [Vercel](https://vercel.com/docs/frameworks/astro) with zero configuration.

The trade-off is the editing experience. Webflow gives marketers a visual editor; Sanity gives them Sanity Studio, structured fields, and a query language. For content operations beyond filling in fields, such as auditing what exists, restructuring documents, or preparing a release, someone needs to know GROQ or ask a developer. That's the gap an AI copilot fills.

## [Copy link to heading](#what-is-the-eve-sanity-copilot)What is the eve Sanity copilot?

The eve Sanity copilot is a Slack bot that manages your Sanity project on your team's behalf. It's an open-source template built on [eve](https://vercel.com/eve), Vercel's filesystem-first framework for durable backend agents. A team member @mentions the bot or DMs it with a task, and the copilot works against the real project: it inspects the schema before creating or editing anything and queries with GROQ to see what actually exists, so it never invents document IDs or field names.

Each person signs in to Sanity through [Vercel Connect](https://vercel.com/docs/connect), so the copilot acts as that specific user with their own permissions. There are no API keys or client secrets to manage anywhere in the project.

## [Copy link to heading](#what-can-the-copilot-do)What can the copilot do?

| Task | How it works |
| --- | --- |
| Query content | Writes and runs GROQ queries from a plain-English request, such as "which posts still reference the old pricing page?" |
| Edit content | Creates and edits drafts; patching and publishing pause for approval |
| Shape schemas | Inspects the current schema and proposes changes; deploying a schema pauses for approval |
| Manage releases | Creates and manages Sanity releases and versions |
| Draft long-form | Writes long pieces as Notion pages and replies with the link |
| Research facts | Delegates to a `researcher` subagent that returns findings with source URLs and flags gaps it couldn't verify |
| Review drafts | Delegates final drafts to a `reviewer` subagent that judges them against a writing-quality rubric with fresh eyes |

The Sanity expertise comes from seven skills, six of them sourced from Sanity's own [Agent Toolkit](https://github.com/sanity-io/agent-toolkit): schema and GROQ best practices, content modeling, Portable Text conversion and serialization, SEO and AEO guidance, and content experimentation. The copilot loads a skill only when the task matches it.

## [Copy link to heading](#how-do-i-set-up-the-sanity-copilot)How do I set up the Sanity copilot?

You need four accounts: a [Vercel account](https://vercel.com/signup), a Slack workspace where you can install an app, the Sanity project the copilot will manage, and a Notion workspace for drafts. Then follow these steps:

1.  **Deploy the template.** The [one-click deploy](https://vercel.com/templates/eve/eve-sanity-copilot) provisions the Slack, Sanity, and Notion connectors and a Vercel Blob store for file storage. When it finishes, the agent is live.

2.  **Invite the bot to Slack.** The deploy flow points Slack's event trigger at the route the agent serves. Invite the bot to a channel and @mention it to start a thread.

3.  **Sign in to Sanity and Notion.** The first time each team member asks the copilot to touch either service, Vercel Connect prompts them to sign in. Access is per user, so queries run against the datasets that person can see and drafts are created by the real author.

4.  **State your preferences.** Tell the bot things like "our production dataset is `prod`" or "always write titles in sentence case." It saves them per user and applies them in every later session.

For local development, you need Node.js 24 or newer, pnpm, and the [Vercel CLI](https://vercel.com/docs/cli). Run `vercel link`, `vercel env pull`, and `pnpm dev` to work with the agent in the dev terminal UI, then ship changes with `eve deploy`.

## [Copy link to heading](#what-stops-the-copilot-from-breaking-my-content)What stops the copilot from breaking my content?

Two layers protect the project. First, every Sanity and Notion call runs under the signed-in user's permissions, so the copilot can never access content that person couldn't. Second, destructive operations are gated on approval: the call pauses and renders approve or deny buttons in Slack before it runs.

| Connection | Operations that pause for approval |
| --- | --- |
| Sanity | Patching documents, publishing, unpublishing, discarding drafts or versions, updating datasets, deploying schemas, deploying the Studio |
| Notion | Updating pages, moving pages, updating data sources or views |
| File storage | Deleting an asset, clearing a user's preferences |

Reads, GROQ queries, and draft creation flow freely, because drafting is the normal workflow. The copilot treats content as ready to publish only when you say so, and the publish call itself still waits for the approval button.

## [Copy link to heading](#where-does-the-copilot-fit-in-a-webflow-migration)Where does the copilot fit in a Webflow migration?

The copilot is not a Webflow importer. Moving your collections into Sanity is a separate step, handled by migration scripts or a migration partner. The copilot takes over once the content lives in Sanity, which is where the ongoing work is:

- **Post-migration cleanup.** Ask it to find documents with missing fields, broken references, or legacy formatting, and patch them in batches for review.

- **Content audits.** Run questions like "list every post without a meta description" without writing GROQ yourself.

- **Schema evolution.** As your Astro frontend grows, the copilot proposes and deploys schema changes with your approval, informed by Sanity's own content modeling guidance.

- **Everyday editing for non-developers.** Marketers who edited pages visually in Webflow describe the change they want in Slack rather than learning every corner of the Studio or filing a developer ticket.

Your Astro frontend is unaffected throughout. The copilot works against Sanity's APIs, so any framework that reads from your dataset, whether Astro, Next.js, or something else, keeps rendering the same content.

## [Copy link to heading](#how-do-i-customize-it)How do I customize it?

eve discovers every capability from the filesystem, so customizing means editing files:

- **Approval gates** live in the `APPROVAL_REQUIRED_TOOLS` lists in `agent/connections/sanity.ts` and `agent/connections/notion.ts`. Add `notion-create-pages` there to gate Notion page creation too.

- **Behavior** lives in `agent/instructions.md`, which describes the whole workflow.

- **Skills** live under `agent/skills/`; add a folder with a `SKILL.md` and eve discovers it.

- **The model** is a string in `agent/agent.ts`. Any [AI Gateway model ID](https://vercel.com/ai-gateway/models) works.

For house-voice writing across blog posts, social, and newsletters, pair it with the [eve content agent template](https://github.com/vercel-labs/eve-content-agent-template) as a remote agent. The copilot delegates writing tasks to it across deployments, authenticated by OIDC with no shared secret. If content is one part of a wider marketing operation, see [how to build an AI marketing team](https://vercel.com/i/how-to-build-an-ai-marketing-team) that routes one lead to five specialists for content, social, SEO, and email.

## [Copy link to heading](#frequently-asked-questions)Frequently asked questions

### [Copy link to heading](#does-the-sanity-copilot-work-with-astro)Does the Sanity copilot work with Astro?

Yes. The copilot manages content through Sanity's APIs, so it works with any frontend that reads from your dataset, including Astro, Next.js, and Remix. Your rendering layer doesn't change.

### [Copy link to heading](#do-editors-need-to-learn-groq)Do editors need to learn GROQ?

No. Editors describe what they want in plain English in Slack, and the copilot writes and runs the GROQ itself. It also inspects the schema first, so queries match the fields that actually exist.

### [Copy link to heading](#can-it-migrate-my-content-out-of-webflow)Can it migrate my content out of Webflow?

No. The copilot has no Webflow connection. Move your collections into Sanity first with a migration script or partner, then use the copilot for cleanup, audits, and everyday content work in Sanity.

### [Copy link to heading](#can-the-copilot-publish-or-delete-content-on-its-own)Can the copilot publish or delete content on its own?

No. Patching, publishing, unpublishing, discarding drafts, updating datasets, and deploying schemas all pause for an approve or deny decision in Slack. Reads and draft creation don't require approval.

### [Copy link to heading](#do-i-need-to-manage-api-keys)Do I need to manage API keys?

No. Slack, Sanity, and Notion authenticate per user via Vercel Connect, while Vercel Blob and the [AI Gateway](https://vercel.com/docs/ai-gateway) authenticate using your project's OIDC token. No static keys live in the code.

## [Copy link to heading](#related-resources)Related resources

- [eve Sanity copilot template](https://vercel.com/templates/eve/eve-sanity-copilot) and the [source on GitHub](https://github.com/vercel-labs/sanity-copilot-eve-template)

- [Manage your Sanity project from Slack with eve](https://vercel.com/kb/guide/eve-sanity-copilot)

- [Deploying Astro on Vercel](https://vercel.com/docs/frameworks/astro)

- [Sanity Agent Toolkit](https://github.com/sanity-io/agent-toolkit)

- [Run a marketing team from Slack with eve](https://vercel.com/kb/guide/marketing-team-eve)