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 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 headingWhy 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 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 headingWhat 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, 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, 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 headingWhat can the copilot do?
The Sanity expertise comes from seven skills, six of them sourced from Sanity's own 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 headingHow do I set up the Sanity copilot?
You need four accounts: a Vercel account, 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:
Deploy the template. The one-click deploy provisions the Slack, Sanity, and Notion connectors and a Vercel Blob store for file storage. When it finishes, the agent is live.
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.
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.
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. 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 headingWhat 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.
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 headingWhere 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 headingHow do I customize it?
eve discovers every capability from the filesystem, so customizing means editing files:
Approval gates live in the
APPROVAL_REQUIRED_TOOLSlists inagent/connections/sanity.tsandagent/connections/notion.ts. Addnotion-create-pagesthere 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 aSKILL.mdand eve discovers it.The model is a string in
agent/agent.ts. Any AI Gateway model ID works.
For house-voice writing across blog posts, social, and newsletters, pair it with the 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 that routes one lead to five specialists for content, social, SEO, and email.
Copy link to headingFrequently asked questions
Copy link to headingDoes 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 headingDo 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 headingCan 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 headingCan 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 headingDo I need to manage API keys?
No. Slack, Sanity, and Notion authenticate per user via Vercel Connect, while Vercel Blob and the AI Gateway authenticate using your project's OIDC token. No static keys live in the code.