{"slug": "eve-content-agent-template", "title": "Eve Content Agent Template", "summary": "Eve released a Slack-based content agent template that lets writers draft blog posts, LinkedIn posts, release notes, and newsletters by @mentioning the bot in Slack. The agent pulls source material from Notion, publishes approved pieces as the signed-in writer, and uses Vercel Connect and OIDC for authentication with no static API keys.", "body_md": "A Slack-based content assistant built on [Eve](https://beta.eve.dev). Writers @mention it in\nSlack and it drafts blog posts, LinkedIn posts, release notes, and newsletters in your house\nvoice, pulling source material from Notion and publishing approved pieces back to Notion as\nthe signed-in writer.\n\n**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.\n\nDeploying with the button provisions everything the agent needs and wires it up for you:\n\n- a\n**Slack** connector (sets`SLACK_CONNECTOR`\n\n, with the event trigger pointed at`/eve/v1/slack`\n\n), - a\n**Notion** connector (sets`NOTION_CONNECTOR`\n\n), - a\n**Vercel Blob** store for the asset tools.\n\nOnce deployed, @mention the bot in your Slack workspace to start drafting.\n\n| Layer | Technology |\n|---|---|\n| Agent framework |\n|\n\n[Vercel Connect](https://vercel.com/docs/connect)[Vercel Blob](https://vercel.com/docs/vercel-blob), authenticated by OIDC[Vercel AI Gateway](https://vercel.com/docs/ai-gateway)(default: Claude Opus 4.8)[Vercel Sandbox](https://vercel.com/docs/sandbox)[Ultracite](https://www.ultracite.ai/)(Biome)**Zero static keys.** Authentication runs entirely on [Vercel Connect](https://vercel.com/docs/connect)\n(Slack and Notion) and [Vercel OIDC](https://vercel.com/docs/oidc) (Vercel Blob and AI\nGateway). There are no API keys or client secrets to manage in code or `.env`\n\nfiles: Notion is\nauthorized per writer in the browser, and Blob and the model authenticate with the project's\nOIDC token.\n\n```\nagent/\n  agent.ts                  # model configuration\n  instructions.md           # the agent's behavior\n  channels/slack.ts         # Slack surface (Vercel Connect credentials)\n  connections/notion.ts     # Notion workspace, user-scoped OAuth via Vercel Connect\n  sandbox.ts                # Vercel Sandbox backend\n  tools/\n    lint_against_style.ts   # deterministic banned-words check\n    upload_asset.ts         # Vercel Blob: store text or binary content\n    list_assets.ts          # Vercel Blob: browse stored assets\n    get_asset_info.ts       # Vercel Blob: metadata without downloading\n    download_asset.ts       # Vercel Blob: read a stored file back\n    delete_asset.ts         # Vercel Blob: delete (requires approval)\n  skills/\n    blog-style/             # voice, structure, and a canonical example post\n    linkedin-style/\n    release-notes-style/\n    newsletter-style/\n```\n\nLink the project you deployed (or a fresh one) and pull its environment:\n\n```\nvercel link\nvercel env pull\n```\n\nThen run the development server and link a model provider with `/model`\n\nin the TUI:\n\n```\npnpm dev\n```\n\nYou 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:\n\n```\neve deploy\n```\n\nThis project uses [Ultracite](https://www.ultracite.ai/) (a [Biome](https://biomejs.dev/)\npreset) for linting and formatting:\n\n```\npnpm check   # check formatting and lint rules\npnpm fix     # auto-fix what is fixable\n```\n\nThe Deploy button provisions these for you. To set them up manually (for a project you didn't\ncreate with the button), use the [Vercel CLI](https://vercel.com/docs/cli):\n\n``` php\n# Notion connector (note the printed UID, e.g. mcp.notion.com/notion -> NOTION_CONNECTOR)\nvercel connect create mcp.notion.com --name notion\n\n# Slack connector (note the UID, e.g. slack/<name> -> SLACK_CONNECTOR), then point its\n# event trigger at the route the agent serves\nvercel connect create slack --name <name> --triggers\nvercel connect attach slack/<name> --triggers --trigger-path /eve/v1/slack\n\n# Blob store, connected to the project for all environments\nvercel blob create-store <name> --access public --yes\n```\n\n**Voice:** edit the per-surface skills in`agent/skills/*/SKILL.md`\n\n, and the`references/banned-words.json`\n\neach one lints against. Add a new surface by adding a new skill folder.**Behavior:** edit`agent/instructions.md`\n\n.**Model:** edit`agent/agent.ts`\n\n(or run`/model`\n\nin the dev TUI).**Tools:** add or change tools in`agent/tools/`\n\n. The filename is the tool name.\n\nThe agent auto-updates as you edit these files.\n\n[Eve documentation](https://beta.eve.dev/docs/introduction): the framework powering this agent.[Vercel Connect](https://vercel.com/docs/connect): manages the Slack and Notion credentials.[Vercel Blob](https://vercel.com/docs/vercel-blob): object storage for the asset tools.", "url": "https://wpnews.pro/news/eve-content-agent-template", "canonical_source": "https://github.com/vercel-labs/eve-content-agent-template", "published_at": "2026-06-18 12:33:17+00:00", "updated_at": "2026-06-18 12:53:04.750229+00:00", "lang": "en", "topics": ["ai-tools", "generative-ai", "large-language-models", "developer-tools"], "entities": ["Eve", "Slack", "Notion", "Vercel", "Vercel Blob", "Vercel AI Gateway", "Claude Opus 4.8", "Ultracite"], "alternates": {"html": "https://wpnews.pro/news/eve-content-agent-template", "markdown": "https://wpnews.pro/news/eve-content-agent-template.md", "text": "https://wpnews.pro/news/eve-content-agent-template.txt", "jsonld": "https://wpnews.pro/news/eve-content-agent-template.jsonld"}}