Building a Content Creation Agent Team with Vercel Eve Subagents and Skills
This tutorial shows how to transform the previously built Vercel Eve agents into a full‑featured content creation team by defining reusable skills for topic planning, article writing, and review, and by splitting responsibilities into dedicated subagents for researcher, writer, and reviewer, with detailed code examples and workflow guidance.
Project Structure
The example lives in example/03-content-team and adds three skill files and three subagents:
example/03-content-team/
package.json
tsconfig.json
.env.example
scripts/
check-custom-gateway.mjs
agent/
agent.ts
instructions.md
lib/
model.ts
skills/
topic_planning.md
article_writing.md
review_checklist.md
subagents/
researcher/
agent.ts
instructions.md
skills/
topic_planning.md
writer/
agent.ts
instructions.md
skills/
article_writing.md
reviewer/
agent.ts
instructions.md
skills/
review_checklist.md
channels/
eve.tsKey differences from the previous example:
The root agent loads three skill files from agent/skills/.
Three dedicated subagents live under agent/subagents/.
Each subagent can load its own copy of the required skill (e.g., agent/subagents/researcher/skills/topic_planning.md).
Shared Model Configuration
Model creation is moved to agent/lib/model.ts so the root agent and all subagents share the same configuration, supporting either the default Vercel AI Gateway or a custom OpenAI‑compatible provider:
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
const defaultGatewayModelId = "minimax/minimax-m3";
const customBaseURL = process.env.EVE_MODEL_BASE_URL;
const usesCustomGateway = customBaseURL !== undefined && customBaseURL.trim() !== "";
export const model = usesCustomGateway
? createOpenAICompatible({
name: "custom",
baseURL: customBaseURL,
apiKey: process.env.EVE_MODEL_API_KEY,
includeUsage: true,
}).chatModel(requireCustomModelId())
: (process.env.EVE_GATEWAY_MODEL_ID ?? defaultGatewayModelId);
export const modelContextWindowTokens = parseContextWindowTokens(
process.env.EVE_MODEL_CONTEXT_WINDOW_TOKENS
);All agents import model and modelContextWindowTokens from this file.
Root Agent (Content Editor)
The root agent’s instructions.md acts as a managing editor. It declares three specialist roles and the skill‑loading rules:
# SpringForAll Content Editor
You are the managing editor for the SpringForAll community content team.
Your mission is to help Java, Spring, Spring AI, Spring Cloud, JVM, backend engineering, and developer tooling creators turn rough ideas into useful Chinese technical articles.
Use the content team as three specialist roles:
- Use the `researcher` subagent when the task needs topic discovery, trend analysis, source collection, or uncertainty checks.
- Use the `writer` subagent when the task needs an outline, first draft, rewrite, title options, or article packaging.
- Use the `reviewer` subagent when the task needs editorial review, technical risk checks, source checks, or publish‑readiness feedback.
Load the relevant skill before delegating or doing the work yourself:
- `topic_planning` for topic discovery, audience fit, source requirements, and topic scoring.
- `article_writing` for brief‑to‑draft writing, article structure, examples, and SpringForAll voice.
- `review_checklist` for final review, risk classification, missing evidence, and revision requests.
If a subagent fails, returns an empty result, or returns an unusable result, do not silently complete that specialist's work yourself. Report the failed step, summarize what context was sent, and ask the user whether to retry with a smaller request.The root agent never performs the actual writing or reviewing; it decides the next step, which skill to load, which subagent to invoke, how to merge outputs, and which parts still need human confirmation.
Skill: Topic Planning
The skill file agent/skills/topic_planning.md starts with a front‑matter description that Eve exposes to the model:
---
description: Use when planning SpringForAll article topics, scoring candidate ideas, or turning a vague content direction into a research brief.
---The skill instructs the model to avoid a static topic list and to check real sources such as the Spring official blog, reference docs, release notes, GitHub repositories, and community questions. It also requires the model to list any sources it cannot access and to avoid presenting guesses as facts.
Researcher Subagent
A declared subagent must have its own agent.ts with a description field. The researcher subagent’s definition:
export default defineAgent({
description: "Research SpringForAll content topics, collect source plans, compare candidate angles, and return evidence‑aware topic briefs.",
model,
modelContextWindowTokens,
});Its instructions.md defines its identity and tells it to load the topic_planning skill before returning a result:
# SpringForAll Researcher
You are the research subagent for SpringForAll content operations.
Your job is to turn vague content directions into evidence‑aware topic briefs.
Load and follow the `topic_planning` skill before returning your result.Because declared subagents do not inherit the root agent’s skills, the same skill file is duplicated under agent/subagents/researcher/skills/topic_planning.md so the researcher can see it.
Writer and Reviewer Subagents
The writer and reviewer follow the same pattern, each with its own agent.ts, instructions.md, and a skill file ( article_writing.md and review_checklist.md respectively). The writer’s skill produces a title, abstract, outline, and draft; the reviewer’s skill checks audience fit, factual accuracy, structure, and publish‑readiness.
Why Not Use outputSchema
Eve’s subagent tool supports outputSchema, but different gateways and models have inconsistent support for strict JSON output. To keep the tutorial robust across Vercel AI Gateway and custom OpenAI‑compatible providers, the agents use fixed Markdown headings (e.g., ## Candidate Topics, ## Recommended Topic, ## Open Questions) to make parsing reliable.
Handling Subagent Failures
The root agent includes a rule that if a subagent fails, it must report the failure, summarize the sent context, and ask the user whether to retry with a smaller request. This keeps the workflow observable and prevents silent fallback to the root agent.
Verification Commands
After cloning the repository, run the following commands to install dependencies, configure environment variables, and verify that Eve discovers the three skills:
cd example/03-content-team
npm install
cp .env.example .env.local
# Vercel AI Gateway
EVE_GATEWAY_MODEL_ID=minimax/minimax-m3
AI_GATEWAY_API_KEY=YOUR_GATEWAY_KEY
# Custom provider
EVE_MODEL_BASE_URL=https://api.example.com/v1
EVE_MODEL_API_KEY=your-api-key
EVE_MODEL_ID=your-model-id
EVE_MODEL_CONTEXT_WINDOW_TOKENS=128000
npm run check:gateway
npm exec -- eve info # should show "Skills 3 skills"
rg "subagents/(researcher|writer|reviewer)|skills/(topic_planning|article_writing|review_checklist)" .eve/compile/compiled-agent-manifest.json
npm run build
npm run dev # start the CLISend the following prompt to the CLI to run the full content pipeline:
请用完整内容团队流程,为 SpringForAll 策划、写作并审核一篇文章。
方向:Spring AI 在企业 Java 应用里的落地边界。
要求:
1. 先用 topic_planning 做 3 个候选选题,并请 researcher 给出来源计划和风险。
2. 选择最适合 SpringForAll 读者的一个选题,请 writer 写出标题、摘要、大纲和文章草稿。
3. 请 reviewer 按 review_checklist 审核草稿,给出 pass/revise/block 结论和必须人工核验的事实点。
4. 最后由你整合成一份包含选题简报、草稿、审核结论的中文结果。The ideal flow is:
Root agent loads topic_planning and calls researcher for candidate topics.
Root agent loads article_writing and calls writer for the draft.
Root agent loads review_checklist and calls reviewer for review.
Root agent aggregates the topic brief, draft, and review verdict into a final Chinese result.
Summary
Skills split the workflow into topic planning, writing, and review.
Subagents give the team clear role boundaries: researcher, writer, reviewer.
The tutorial demonstrates that declared subagents do not inherit root‑agent slots, requiring each subagent to include its own copy of needed skills.
Markdown headings are used instead of strict JSON to stay compatible with custom OpenAI‑compatible gateways.
The complete CLI run validates the end‑to‑end process.
Example repository: https://github.com/dyc87112/vercel-eve-content-team-tutorial/tree/main/example/03-content-team
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Programmer DD
A tinkering programmer and author of "Spring Cloud Microservices in Action"
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
