Skip to content
New Project

eve Content Agent

Draft blog posts, LinkedIn posts, release notes, and newsletters in your team's house voice without leaving Slack.

DeployView Demo

Eve Content Agent Template

A Slack-based content assistant built on Eve. Writers @mention it in Slack and it drafts blog posts, LinkedIn posts, release notes, and newsletters in your house voice, pulling source material from Notion and publishing approved pieces back to Notion as the signed-in writer.

  • Lives in Slack. Answers @mentions and DMs, replies in threads, and renders approvals as buttons.
  • Writes in your voice. One editable style skill per surface (blog, LinkedIn, release notes, newsletter), enforced by a deterministic style-lint tool.
  • Grounded in Notion. Each writer signs in to their own Notion through Vercel Connect, so drafts are created as the real person with their own permissions, with no shared secret.
  • Stores files in Vercel Blob. Export drafts, save images and attachments, and read them back, authenticated by the project's OIDC token.

Deploy

Deploying with the button provisions everything the agent needs and wires it up for you:

  • a Slack connector (sets SLACK_CONNECTOR, with the event trigger pointed at /eve/v1/slack),
  • a Notion connector (sets NOTION_CONNECTOR),
  • a Vercel Blob store for the asset tools.

Once deployed, @mention the bot in your Slack workspace to start drafting.

Tech stack

LayerTechnology
Agent frameworkEve
LanguageTypeScript (strict, ESM)
Chat surfaceSlack, via Vercel Connect
Source & publishingNotion (MCP), user-scoped OAuth via Vercel Connect
File storageVercel Blob, authenticated by OIDC
Model accessVercel AI Gateway (default: Claude Opus 4.8)
SandboxVercel Sandbox
Lint & formatUltracite (Biome)

Zero static keys. Authentication runs entirely on Vercel Connect (Slack and Notion) and Vercel OIDC (Vercel Blob and AI Gateway). There are no API keys or client secrets to manage in code or .env files: Notion is authorized per writer in the browser, and Blob and the model authenticate with the project's OIDC token.

What's inside

agent/
agent.ts # model configuration
instructions.md # the agent's behavior
channels/slack.ts # Slack surface (Vercel Connect credentials)
connections/notion.ts # Notion workspace, user-scoped OAuth via Vercel Connect
sandbox.ts # Vercel Sandbox backend
tools/
lint_against_style.ts # deterministic banned-words check
upload_asset.ts # Vercel Blob: store text or binary content
list_assets.ts # Vercel Blob: browse stored assets
get_asset_info.ts # Vercel Blob: metadata without downloading
download_asset.ts # Vercel Blob: read a stored file back
delete_asset.ts # Vercel Blob: delete (requires approval)
skills/
blog-style/ # voice, structure, and a canonical example post
linkedin-style/
release-notes-style/
newsletter-style/

Local development

Link the project you deployed (or a fresh one) and pull its environment:

vercel link
vercel env pull

Then run the development server and link a model provider with /model in the TUI:

pnpm dev

You can chat with the agent directly in the dev TUI to test the drafting, style-lint, Notion, and Blob flows. The Slack surface itself only runs against a deployment. Ship changes with:

eve deploy

Linting and formatting

This project uses Ultracite (a Biome preset) for linting and formatting:

pnpm check # check formatting and lint rules
pnpm fix # auto-fix what is fixable

Setting up the connectors by hand

The Deploy button provisions these for you. To set them up manually (for a project you didn't create with the button), use the Vercel CLI:

# Notion connector (note the printed UID, e.g. mcp.notion.com/notion -> NOTION_CONNECTOR)
vercel connect create mcp.notion.com --name notion
# Slack connector (note the UID, e.g. slack/<name> -> SLACK_CONNECTOR), then point its
# event trigger at the route the agent serves
vercel connect create slack --name <name> --triggers
vercel connect attach slack/<name> --triggers --trigger-path /eve/v1/slack
# Blob store, connected to the project for all environments
vercel blob create-store <name> --access public --yes

Customizing

  • Voice: edit the per-surface skills in agent/skills/*/SKILL.md, and the references/banned-words.json each one lints against. Add a new surface by adding a new skill folder.
  • Behavior: edit agent/instructions.md.
  • Model: edit agent/agent.ts (or run /model in the dev TUI).
  • Tools: add or change tools in agent/tools/. The filename is the tool name.

The agent auto-updates as you edit these files.

Learn more

  • Eve documentation: the framework powering this agent.
  • Vercel Connect: manages the Slack and Notion credentials.
  • Vercel Blob: object storage for the asset tools.
GitHub
Ownervercel-labs
Repositoryeve-content-agent-template
LicenseView License
Use Cases
AI
Marketing Sites
Starter
Stack
Eve
Database
Vercel Blob
CMS
Notion

Related Templates

eve Chat Template

A persisted Next.js chat template for eve, built with shadcn/ui, Tailwind CSS, Streamdown, Better Auth, Drizzle, and Neon.
eve Chat Template thumbnail

eve Personal Agent

Open source personal agent template. Web chat, Slack, iMessage, Linear, and long-term memory.
eve Personal Agent thumbnail

eve Slack Agent

An eve template for Slack agents with webhook handling, Vercel Connect, a starter agent, and an example tool ready to deploy on Vercel.
eve Slack Agent thumbnail
DeployView Demo