vercel-labs/marketing-team-eve-template

GitHub: vercel-labs/marketing-team-eve-template

基于 eve 框架构建的多智能体营销团队模板,通过负责人 agent 统一调度多位专业营销子 agent 完成定位、内容撰写、社交媒体发布、SEO 审计和邮件活动等任务。

Stars: 348 | Forks: 14

eve Marketing Agent Template banner # 营销团队 eve 模板 [![Agent Stack](https://img.shields.io/badge/Agent%20Stack-000?style=flat-square&logo=vercel&logoColor=FFF&labelColor=000&color=000)](https://vercel.com/kb/agent-stack) [![MIT License](https://img.shields.io/badge/License-MIT-000?style=flat-square&logo=opensourceinitiative&logoColor=white&labelColor=000&color=000)](LICENSE) 一个基于 [eve](https://eve.dev) 构建的营销 agent 团队。你把工作交给一个团队负责人:比如要计划的发布会、要撰写的帖子,或者一个没有转化的页面。负责人会为合适的专家下达任务,并把他们的产出交还给你。 [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?project-name=marketing-team-eve-template&repository-name=marketing-team-eve-template&repository-url=https%3A%2F%2Fgithub.com%2Fvercel-labs%2Fmarketing-team-eve-template%2Ftree%2Fmain&connect=%5B%7B%22type%22%3A%22notion%22%2C%22env%22%3A%22NOTION_CONNECTOR%22%7D%2C%7B%22type%22%3A%22resend%22%2C%22env%22%3A%22RESEND_CONNECTOR%22%7D%2C%7B%22type%22%3A%22slack%22%2C%22env%22%3A%22SLACK_CONNECTOR%22%2C%22triggers%22%3Atrue%2C%22triggerPath%22%3A%22%2Feve%2Fv1%2Fslack%22%7D%5D&stores=%5B%7B%22type%22%3A%22blob%22%2C%22access%22%3A%22public%22%7D%5D&env=TYPEFULLY_API_KEY&envDescription=API%20key%20for%20the%20Typefully%20MCP%20server%2C%20used%20to%20read%20and%20write%20social%20drafts) ## 团队 | 专家 | 负责 | 交付 | | --- | --- | --- | | `product-marketer` | 定位、信息传递、竞品分析以及共享品牌上下文文档 | 品牌上下文文档本身 | | `content-marketer` | 长篇内容:博客文章、落地页、案例研究、简报、文档 | 一个 Notion 页面链接 | | `social-media-coordinator` | 针对 X、LinkedIn、Threads、Bluesky 和 Mastodon 的短篇内容,以及 Typefully 队列 | Typefully 中的草稿 | | `seo` | 页面和站点审计、层级和内部链接、JSON-LD schema、模板化页面集 | 建议,以及作为产物的长篇审计 | | `email` | 为收件箱重写现有文案,然后在 Resend 中构建、定位并发送 | 一个 Resend 活动 (campaign) 链接 | 产品营销人员维护品牌上下文文档;其他所有专家在任务开始时都会阅读它。它是团队唯一的共享状态,因此只有一个所有者。 每位专家都有明确的职责:产品营销人员决定团队的宣传口径,内容营销人员撰写长篇文案,`seo` 决定应该存在哪些页面,而 `social-media-coordinator` 和 `email` 负责向受众发布。 ### 简报经由两位专家处理 内容营销人员撰写简报的正文,然后由邮件专家将其适配到收件箱中,并通过 Resend 发送。邮件专家是在重写现有文案,而不是从零开始草拟,因此简报仍需经过内容营销人员的策划和编辑流程。 ## 工作原理 - 由负责人分配任务。负责人会加载品牌上下文及你保存的偏好,为其中一位专家撰写需求说明 (brief),并返回结果。负责人本身不负责撰写交付物。 - 专家在全新的会话中运行。subagent 启动时没有对话历史,也不具备父级的任何技能、工具或连接,因此负责人的需求说明必须包含所有信息,且每位专家都会通过自己的 `get_brand_context` 工具加载品牌上下文。 - 只有一级分配。专家自行进行研究(针对资源预算使用 `web_search` 和 `web_fetch`),并根据书面标准 (rubric) 编辑自己的草稿,而不是进一步生成 subagent,因为每次跳转都会消耗完整的上下文交接成本。 - 技能按需加载。每个技能由一个 `SKILL.md` 和参考文件组成,当其 frontmatter 中的 `description` 与任务匹配时被加载。 - 没有注册表 (registry) 文件。工具的名称就是它的文件名,subagent 的名称就是它的目录名;eve 在构建时通过遍历 `agent/` 目录发现一切。添加专家只需添加一个目录。 ### 审批关卡 (Approval gates) 不可逆操作会暂停以等待批准或拒绝决定,在 Slack 或 TUI 中以按钮形式呈现。 | 操作 | 是否暂停 | | --- | --- | | 发送 Resend 广播、电子邮件或批量邮件 | 总是暂停,无论是否定时 | | 删除 Resend 广播、模板、联系人、细分 (segment) 或主题 | 总是暂停 | | 更改联系人的主题订阅 | 总是暂停 | | 删除 Typefully 草稿、帖子串 (thread) 或评论 | 总是暂停 | | 创建或编辑 Typefully 草稿 | 仅在发布草稿时暂停 | | 在 Notion 中移动页面或更改视图 | 总是暂停 | | 创建或更新 Notion 页面 | 否,草拟是正常流程 | | `delete_asset`, `clear_user_preferences` | 总是暂停 | | `save_brand_context` | 否。该工具的描述会告知模型在保存前需先与你达成一致 | Resend 连接还限制了模型能够探索的内容。`tools.allow` 将 Resend 发布的大约 85 个工具精简至涵盖活动、列表和诊断的 47 个工具。完全排除了诸如创建 API key 和写入域名等账户管理操作。 ### Slack 中的建议提示词 (prompts) 在 Slack 中与团队开启新对话时,会置顶四个建议提示词,每位专家一个(Slack 最多渲染四个)。 | 提示词 | 路由至 | | --- | --- | | 强化我们的定位 | `product-marketer` | | 撰写博客文章 | `content-marketer` | | 草拟社交帖子 | `social-media-coordinator` | | 审查页面的 SEO | `seo` | 每个提示词都指明了一个交付物,并要求负责人在分配任务前检查品牌上下文及你的偏好。 建议提示词需要 `assistant:write` bot 权限范围,以及 `assistant_thread_started` 和 `app_home_opened` 触发事件类型。如果没有这些,提示词将不会出现;但其他一切功能均可正常使用。 ## 部署 [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?project-name=marketing-team-eve-template&repository-name=marketing-team-eve-template&repository-url=https%3A%2F%2Fgithub.com%2Fvercel-labs%2Fmarketing-team-eve-template%2Ftree%2Fmain&connect=%5B%7B%22type%22%3A%22notion%22%2C%22env%22%3A%22NOTION_CONNECTOR%22%7D%2C%7B%22type%22%3A%22resend%22%2C%22env%22%3A%22RESEND_CONNECTOR%22%7D%2C%7B%22type%22%3A%22slack%22%2C%22env%22%3A%22SLACK_CONNECTOR%22%2C%22triggers%22%3Atrue%2C%22triggerPath%22%3A%22%2Feve%2Fv1%2Fslack%22%7D%5D&stores=%5B%7B%22type%22%3A%22blob%22%2C%22access%22%3A%22public%22%7D%5D&env=TYPEFULLY_API_KEY&envDescription=API%20key%20for%20the%20Typefully%20MCP%20server%2C%20used%20to%20read%20and%20write%20social%20drafts) 部署按钮将自动配置并连接以下内容: | 配置项 | 设置 | | --- | --- | | Notion connector | `NOTION_CONNECTOR` | | Resend connector | `RESEND_CONNECTOR` | | Slack connector,其触发器指向 eve 的 Slack 路由 (`/eve/v1/slack`) | `SLACK_CONNECTOR` | | Vercel Blob store | Blob 凭据 | | 提示输入 Typefully API key | `TYPEFULLY_API_KEY` | 接下来,在开发 TUI 或你自己的前端中与负责人对话,它就会将工作分配给各位专家。 ### 一个手动步骤 **Resend 发送。** 在 [Resend 仪表板](https://resend.com/domains) 中验证发送域名,并至少创建一个细分 (segment)。Agent 会读取该状态并从中进行选择,但无法为你创建域名或验证 DNS。Resend connector 是基于用户的:每个人在首次请求邮件任务时都会授权自己的登录,发送记录将归属于批准发送的人。如果你不使用电子邮件,请跳过此步骤。 ### 使用 AI 编程 agent 快速开始 正在使用 Claude Code 或 Cursor?粘贴以下内容: ``` I want to build a team of marketing agents with the eve framework, using the marketing team template. Read the setup instructions at https://agent-resources.dev/marketing-team-eve-template.md and follow them. They will cover deploying the template, building with eve, how everything works overall, and more. ``` ## 技术栈 | 层级 | 技术 | | --- | --- | | Agent 框架 | [eve](https://eve.dev) | | 语言 | TypeScript (strict, ESM), Node 24.x | | 聊天界面 | 通过 Vercel Connect 的 Slack,eve 开发 TUI,你自己的前端 | | 长篇交付物和需求说明 | Notion (MCP) | | 社交媒体发布 | Typefully (MCP) | | 电子邮件活动 | Resend (MCP) | | 共享状态和文件 | [Vercel Blob](https://vercel.com/docs/vercel-blob) | | 模型访问 | [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) | | 技能参考文件和 `bash` | [Vercel Sandbox](https://vercel.com/docs/sandbox) | | Lint 和格式化 | [Ultracite](https://www.ultracite.ai/),一个 [Biome](https://biomejs.dev/) 预设 | ### 凭据 | 服务 | 认证身份 | 管理内容 | | --- | --- | --- | | Notion | 每个用户,通过 [Vercel Connect](https://vercel.com/docs/connect) 进行 OAuth | 仅 Connector UID | | Resend | 每个用户,通过 Vercel Connect 进行 OAuth | 仅 Connector UID | | Slack | 由 Vercel Connect 代理的 Bot token | 仅 Connector UID | | Typefully | 一个共享的工作区 key | `TYPEFULLY_API_KEY` | | Vercel Blob | 项目 [OIDC](https://vercel.com/docs/oidc) token | 无 | | AI Gateway | 项目 OIDC token | 无 | Typefully 的 MCP server 仅接受静态 key,因此它是项目中唯一的凭据,并且其连接由所有用户共享。 Resend 使用基于用户的 token,因为发送电子邮件是此处唯一无法撤销的操作:审批记录会指出谁同意了发送,而 Resend 会记录是谁执行了发送。 ## 项目布局 ``` agent/ agent.ts # lead: model and compaction threshold instructions.md # lead behavior: ground, route once, hand back sandbox.ts channels/ eve.ts # inbound route for the TUI and your own front end slack.ts # inbound route for Slack connections/notion.ts tools/ # brand context, user preferences, read_artifact lib/ # shared factories, imported as #lib//.js vercel-blob/ # Blob key layout and the 5 asset tool factories brand-context/ # the shared document's key and tool factories user-preferences/ # principal-scoped key and size cap content/ # lint_against_style, save/read_artifact writing-quality/ # the shared prose-rules skill subagents/ product-marketer/ content-marketer/ social-media-coordinator/ seo/ email/ ``` 每个专家目录都采用相同的结构:一个包含路由描述的 `agent.ts`、一个 `instructions.md`、其专属的 `sandbox.ts`、一个包含五个资产工具以及 `get_brand_context` 和产出物 (artifact) 工具的 `tools/` 目录、一个禁用 shell 的 `bash.ts`,以及其专属的 `skills/`。 | 专家 | 技能 | 连接 | | --- | --- | --- | | `product-marketer` | `positioning`, `messaging`, `customer-research`, `brand-context` | Notion | | `content-marketer` | `blog-style`, `content-planning`, `content-editing`, `writing-quality` | Notion | | `social-media-coordinator` | `x-style`, `linkedin-style`, `threads-style`, `bluesky-style`, `mastodon-style`, `writing-quality` | Typefully, Notion | | `seo` | `seo-audit`, `site-architecture`, `schema`, `programmatic-seo` | Notion | | `email` | `email-style`, `email-adaptation`, `deliverability`, `resend-build`, `writing-quality` | Resend, Notion | 有两位专家在证据有限的情况下工作。`seo` 没有爬虫、排名追踪器或 Search Console,因此其审计清单会将每项检查标记为“可通过抓取验证”或“完全无法验证”。`email` 无法查看收件箱投放情况或域名声誉,其可交付性清单也是如此。两者都被要求报告他们无法检查的内容,而不是进行推断。 ## 本地开发 链接部署的项目或一个新项目,并拉取其环境配置: ``` vercel link vercel env pull pnpm dev # then run /model once in the TUI to link a provider ``` | 命令 | 作用 | | --- | --- | | `pnpm dev` | eve 开发 TUI | | `pnpm validate` | 集成了 Lint、类型检查和发现诊断功能 | | `pnpm check` / `pnpm fix` | Ultracite 检查和自动修复 | | `pnpm typecheck` | `tsc --noEmit` | | `npx eve info` | 打印所有已发现的工具、技能、连接和 subagent | | `eve deploy` | 部署到生产环境 | 没有单元测试套件。请通过 `pnpm validate` 进行验证,该命令必须报告 0 个错误和 0 个警告,然后在 TUI 中测试 agent。审批关卡会在 TUI 中呈现,因此你可以确认发送在执行前是否会暂停。 `npx eve info` 是确认更改是否已生效的最快方式。如果你添加的文件没有出现,说明发现功能没有将其归类为已编写的槽位 (slot),`.eve/discovery/diagnostics.json` 中会说明原因。
手动设置 connectors 部署按钮会自动为你完成此操作。对于未使用该按钮创建的项目,请使用 [Vercel CLI](https://vercel.com/docs/cli): ``` # Notion connector (打印 UID notion/marketing-team -> NOTION_CONNECTOR) vercel connect create notion --name marketing-team # Resend connector (打印 UID resend/marketing-team -> RESEND_CONNECTOR) vercel connect create resend --name marketing-team # Slack connector,然后将其 trigger 重新指向 eve 的 Slack route vercel connect create slack --name marketing-team --triggers vercel connect detach slack/marketing-team --yes vercel connect attach slack/marketing-team --triggers --trigger-path /eve/v1/slack --yes # Blob store vercel blob create-store assets --access public --yes # Typefully API key,来自你的 Typefully workspace 设置 vercel env add TYPEFULLY_API_KEY ``` 还需在 [Resend 仪表板](https://resend.com/domains) 中验证发送域名。没有域名就无法发送任何内容。
## 自定义 一目了然的编辑位置指南。[`CUSTOMIZING.md`](./CUSTOMIZING.md) 是详细的操作指南,包含添加专家、技能、工具或连接的方法,以及值得注意的静默失败问题。 编辑这些文件时,agent 会自动更新。 | 需更改的内容 | 编辑 | 说明 | | --- | --- | --- | | 团队成员 | 在 `agent/subagents/` 下添加目录 | 目录名即工具名;其 `agent.ts` 中的 `description` 是负责人在做选择时看到的全部信息 | | 负责人的行为 | `agent/instructions.md` | 基础认知、路由、编写需求说明、交付 | | 专家的技能 | 其 `instructions.md` 和 `skills/` | 技能 frontmatter 中的 `description` 决定何时加载 | | 语气和禁用词 | 每个 `-style` 技能中的 `references/banned-words.json` | 通过添加技能文件夹并在该 agent 的 `tools/lint_against_style.ts` 中传入其名称来添加界面 | | 审批关卡 | `connections/notion.ts` 中的 `APPROVAL_REQUIRED_TOOLS`,`typefully.ts` 中的 `DELETE_TOOLS` / `PUBLISH_TOOLS`,`resend.ts` 中的 `SEND_TOOLS` / `DESTRUCTIVE_TOOLS` | Notion 的副本是相同的,因此需要一起更改 | | 邮件 agent 可访问的内容 | `connections/resend.ts` 中的 `ALLOWED_TOOLS` | 约 85 个工具中的 47 个的白名单。建议在此处添加名称,而不是放宽关卡 | | 模型 | `agent/agent.ts` 以及每个 `agent/subagents//agent.ts` | 或者在 TUI 中运行 `/model`。默认情况下,每个 agent 使用相同的模型;负责人只负责路由,因此它是第一个可以尝试使用更便宜层级的地方 | | 共享代码 | `agent/lib//` | eve 将技能范围限制在一个 agent,因此共享程序要么是复制的 Markdown,要么是从每个 agent 的一行文件中调用的 `defineSkill` 工厂 | ### 添加远程专家 专家不一定要存放在此仓库中。eve 的 [remote agents](https://eve.dev/docs/guides/remote-agents) 允许负责人将任务委派给在其自身部署中运行的 agent,该 agent 拥有自己的技能、连接和发布周期。`vercelOidc()` 负责处理部署间的身份验证,无需共享密钥。 ``` // agent/subagents/paid_ads.ts import { defineRemoteAgent } from "eve"; import { vercelOidc } from "eve/agents/auth"; export default defineRemoteAgent({ url: () => process.env.PAID_ADS_AGENT_URL ?? "https://your-paid-ads-agent.vercel.app", description: "Plan and write paid search and social ads: audience, offer, and the copy variants to test. " + "Pass the campaign goal, the audience, the budget, and any brand constraints in the message.", auth: vercelOidc(), }); ``` 设置 `PAID_ADS_AGENT_URL` 后,负责人就会像对待本地专家一样,根据其 `description` 获取该专家。结果将作为常规工具结果返回。当专家需要凭据或你不希望保留在此仓库中的发布周期(如广告平台访问权限)时,这非常有用。 ## 了解更多 | 链接 | 涵盖内容 | | --- | --- | | [使用 eve 在 Slack 中运行营销团队](https://vercel.com/kb/guide/marketing-team-eve) | 关于此模板的端到端指南 | | [eve 文档](https://eve.dev/docs/introduction) | 驱动此 agent 的框架 | | [eve subagents](https://eve.dev/docs/subagents) | 委派、全新会话、路由描述 | | [eve skills](https://eve.dev/docs/skills) | 按需加载的技能和参考文件 | | [Human in the loop](https://eve.dev/docs/human-in-the-loop) | 上文提到的审批关卡 | | [Vercel Connect](https://vercel.com/docs/connect) | Notion、Resend 和 Slack 凭据 | | [Vercel Blob](https://vercel.com/docs/vercel-blob) | 品牌上下文、偏好设置、产出物、资产 | | [Typefully API](https://typefully.com) | 社交发布队列 | | [Resend MCP server](https://resend.com/docs/mcp-server) | 邮件专家调用的电子邮件工具 | 更深层的内部机制详见 [`ARCHITECTURE.md`](./ARCHITECTURE.md),在此仓库中工作的约定详见 [`AGENTS.md`](./AGENTS.md)。 ## 相关模板 - [eve Sanity Copilot](https://github.com/vercel-labs/sanity-copilot-eve-template) - [eve Content Agent](https://github.com/vercel-labs/eve-content-agent-template) - [eve Personal Agent](https://vercel.com/templates/nuxt/eve-personal-agent)
标签:AI智能体, MITM代理, OSV, Vercel, 内容生成, 多智能体协作, 自动化攻击, 营销自动化