soia-team/soia-open-media-content-skills · Archived

soia-media-publish-rednote-card

把成文草稿改写成 rednote(小红书)笔记:生成吸睛标题(可带 emoji)、3–5 段短文、话题标签和?

First seen Jul 22, 2026

Installation

$ npx skills add soia-team/soia-open-media-content-skills --skill soia-media-publish-rednote-card

Summary

把成文草稿改写成 rednote(小红书)笔记:生成吸睛标题(可带 emoji)、3–5 段短文、话题标签和配图建议。只产出文本并由客户人工发布,不接平台 API。Triggers:「发成小红书」「小红书笔记」「改成 rednote」「rednote 这篇」

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from soia-team/soia-open-media-content-skills.

npx skills add soia-team/soia-open-media-content-skills

Browse all from soia-team/soia-open-media-content-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 3
License licenses
Default branch main
Open issues 0
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Version2.4.1

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 21,306 B
  • docs SUMMARY.md 426 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 4 installs

SKILL.md

soia-media-publish-rednote-card

把 compose 产出的成文草稿改写成适合 rednote(小红书)的笔记文案。默认在回复中交付 Markdown 文本供客户自行发布;客户当次明确授权时,也可由 Agent 驱动客户已登录的浏览器在创作服务平台 网页端完成整套发布(见「网页端发布实操」)。本 skill 不调用 rednote 私有 API、不使用第三方逆向 上传包、不修改原稿。

客户可读说明

这个技能可以做什么

从文章中提炼一个明确的分享角度,组织成适合移动端快速阅读的笔记:一个有信息承诺的标题、3–5 段短文、相关话题标签,以及与内容匹配的配图建议。

客户想要 技能会做 客户能看到
把文章发成小红书笔记 提炼角度、重写标题和短段落、补充标签 一份可复制的 rednote Markdown 文案
需要视觉素材方向 给出封面/配图的主体、构图、文字和比例建议 可执行的配图建议;需要时可衔接 soia-media-generate-article-image
自己发布 只生成文本与配图建议 可直接复制的文案,发布动作由客户完成
代为发布(需当次授权) 在客户已登录的浏览器里传图、填文、加话题、挂 Red Skill 组件,停在发布前请客户确认 每步截图与最终状态;客户说「发布」后才点,发布后回执带笔记管理页核实结果

客户如何使用

  1. 说明“发成小红书”“小红书笔记”或“rednote 这篇”,并提供成文草稿、文件内容或路径。
  2. 如有要求,一并说明目标读者、账号口吻、标题禁用词、是否突出方法/清单/故事,以及想要的配图风格。
  3. Agent 先确定单一分享角度,再输出标题、正文、标签和配图建议;默认不覆盖原稿,客户指定路径时才另存。
  4. 客户人工复制文案、准备图片并发布到 rednote;本 skill 不代替平台后台操作。

依赖与安装

安装(推荐:装整个领域插件,一次装好本仓全部技能):

claude plugin marketplace add soia-team/soia-open-skills
claude plugin install soia-media-content@soia

只要这一个技能时,可用 npx 路线。注意技能会落进共享真源 ~/.agents/skills;若同时装了插件,同一技能会出现两份索引且各自漂移,建议二选一:

npx skills add soia-team/soia-open-media-content-skills -g -a '*' -s soia-media-publish-rednote-card -y
  • 改写流程是纯 LLM,无 scripts、无私有配置、无账号凭据、无 rednote API 依赖。
  • soia-media-generate-article-image 是可选衔接 skill:需要生成封面或正文位图时,先安装并运行它。
  • soia-media-compose-article-draft 是常见上游产物,但不是安装级强依赖;也可以直接提供任意成文草稿。
  • 代为发布需要宿主具备浏览器操作能力(如 Claude in Chrome 一类的浏览器工具),且客户浏览器

已登录小红书创作服务平台。凭据始终留在客户浏览器里,本技能不读取、不导出、不存储 cookie。

  • 没有浏览器能力或客户未授权时,退回默认形态:只产出文本与配图建议。

WorkBuddy 的装载单位是角色化专家而不是插件,npx skills add -a '*' 覆盖不到它,需要单独安装,见 docs/install/workbuddy.md。

私密信息与中间数据

  • 不读取、不导出、不存储账号凭据。代为发布时始终使用客户浏览器已有的登录态,cookie、token

和会话只留在浏览器里;不落盘、不回显、不写进回执或日志。

  • 客户未登录或登录态失效时,如实告知并停下,请客户自行登录,不代填账号密码。
  • 发布过程中的页面截图只用于向客户展示当前状态,不保存到仓库或知识库;截图里若出现账号信息、

私信内容或其它无关个人数据,不转述、不摘录。

  • 配图与草稿属可重建的中间产物,放系统临时目录或客户指定路径;不进仓库,也不写入客户未指定的位置。
  • 代为发布用到的临时本地服务、注入脚本等仅存在于当次运行,用完即停,不留常驻进程。

日志与完成回执

每次执行都要回报实际处理范围、标题/段落/标签数量和发布边界,不把“已生成”说成“已发布”, 也不把“已点发布”说成“已确认发布成功”。最低格式:

完成:已将 <输入范围> 改写为 rednote 笔记文本,未调用平台 API。

日志摘要:
- started: <输入来源、目标读者与分享角度>
- processed: <标题 1 个、正文 3–5 段、标签数量、配图建议数量>
- created/updated: <回复文本或客户指定的输出位置>
- skipped/failed: <未处理内容及原因;没有则写“无”>

验证:
- <标题吸引力与事实一致性、段落数量、标签相关性、配图建议核对结果>

问题与下一步:
- 请客户人工复制文案并准备图片后发布;<其它问题,没有则写“无”>

代为发布时追加:

发布回执:
- 授权:<客户原话> | 原创声明:<已开/未开,未开时说明原因>
- 配图:<张数 / 尺寸 / 注入方式>
- 话题:<数量>,逐个下拉确认,编辑器内均为蓝色
- 组件:Red Skill 已挂 <技能名> / 未挂
- 核实:笔记管理页可见 <标题>,<发布时间>(不以 published=true 为准)

改写规则

1. 先定一个分享角度

  • 从原稿中选一个读者能立即理解的角度:解决一个问题、避开一个坑、复盘一个经历或给出一套方法。
  • 标题、正文、标签和配图必须围绕同一个角度;不要把整篇文章压缩成互不相关的观点清单。
  • 保留原稿事实、限定条件和可核验的来源;不新增未经输入支持的数字、案例、引用或效果承诺。
  • 如果原稿有多个同等重要的主题,先询问客户选择;低风险时选择最清晰的主线,并在回执中说明。

2. 标题

  • 生成 1 个主标题,必要时可附 2 个备选标题供客户选择;主标题要有具体信息承诺或场景冲突,避免空泛的“干货分享”。
  • 可使用少量与语义相关的 emoji,但不能用 emoji 代替关键词,也不能堆叠感叹号、夸张收益或虚假权威。
  • 标题准确反映正文,不标题党式承诺正文没有提供的结果;遵守客户提供的平台禁用词和品牌限制。

3. 正文与标签

  • 正文保持 3–5 段短文,每段只表达一个信息点;开头尽快交代场景/痛点,中间给方法或证据,结尾收束并引导互动。
  • 使用移动端易读的短句、适度换行和具体例子;保留必要的专业词,但解释第一次出现的术语。
  • 话题标签放在正文后,通常给 5–10 个与主题直接相关的标签;从宽主题逐步收窄到具体问题,不添加无关热门标签蹭流量。
  • 如用户未提供账号口吻,采用真诚、具体、可验证的分享语气;不冒充个人经历,不声称亲自使用过未提供的产品或方法。

4. 配图建议

  • 至少给出 1 条封面建议,说明画面主体、构图、主色、文字层级和推荐比例;可按 1:1 小红书方图场景提出建议。
  • 文章有步骤、对比或清单时,可补充 1–3 张内页卡片建议,写明每张卡片承载的单一信息。
  • 建议中的标题、数字和来源必须与文案一致;不把未经验证的事实放到图片文字里。
  • 客户需要实际图片时,说明可以把建议交给 soia-media-generate-article-image,但不要声称图片已生成、上传或发布。

5. 长文形态(正文超 1000 字时)

小红书图文笔记正文上限 1000 字。原稿超限时不要硬删成摘要完事,按长文形态处理,两条路线二选一:

路线一(首选·小红书端):官方「写长文」。以下平台能力来自 2026-08-08 客户全流程实测:

环节 实测结论
入口 创作服务平台 → 发布笔记 → 第三个 tab「写长文」(URL target=article);「新的创作」或「导入链接」
编辑器 富文本:H1/H2、有序/无序列表、引用、划线、插图、表情;实时字数与自动保存
一键排版 粘贴全文后点「一键排版」自动分页成文字卡(实测 1180 字 → 5 张,可逐张预览)
模板族 清晰明朗(黑/白/米)、黑白极简、理性现代、素雅底纹(粉/米/绿/蓝可换色)、文艺清新(可自动生成插画封面)、平实叙事
字数徽章 「全文N字|阅读需X分钟」平台自动生成,不需要也不应该自己画
封面 「封面设置」tab 单独调
标题上限 长文发布页标题 20 字(实测 20/20 顶格)
正文描述 发布页另有 ≤1000 字笔记描述框,与长文内容分开
长文合集 加入/创建长文合集:名称 ≤20、简介 ≤100、封面必填(png/jpg ≤5M,推荐 3:4);支持笔记间快速切换连续阅读
添加组件 与图文笔记同款,Red Skill 组件可挂
关联活动 官方活动列表可关联(带档期)
更多设置 允许合拍、允许正文复制、公开可见、定时发布
草稿 「暂存离开」进草稿箱;平台自动保存

执行要点:

  • 全文在 vault 定稿并核对后才粘贴进平台编辑器;平台上只排版不改稿,改稿回真源。
  • 标题按 ≤20 字拟;描述框放钩子+导读+互动问题,不复制长文开头。
  • 一键排版后选模板(同一合集模板保持一致);讲到技能的长文可挂 Red Skill 组件;关联活动仅在档期与内容相关时挂。
  • 发布前停在提交页等客户当次确认(沿用本技能既有授权规则)。

路线二(跨平台复用才用):自产文字卡。仅当同一长文还要发公众号/X 需要同一套卡,或品牌统一系列时才走;小红书单端发布不再用此路线:

  • 全文逐字上卡:把原稿按知识单元拆成 4–8 张文字卡(封面卡 + 内容卡 + 结语卡),图片承载全文;正文只放钩子、导读(全文讲了哪几件事)与互动问题。
  • 封面卡带字数徽章:「全文约 N 字|阅读需 X 分钟」——知识区验证过的点开样式;N 与 X 按原稿实数计算,不虚标。
  • 卡面样式与产图:走 soia-media-generate-article-image,deck 先行(00-series-bible 统一基座 → 逐卡 prompt → 落盘后生图);观点/随笔类可用纸质衬线风与品牌深色卡区分。逐卡验字——文字卡整卡都是逐字内容,验收成本按全文字数计。
  • 原稿里损坏或不规范的标点(如 ASCII 直引号)上卡时可规范为中文引号,属排版修复;除此之外不改原文一个字。

网页端发布实操

只走官方创作服务平台网页端,用客户自己已登录的浏览器。 以下每条都由 2026-08-06 首次真实 发布验证过,不是设想。

执行前置

必须有客户当次的明确授权(「帮我发」「开始发布吧」)。「写一篇小红书」只是要文案,不是要 发布。最后点「发布」前把最终状态截图给客户,等一句确认再点——客户不在电脑旁时,这句确认可以 在聊天里给,但不能省略。

五步流程

  1. 切 tab:发布页默认落在「上传视频」,必须先点「上传图文」,否则找不到图片上传控件。
  2. 传图:见下方「传图」。
  3. 填标题与正文:标题框与正文框分开点击定位;正文可一次性输入多段,换行会保留。
  4. 加话题:见下方「话题标签必须逐个确认」。
  5. 挂 Red Skill 组件:「添加组件 → 添加 Red Skill」下拉里选「我发布的 → <技能名>」,

内容讲场景、卡片管转化,是同平台闭环。

传图:宿主 file_upload 不可用时的解法

宿主的文件上传工具可能不可用(2026-08-06 实测 Claude in Chrome 的 file_upload 报 paths: expected array, received undefined,四种参数写法全失败)。备用路径按下面顺序,前两条 已验证走不通,不要重复踩:

方案 结果
本地 HTTP 服务器 + 页面 fetch ❌ Chrome 的 Private Network Access 封死 HTTPS 页面访问 localhost;加 Access-Control-Allow-Private-Network: true 标准应答头也不放行,请求根本不发出(服务器日志零记录)
base64 分片注入 ❌ 三张 2160×2880 的图约 1.29M base64 字符,代价过高
合成键盘事件 Cmd+V ❌ 扩展注入的合成键不携带系统剪贴板图像数据,页面收不到 paste 载荷(2026-08-08 实测)
osascript 盲打系统键盘驱动原生文件框 ❌ 禁用——激活的可能是客户的另一个 Chrome 窗口,按键会打进客户正在编辑的页面(2026-08-08 实际风险事件);且原生对话框开着时会挂起该 tab 的 JS 执行
SVG foreignObject + canvas ✅ 图有 HTML 源码时的标准姿势(见下方代码)
系统剪贴板 + Clipboard API ✅ 纯位图(imagegen 直出 PNG/JPG 等无 HTML 源)的标准姿势(见下方代码;2026-08-08 实测 5 张一次成功)

纯位图路线——逐张「osascript 只写剪贴板(无键盘事件,安全)→ 页面读取」,最后一次性注入:

# 每张执行(JPEG 可先压到 ~350KB,剪贴板转 PNG 后约 1.3MB,平台可收)
osascript -e 'set the clipboard to (read (POSIX file "/abs/path/N.jpg") as JPEG picture)'
// 每张执行:读剪贴板存入 window.__files[N](页面须处于聚焦标签;无需任何权限弹窗,实测直读成功)
const items = await navigator.clipboard.read();
for (const it of items) for (const t of it.types) if (t.startsWith('image/')) {
  const b = await it.getType(t);
  window.__files = window.__files || [];
  window.__files[N] = new File([b], 'N.png', {type: t});
}
// 全部就绪后一次注入(input 选 accept 含 png 且 multiple 的那个)
const dt = new DataTransfer();
window.__files.filter(Boolean).forEach(f => dt.items.add(f));
const input = [...document.querySelectorAll('input[type=file]')].find(i => i.multiple && /png/.test(i.accept));
input.files = dt.files;
input.dispatchEvent(new Event('change', {bubbles: true}));

注意:navigator.clipboard.read() 抛 NotAllowedError: Document is not focused 时先激活该标签页再读;新图追加在已有图之后,替换场景是「先传新、后删旧」,删除靠悬停缩略图点右上 ×(每删一张网格前移,重复同一位置即可)。

剪贴板竞态(2026-08-08 实际事故):系统剪贴板是全局共享的——流水线执行期间若有其他自动化任务并行(codex 出图任务验证时会动剪贴板),「写入→页面读取」之间会被插队,实发时一张 codex 截图顶替了判定矩阵图混进笔记,靠客户人工发现替换。两条硬规则:

  1. 串行化:执行剪贴板传图前确认无并行的 codex/自动化任务在跑(pgrep -f 'codex exec' 为空),期间不派新任务。
  2. 逐张读后核验:读回的 File 用 createImageBitmap 比对宽高与来源图一致(如 1080×1440)才落位;不符即重写剪贴板重读,不带病注入。

发布后必须验证正式链接(客户铁律,2026-08-08 定):控制台「更新成功/已提交」≠ 用户拿到。回执必须附「正式链接验证」:打开笔记的对外链接(或搜索入口)确认新内容真实可见;平台在审核期时如实写「已提交,线上仍旧版,过审后切换」,禁止宣称已生效。

配图若由 soia-media-generate-article-image 的 html_render 路径产出,HTML 源码本身就在手上, 可以把它送进页面现场渲染,传输量从 MB 级降到几 KB,且保住 2x 清晰度:

// 1) 把 HTML+CSS 包进 SVG 的 foreignObject,用 data: URL 载入 Image
//    SVG 画布设 2x 尺寸,内部 div 用 transform:scale(2) 保清晰
const svg = '<svg xmlns="http://www.w3.org/2000/svg" width="2160" height="2880">'
  + '<foreignObject width="100%" height="100%">'
  + '<div xmlns="http://www.w3.org/1999/xhtml" style="transform:scale(2);transform-origin:0 0;width:1080px;height:1440px">'
  + '<style>' + css + '</style>' + bodyHtml + '</div></foreignObject></svg>';
const img = new Image();
img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
await img.decode();

// 2) canvas 渲染取 blob(纯内联 SVG 不会污染 canvas,toBlob 可用)
const c = document.createElement('canvas'); c.width = 2160; c.height = 2880;
c.getContext('2d').drawImage(img, 0, 0, 2160, 2880);
const blob = await new Promise(r => c.toBlob(r, 'image/png'));

// 3) 构造 File 注入 input,并派发 change 让前端框架感知
const dt = new DataTransfer();
dt.items.add(new File([blob], '1-cover.png', {type: 'image/png'}));
const input = document.querySelector('input[type=file]');   // accept=".jpg,.jpeg,.png,.webp" multiple
input.files = dt.files;
input.dispatchEvent(new Event('change', {bubbles: true}));

注入器不返回 Promise 结果时:部分宿主的 JS 执行工具不 await 异步返回值(拿到空对象)。 改成两步——先把结果写进 window.__r,再单独读一次该变量。

话题标签必须逐个确认

连续输入 #A #B #C 只有最后一个生效,前面全部退化成纯文本(空格还会被吃掉)。正确做法: 输入一个 #关键词 → 等下拉出现 → 点选其中一项 → 再输入下一个。

验收标志:生效的标签在编辑器里是蓝色,纯文本是黑色。发布前逐个核对颜色。 下拉里带浏览量,可据此在近义标签中选流量更大的那个。

原创声明要单独授权

打开「原创声明」开关会弹出协议窗,需要勾选并同意《原创声明须知》。这属于替客户接受协议条款, 必须单独征得客户同意,不能因为「已授权发布」就顺手勾。客户未表态时保持关闭,发布不受影响。

发布后必须核实

URL 出现 published=true 不等于发布成功,且发布过程可能在草稿箱留下自动存档残留(显示 「草稿箱(1)」属正常)。必须去笔记管理页确认笔记条目真实存在,再报告结果。

不使用第三方发布工具

社区有一批小红书 MCP / CLI(浏览器自动化或 x-s/x-t 签名逆向),本技能不使用:

  • 多数要求交出 cookie 登录态给第三方进程;本技能的原则是凭据留在客户浏览器里。
  • 头部项目自己的 issue 里记录着「小红书封号策略持续收紧,大量第三方工具账号被封」,

并在讨论增加鼠标轨迹模拟等反检测手段——即当前行为会被平台识别。

  • 官方只有 Skill 上传 CLI(redskillhub-upload),没有发笔记的官方 API 或 MCP;

开放平台的内容接口面向企业/服务商,个人创作者拿不到。

驱动客户自己已登录的浏览器走官方网页端,与自动化脚本的区别在于:凭据不外流、走的是官方界面、 每一步可见可停、发布由客户拍板。这条边界不因工具方便而放宽。

输出格式

默认输出为 Markdown:

## 标题
<吸睛标题,可带少量 emoji>

## 正文
<第 1 段>

<第 2 段>

<第 3–5 段>

## 话题标签
#主题标签 #具体问题 #方法标签

## 配图建议
- 封面:<主体 / 构图 / 配色 / 文字 / 比例>
- 内页 1:<单一信息点;没有则省略>

列表之外可附事实取舍、禁用词或配图衔接说明。客户未指定落盘位置时,只产出回复文本;指定位置时再写入独立草稿文件,绝不覆盖源文件。不要输出“已发布”的假链接或 API 结果。

前向测试

  • 未获当次授权时只产出文本,不打开发布页、不进行任何页面写入
  • 传图后页面预览出现对应张数;话题标签在编辑器内均为蓝色(纯文本为未生效)
  • 客户未就原创声明表态时,开关保持关闭,且不勾选任何协议
  • 发布后以笔记管理页的条目为准核实,published=true 不作为成功判据