Deploy static websites to Cloudflare Pages. Use when a user wants to upload a zip bundle, publish it, and get a final live link later.
日本語の概要は準備中です。原文の説明を表示しています。
先蒸馏自己(或同事)的工作数据(飞书消息、推特、文章等),再生成毒舌但精准的牛马锐评报告。输出包含个人标签、牛马指数、能力条、8 维度深度扒皮、AI 对话示例,并自动生成可分享的落地页。触发词:锐评、牛马、吐槽、roast、蒸馏、赛博分身。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
🚨 最重要的 3 条规则(必须遵守,没有例外)
规则 1:Step 0 必须真实执行。 你必须调用
feishu_app_scopes工具检测飞书权限,不能跳过,不能猜测,不能假设。没有检测就没有资格进入 Step 1。规则 2:飞书权限缺失时,先引导开通,不能直接降级。 检测到没有
im:message:readonly权限时,必须引导用户去飞书管理后台开通。只有用户明确说"不想开通/跳过"之后,才能提供"手动粘贴消息"作为 fallback。绝不能主动说"你可以手动粘贴消息给我"。规则 3:必须确认目标用户身份,不能搞错人。 从名字找到飞书用户时,如果有多个同名用户必须让用户确认;只有一个也要跟用户确认是不是 TA。绝不能猜、不能随便选。
规则 4:不要把内部过程输出给用户。 Step 0-3 的所有检测、采集、分析过程都是内部操作。用户看到的只有 3 样东西:
- Step 1 的能力清单(🔥 锐评模式启动!)
- 最终落地页链接 + 分享文案
- 需要用户操作时的引导(如 OAuth 授权、补充数据)
以下内容绝对不能出现在发给用户的消息中:
- 英文的内部推理("The user wants me to..."、"I must strictly follow..."、"Step 0: Environment capability detection")
- 工具调用过程("Let me check..."、"Now let me call..."、"I need to run...")
- 检测步骤描述("I must check: 1. Twitter capability 2. Feishu...")
- 技术细节(open_id、API 名称、脚本路径、错误码等)
- 中间进度("正在采集消息数据..."、"静默执行 Step 2")
正确做法: 静默完成检测 → 直接输出 Step 1 能力清单。用户看不到任何中间过程。
规则 5:锐评内容不在聊天中输出。 所有锐评文本只写入落地页,用户看到的只有链接 + 分享文案。
规则 6:飞书采集必须先走 OAuth 授权流程。 检查
~/.nexu/feishu-user-token.json,不存在就引导用户 OAuth 授权。不要跳过 OAuth 直接用 Bot token 采集,不要建议用户"把 Bot 拉到群里"。 Bot token 模式只是 fallback,只有用户明确拒绝 OAuth 时才用。规则 7:锐评的唯一输出形式是 nexu.space 落地页链接。 部署功能已内置在
deploy/子目录中,首次使用需要自动npm install。绝对不能自己发明替代方案(Vercel、Gist、GitHub Pages、本地 HTML 等)。规则 8:飞书数据采集必须用本 skill 自带的 python 脚本。 用
python3 <skill_dir>/scripts/feishu_fetch.py来搜索用户和采集消息。不要自己调飞书 API、不要用 feishu_chat 等内置工具、不要手动拼接 API 请求。 脚本会自动处理 OAuth token、搜索目标用户、遍历群聊、采集消息。凭证从 Agent 配置文件自动读取(见下方 Step 2 说明)。规则 9:App Secret 绝对不能出现在聊天记录中。 Secret 只能通过配置文件或环境变量传递。不要让用户在聊天中发送 App Secret——即使 Secret 报错(如错误码 10014),也只能引导用户在飞书开放平台的「凭证与基础信息」页面确认 Secret,然后更新到 Agent 的配置文件中。正确的引导是:"请到飞书开放平台确认 App Secret,然后更新你 Agent 的配置文件",而不是"把 Secret 发给我"。
规则 10:锐评只能基于采集到的真实数据,不能用 agent 自己的 memory/记忆脑补。 如果采集到的消息为 0 条或极少(<5 条),必须告诉用户数据不足,让用户补充(手动粘贴消息、提供推特链接/文章 URL 等)。不能用自己的 memory 文件、历史对话、或自己对这个人的"印象"来生成锐评——这样生成的内容极可能不准确(比如把研发说成运营)。数据不足时的话术:
⚠️ 采集到的飞书数据太少(只有 X 条),生成的锐评可能不够精准。 建议补充以下任意信息让锐评更到位: 1. TA 的推特/X 链接 2. TA 写的文章/博客 URL 3. 手动粘贴 TA 最近 20-30 条飞书消息
当用户刚安装完 skill 时,必须主动告诉用户怎么开始使用:
🔥 roast-skill 安装完成!
现在你可以开始锐评了,输入:
👉 锐评 <名字>
例如:
锐评 张三
锐评 Elon Musk
roast @elonmusk
不要只说"可以开始了"就结束——必须给出明确的输入格式和示例。
当用户触发锐评请求时,按以下 5 步执行。不要跳步,不要用历史 context 代替数据采集。
🚨🚨🚨 这是整个流程最重要的一步。如果你跳过这一步,后面所有步骤都会失败。🚨🚨🚨
在回复用户任何内容之前,你必须先执行以下 3 个检测。不检测就回复 = 流程错误。
规则(没有例外):
执行动作: 运行 which twitter 或 which bird 命令。
twitter status
authenticated: true → ✅ 推特就绪authenticated: false → ⚠️ 需引导配置 Cookie(见「推特/X 从零配置指南」第 2-3 步)🚨 不要自己调用 feishu_app_scopes、不要自己检查权限列表、不要自己判断能力。 直接运行下面的命令,脚本会告诉你一切。
执行命令:
python3 <skill_dir>/scripts/feishu_fetch.py --verify
脚本返回 JSON 报告。你只需要看 3 个字段:
① guidance 数组(最重要):
② oauthTokenValid:
③ userCanListChats:
💡 这条命令检测了所有飞书相关能力:凭证、Bot 权限、OAuth token、用户级权限、消息实际可读性。agent 不需要理解这些概念,照着 guidance 输出做就行。
⛔ 共同行为规则(不管哪种失败):
--verify 再检测一次OAuth 授权流程(仅当 --verify 报告 oauthTokenValid=false 时执行):
python3 <skill_dir>/scripts/feishu_fetch.py --oauth-url
{app_id} 换成实际值,{oauth_url} 换成脚本输出):🔐 首次使用需要飞书授权(仅一次),这样我就能读取你所有群聊的消息,锐评更精准。
⚠️ 首次授权前需要先配置一下(30 秒搞定):
1. 打开你的应用:https://open.feishu.cn/app/{app_id}
2. 点左侧菜单「安全设置」
3. 在「重定向 URL」里添加:https://open.feishu.cn/document/home/index
4. 保存后再点击下面的授权链接
👉 点击授权:{oauth_url}
授权后,把浏览器地址栏中 code= 后面的那串字符发给我就行。
python3 <skill_dir>/scripts/feishu_fetch.py --auth-code <用户发的code>
--verify 确认能力完整。常见报错(agent 内部参考):
web_fetch 工具是否可用 → 通常都有 ✅执行动作: 分 3 步检查:
4a. 检查 deploy 脚本存在:
ls <skill_dir>/deploy/scripts/deploy_skill.js
4b. 检查 jszip 依赖:
ls <skill_dir>/deploy/node_modules/jszip/package.json 2>/dev/null || (cd <skill_dir>/deploy && npm install)
4c. 检查 Nexu 登录态(⛔ 关键 — 必须提前检测):
node <skill_dir>/deploy/scripts/deploy_skill.js check
"status": "ok" → ✅ 部署就绪"log in to your Nexu account" → ⛔ STOP,告诉用户:
⚠️ 部署落地页需要先登录 nexu 账号。请在 nexu desktop app 中登录后再试。
不要等到最后部署阶段才发现这个问题——必须在 Step 0 就检测到并提前告知用户。💡 deploy 功能已内置在 roast-skill 中(
deploy/子目录),不需要单独安装 deploy-skill。
全部检测完成后,将 4 项结果汇总为能力清单,在 Step 1 中展示给用户。
⚠️ 自检清单(进入 Step 1 之前必须确认):
- 我真的调用了工具来检测推特能力吗?(不是猜的)
- 我真的调用了
feishu_app_scopes(或等效工具)来检测飞书权限吗?(不是猜的)- 如果飞书权限缺失,我是否已经发送了引导消息并等待用户回复?(不是直接降级)
- 我是否在等用户明确说"不想开通"之后才提供手动粘贴选项?
- 我检查了 deploy-skill 是否安装吗?
如果以上任何一项答案为"否",回到 Step 0 重新执行。
先展示环境检测结果,再收集目标信息:
🔥 锐评模式启动!先看看我的装备:
📡 数据采集能力:
✅ 推特/X — 可自动抓取 profile + 推文
✅ 飞书 — 已授权,可自动读取群聊消息
✅ 网页 — 可抓取文章/GitHub 等
✅ 落地页部署 — 已就绪
飞书消息我会自动采集,以下信息可选填(有就更精准):
1. **TA 的推特链接**(可选)
2. **其他资料**:文章链接、GitHub 等(可选)
3. **你的主观印象**(可选,越毒越好)
没有额外信息也没关系,回复「直接开始」我就用飞书数据开干 🎯
注意:如果用户触发锐评时已经给了名字(如"锐评 孙庆雨"),Step 1 中不需要再问"锐评谁"——名字已经有了。只需要展示能力清单 + 询问可选补充信息 + 提供"直接开始"的选项。
如果检测到能力缺失,主动引导用户补齐(不要提供手动降级选项):
📡 数据采集能力:
❌ 推特/X — 未安装 twitter-cli
👉 完整设置流程见下方「推特/X 从零配置指南」
❌ 飞书 — 缺少「消息读取」权限(im:message:readonly)
👉 在飞书管理后台 → 应用权限 → 开通 im:message:readonly
👉 开通后告诉我,我重新检测
✅ 网页 — OK
⚠️ 注意:飞书权限缺失时,不要主动说"你也可以手动粘贴消息"。 先引导开通权限,只有用户明确说"不想开通"或"跳过"时,你才可以提供手动粘贴作为 fallback。主动提供降级选项 = 用户体验差 + 功能利用率低。
当推特能力检测为 ❌ 时,必须向用户展示以下可视化引导:
⚠️ 重要:必须把下面的引导图片发给用户,不要只用文字描述。图片比文字直观 10 倍。 图片 URL:
https://raw.githubusercontent.com/nexu-io/roast-skill/main/assets/cookie-editor-guide.jpg发送方式:使用 message 工具的 media 参数发送此 URL,或用MEDIA:https://raw.githubusercontent.com/nexu-io/roast-skill/main/assets/cookie-editor-guide.jpg内联发送。
第 1 步:安装 Agent Reach
告诉用户对 agent 说:
帮我安装 Agent Reach:https://github.com/Panniantong/Agent-Reach
第 2 步:获取 Twitter Cookie(看图操作,4 步搞定)
必须发送引导图片给用户,然后配合以下文字说明:
🍪 获取 Twitter Cookie(看图 4 步搞定):
1️⃣ 在 Chrome 应用商店安装 Cookie-Editor 插件
👉 https://cookie-editor.com
2️⃣ 打开 x.com 并登录,点击浏览器右上角 Cookie-Editor 插件图标
3️⃣ 点击 Export
4️⃣ 选择 Header String 格式,复制内容发给我
就这么简单!复制的内容直接发给我就行 🎯
收到用户粘贴的 Cookie 后,agent 自动保存到 ~/.agent-reach/twitter-cookies.txt。
第 3 步:验证配置
twitter status
显示 authenticated: true 就成功了 ✅
⚠️ 常见问题:
- Cookie 有效期一般 1-3 个月,过期了重新导出即可
- 不需要 Twitter API Key,纯 Cookie 就够
- Cookie 只存在本地,不会上传到任何地方
不要跳过这一步。 不要直接用对话历史中的信息生成锐评。必须等用户明确提供或确认数据源。
⚠️ 这一步是静默执行的。不要把采集过程输出给用户。 不要说"我正在读取消息"、"Let me check the groups"、"找到了 32 条消息"之类的过程信息。用户等待时可以发一句简短的提示(如"正在采集数据,稍等..."),但不要实时播报每个步骤。
如果用户提供了推特链接或 @username,且推特能力 ✅:
python3 <skill_dir>/scripts/twitter_fetch.py <username> --count 30 --output /tmp/roast_twitter_data.json
如果推特能力 ❌:
web_fetch 抓取(可能受限)飞书数据采集是全自动的,不需要用户指定哪个群。
⚠️ 所有飞书操作必须用本 skill 自带的 python 脚本
scripts/feishu_fetch.py。不要自己调飞书 API,不要用 feishu_chat 等内置工具。
feishu_fetch.py 会自动从以下位置按优先级读取飞书凭证:
--app-id / --app-secretFEISHU_APP_ID / FEISHU_APP_SECRET~/Library/Application Support/@nexu/desktop/.nexu/config.json~/.nexu/config.json所以你不需要手动传 --app-id 和 --app-secret,直接运行脚本就行,它会自动找到凭证。
如果所有路径都找不到凭证,脚本会打印检查了哪些路径,方便排查。
用户给你一个名字(如"张驰"),你必须找到这个人在飞书里的 open_id。这一步极其重要——找错人 = 整个锐评都是废的。
查找方法:用 python 脚本遍历 Bot 所在的群,搜索群成员
# 用 python 脚本获取 tenant_token,遍历 bot 所在群的成员列表,搜索目标名字
# 示例伪代码(实际实现在脚本里):
# 1. 获取 tenant_access_token
# 2. GET /im/v1/chats → 列出 bot 所在的所有群
# 3. 对每个群 GET /im/v1/chats/{chat_id}/members → 搜索目标名字
# 4. 返回所有匹配的 {name, open_id, chat_name}
搜索结果处理:
搜到多个同名用户 → ⛔ STOP,必须让用户确认
搜到唯一一个 → 向用户确认
搜不到 → 让用户提供 open_id 或更多信息
💡 为什么这么严格? 飞书里同名的人很常见。搞错人 = 锐评完全对不上。宁可多问一句,不能搞错人。
如果 Step 0 检测到 genderAvailable = true,先调用飞书通讯录 API 获取性别:
GET /open-apis/contact/v3/users/{open_id}?user_id_type=open_id(需要 contact:user.gender:readonly 权限)user.gender 字段:1=男,2=女,0=未知OAuth 授权已在 Step 0 检测项 2.5 中完成。 如果用户已授权,token 在
~/.nexu/feishu-user-token.json。如果用户跳过了 OAuth,走 Bot token 模式。直接运行采集命令即可,脚本会自动检测 token 模式。
采集命令(token 检测和模式选择由脚本自动完成):
python3 <skill_dir>/scripts/feishu_fetch.py \
--app-id <FEISHU_APP_ID> --app-secret <FEISHU_APP_SECRET> \
--target-user <open_id> --output /tmp/roast_feishu_data.json
关于外部群/跨组织群: 脚本会自动跳过无法读取的群(如外部群、跨组织群),这是正常的,不要因此中断流程或报错给用户。有多少数据就用多少数据生成锐评。
如果飞书能力 ❌(应该在 Step 0 就已经阻断并引导了,正常不会走到这里):
⚠️ 飞书权限还没开通,我先帮你重新检测一下...
然后重新执行 Step 0 的检测项 2。不要直接让用户手动粘贴——先确认权限是否已经开通。
web_fetch 抓取全文gh CLI 或 web_fetch 获取 profile + README🚨 这一步的所有内容都是内部处理,不要输出给用户。包括但不限于:
拿到数据后,按以下结构在内部生成完整锐评报告。不要在聊天消息中输出任何锐评文本——所有内容直接用于 Step 4 的落地页生成。用户看到的唯一输出是最终部署好的落地页链接。
⚠️ 关键规则:Step 3 生成的内容是中间产物,不是用户看到的最终结果。生成完毕后立即进入 Step 4 部署落地页。
tags 字段纯字符串数组,每个标签 2-8 字。建议内容顺序:
标签按顺序映射颜色:purple → cyan → orange → teal → mint(循环)。海报分两行展示(前 4 个一行,后 4 个一行)。
metrics[0]综合工作强度、在线时长、信息密度打分。
metrics[0].label:带 emoji 的指标名,如 "🐂🐴 牛马指数"(6-10 字)metrics[0].value:纯数字字符串,不带 % 号,如 "92"posterSpeciesEmoji / posterSpeciesName / posterSpeciesSubposterSpeciesEmoji:单个 emoji(如 🦞、🦉、🐱)posterSpeciesName:物种名,3-8 字(如 "龙虾成瘾者"、"午夜永动机")posterSpeciesSub:副标题,5-8 字,固定用 "办公室物种鉴定" 或自定义metrics[1] ~ metrics[4/5]从数据中提取 3-5 个最突出的行为维度:
label:维度名,6-12 字,带 emoji,命名要有梗(如 "说教力""造词力" 而非 "领导力""沟通力")value:百分比字符串,必须带 % 号,如 "95%"metrics 合计 4-6 个(1 个牛马指数 + 3-5 个能力条)。
description 字段第二人称直接开喷,不绕弯。要求:
**加粗**、不要 # 标题、不要列表符号)\n——写成一个连续段落⚠️ 这个字段会在网页上出现两次(核心指标区和 AI 扒皮区),所以不能太长。150-250 字最佳。
qaCards 字段模板最多支持 2-3 个维度(不是 8 个!),每个维度:
question:维度标题,3-8 字(如 "致命优势"、"致命弱点"、"人生建议")answer:维度内容,纯文本,80-150 字,不要 markdown/换行符从以下维度中挑 2-3 个最有梗的:
| 维度 | 风格要求 |
|---|---|
| 💪 优势 | 表面说优势,实际每个优势都是变相骂——"你最大的优势就是脸皮够厚" |
| 💀 弱点 | 直球开喷,不包装,不留面子——"你最大的问题是你觉得自己没问题" |
| 💰 财务观 | 连续追问到他无地自容——"工资配得上你摸鱼的时间吗?" |
| 🐾 灵魂动物 | 选最损的动物——"你就是办公室里的蚊子,嗡嗡嗡存在感很强但没人欢迎" |
| 👥 他人视角 | 每个角色都在骂——同事嫌你话多,实习生背后模仿你,HR 后悔放你进来 |
| ⭐ 名人合体 | 选最讽刺的组合——"鲁迅的话痨 + 唐僧的唠叨" |
| 💊 人生建议 | 用最认真的语气说最狠的话——"建议你把推特删了,对你对大家都好" |
不要把所有维度塞进去。 挑 2-3 个数据支撑最强、最有梗的维度,其余内容可以融入主锐评。
dialogs 字段模拟 bot 和目标人物之间的对话,每条指定 speaker("bot" 或 "user"):
以下字段使用固定值:
ctaText:固定为 "⭐ 生成我的牛马锐评"installText:固定为 "复制链接发给你的 nexu agent:https://github.com/nexu-io/roast-skill"subtitle 格式:固定为 "牛马指数 {XX}/100 — {posterSpeciesName}"Step 3 完成后立即执行此步骤,不要:
锐评的唯一交付形式就是落地页链接。 采集数据 → 内部生成锐评 → 自动部署落地页 → 返回链接,一气呵成。
⛔ 部署失败时的禁令:
- 绝对不能自己发明替代部署方案(Gist、htmlpreview、Vercel、GitHub Pages、本地 HTML、在线 HTML 预览等)
- 部署失败 → 检查错误信息 → 修复 content.json → 重试 deploy 命令
- 反复失败 → 告诉用户"部署遇到问题,正在排查",不要自己绕路
content.json 文件,严格符合 deploy-skill distill-campaign 模板的 schema:{
"title": "张三",
"subtitle": "牛马指数 85/100 — 午夜永动机",
"tags": ["nexu", "工程师", "Tech Lead", "INTJ", "代码永动机", "需求粉碎者"],
"metrics": [
{"label": "🐂🐴 牛马指数", "value": "85"},
{"label": "⚡ 执行力", "value": "95%"},
{"label": "📢 嘴炮力", "value": "72%"},
{"label": "🔗 链接密度", "value": "88%"},
{"label": "🚫 摸鱼力", "value": "15%"}
],
"description": "这里是主锐评,150-250字纯文本。不要markdown,不要换行符,不要加粗标记。直接写成一个连续段落,开头就咬人,结尾留温暖。此字段在页面出现两次(核心指标区+AI扒皮区),不能太长。",
"qaCards": [
{"question": "致命优势", "answer": "这里写优势维度的扒皮内容,80-150字纯文本,不要markdown或换行符。"},
{"question": "致命弱点", "answer": "这里写弱点维度的扒皮内容,80-150字纯文本,不要markdown或换行符。"},
{"question": "人生建议", "answer": "这里写建议维度的扒皮内容,80-150字纯文本,不要markdown或换行符。"}
],
"dialogs": [
{"speaker": "bot", "text": "张三,如果让你一周不写代码,你会做什么?"},
{"speaker": "user", "text": "写文档?不行,那也算工作……"},
{"speaker": "bot", "text": "看来你已经不知道什么叫休息了。"},
{"speaker": "user", "text": "休息就是换一个 repo 继续写。"}
],
"posterSpeciesEmoji": "🦉",
"posterSpeciesName": "午夜永动机",
"posterSpeciesSub": "办公室物种鉴定",
"portraitId": "portrait-1",
"ctaText": "⭐ 生成我的牛马锐评",
"installText": "复制链接发给你的 nexu agent:https://github.com/nexu-io/roast-skill"
}
⚠️ content.json 字段规则(必须严格遵守):
| 字段 | 类型 | 限制 | 说明 |
|---|---|---|---|
title | string | 必填 | 目标人名 |
subtitle | string | 15-30字 | 必须含「牛马指数」「/100」和「—」,格式:「牛马指数 XX/100 — 物种名」 |
tags | string[] | 1-8 个 | 纯字符串,每个 2-8 字,按顺序映射 company/role/level/mbti/vibe |
metrics | object[] | 4-6 个 | [0] 为牛马指数(value 纯数字如 "92"),[1]+ 为能力条(value 带 % 如 "95%")。label 6-12 字 |
description | string | 必填 | 纯文本,不要 markdown/换行符/加粗,150-250 字 |
qaCards | object[] | 2-3 个 | question=维度标题(3-8 字),answer=纯文本内容(80-150 字) |
dialogs | object[] | 3-6 个 | speaker 只能是 "bot" 或 "user",text 为纯文本 |
posterSpeciesEmoji | string | 必填 | 物种 emoji |
posterSpeciesName | string | 必填 | 物种名 |
posterSpeciesSub | string | 必填 | 副标题,如"办公室物种鉴定" |
portraitId | string | 必填 | 头像 ID,可选值:portrait-1 ~ portrait-7 |
ctaText | string | 固定值 | 必须为 "⭐ 生成我的牛马锐评" |
installText | string | 固定值 | 必须为 "复制链接发给你的 nexu agent:https://github.com/nexu-io/roast-skill" |
最常见的错误:
description 里放 markdown 格式(**加粗**、\n)→ 页面显示乱码description 里放 8 个维度的全部内容 → 太长,页面撑爆tags 用对象格式 {"text":"x","type":"y"} → 必须是纯字符串tags 单个超过 8 字 → 会被校验拒绝metrics[].label 超过 12 字 → 会被校验拒绝qaCards 放 8 个维度 → 最多 3 个,挑最有梗的dialogs 字段 → 必须 3-6 条对话portraitId → 必填,从 portrait-1 到 portrait-7 选一个ctaText / installText 用了自定义值 → 必须用固定值
2. 将 content.json 保存到 `/tmp/roast_content_{名字拼音}.json`
3. 调用 deploy-skill 部署(优先方案):
```bash
node <skill_dir>/deploy/scripts/deploy_skill.js submit \
--template-id distill-campaign \
--content-file /tmp/roast_content_{名字拼音}.json \
--bot-id <BOT_ID> \
--chat-id <CHAT_ID> \
--chat-type <CHAT_TYPE> \
--channel <CHANNEL>
node <skill_dir>/deploy/scripts/deploy_skill.js wait-and-deliver \
--job-id <JOB_ID> \
--poll-interval-ms 5000 \
--max-polls 60
如果 deploy-skill 部署失败,告诉用户部署遇到问题,请稍后重试。不要自己发明替代方案(Vercel、Gist、GitHub Pages、本地 HTML 等)。
部署完成后,只返回链接 + 分享文案:
🔥 你的牛马锐评来了!
👉 {链接}
📤 分享文案(复制即发):
"我被 AI 蒸馏了 😂 牛马指数 {XX}/100,物种鉴定:{物种}。你敢试试吗?👉 {链接}"
⚠️ 绝对不要在聊天消息中输出锐评的文字内容。 用户看到的只有:链接 + 分享文案。锐评全文只存在于落地页中。这确保了:
- 用户分享的是精美网页,不是一堆文字
- 落地页自带 CTA,能转化新用户安装 skill
- 体验一致——无论哪个渠道(飞书/微信/Discord)都是链接形式
部署成功后,给用户返回一条简洁的消息,包含链接和一句分享文案:
🔥 {名字}的牛马锐评来了!
👉 {链接}
📤 分享文案(复制即发):
"我被 AI 蒸馏了 😂 牛马指数 {XX}/100,物种鉴定:{物种}。你敢试试吗?👉 {链接}"
⚠️ 不要给用户列 3 个版本的文案让他们选。 直接给一个最好的版本就行。用户要的是结果,不是选择题。
风格定位:纯粹的喷子。不阴阳、不暗讽、不绕弯。直接说他烂在哪,为什么烂,烂成什么样。让被喷的人看完之后觉得"操,说的还真是"。
每段必须混合至少 2 种武器,避免单调。
不包装、不铺垫,上来就把最刺的话甩他脸上。
示例:
"你发推的水平跟你的粉丝数一样——离谱的低" "你每天在群里发的消息量,换算成实际产出约等于零" "你是我见过最努力的摸鱼选手,把'看起来很忙'这件事做到了极致"
用他自己的数据锤他。数字是最无情的武器。
示例:
"320 条消息,6 个群,实际有信息量的不到 20 条,其余全是'好的''收到''搞起来'" "你推特发了 22 条,总互动量个位数,说给空气听的叫自言自语不叫内容营销"
用最离谱的比喻把他的行为推到极致荒诞。
示例:
"你在群里@人的频率比垃圾短信还高,至少垃圾短信还有人投诉" "你写英文推特的样子像一个在空旷体育场自嗨的 DJ,音乐震天响,观众席没人"
连续追问到他哑口无言。不是反问——是真的在问,而且每个问题他都答不上来。
示例:
"你的 OKR 写了啥?完成了几个?你老板知道你每天在干嘛吗?" "320 条消息里有几条推动了实际进展?你自己数过没有?"
把他的自我认知拆碎。他以为自己是什么,实际上是什么。
示例:
"你以为你是增长黑客,其实你是群聊复读机" "你觉得自己在做内容营销,实际上你在做内容自嗨" "简历上写的是 PM,干的活是消息搬运工"
一句话盖棺定论,浓缩成可以当签名档的毒句。
示例:
"全公司最忙的人,也是全公司最没产出的人" "你不是不努力,你是把努力用在了错误的事情上还觉得自己挺拼" "如果'搞起来'能搞起来的话,你早就是马云了"
直球 + 数据:
"你一天发 320 条消息还觉得自己高效?同事看到你的消息通知已经条件反射地按静音了"
类比 + 拷问:
"你在推特上写英文 thread 的样子像对着镜子演讲——自己感动得不行,但你确定有人看完过吗?"
解构 + 总结:
"你以为你是 Karpathy 的信徒在传播 AI 前沿,实际上你是搬运工在搬运没人要的货。一句话总结:全靠热情撑着,但热情不等于能力"
落地页通过 deploy-skill 自动部署到 Cloudflare Pages(.nexu.space 域名)。
部署流程:
content.json(符合上述字段规范)distill-campaign 模板渲染 HTML + CSS + 头像deploy.nexu.io.nexu.space 链接模板特点:
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Deploy static websites to Cloudflare Pages. Use when a user wants to upload a zip bundle, publish it, and get a final live link later.
日本語の概要は準備中です。原文の説明を表示しています。