vercel-labs/marketing-team-eve-template
GitHub: vercel-labs/marketing-team-eve-template
基于 eve 框架构建的多智能体营销团队模板,通过负责人 agent 统一调度多位专业营销子 agent 完成定位、内容撰写、社交媒体发布、SEO 审计和邮件活动等任务。
Stars: 348 | Forks: 14
# 营销团队 eve 模板
[](https://vercel.com/kb/agent-stack)
[](LICENSE)
一个基于 [eve](https://eve.dev) 构建的营销 agent 团队。你把工作交给一个团队负责人:比如要计划的发布会、要撰写的帖子,或者一个没有转化的页面。负责人会为合适的专家下达任务,并把他们的产出交还给你。
[](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` 触发事件类型。如果没有这些,提示词将不会出现;但其他一切功能均可正常使用。
## 部署
[](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/手动设置 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) 中验证发送域名。没有域名就无法发送任何内容。标签:AI智能体, MITM代理, OSV, Vercel, 内容生成, 多智能体协作, 自动化攻击, 营销自动化