Summary
把成文草稿改写成 rednote(小红书)笔记:生成吸睛标题(可带 emoji)、3–5 段短文、话题标签和配图建议。只产出文本并由客户人工发布,不接平台 API。Triggers:「发成小红书」「小红书笔记」「改成 rednote」「rednote 这篇」
soia-team/soia-open-media-content-skills · Archived
把成文草稿改写成 rednote(小红书)笔记:生成吸睛标题(可带 emoji)、3–5 段短文、话题标签和?
npx skills add soia-team/soia-open-media-content-skills --skill soia-media-publish-rednote-card
把成文草稿改写成 rednote(小红书)笔记:生成吸睛标题(可带 emoji)、3–5 段短文、话题标签和配图建议。只产出文本并由客户人工发布,不接平台 API。Triggers:「发成小红书」「小红书笔记」「改成 rednote」「rednote 这篇」
This repository is archived — consider an actively maintained alternative.
将文章、开源项目、品牌 Logo 或?
6 installs将成文草稿改写为带编号、符合字数限制的 X thread,并可按授权存草稿。触发:「发成 X thread」「拆…
4 installs把成文草稿排版成符合微信?
4 installs把 distill 提炼出的观点写成成文草稿。以用户观点为骨、vault 摘抄为料,生成可继续交给 publish 的…
4 installsRelated neighbors and high-traction skills in the same topics — useful to compare before installing.
Publish presentations and web content to GitHub Pages.
1.9K installsPublish and manage research papers on Hugging Face Hub. Supports creating paper pages, linking …
1.4K installsPublish a Webflow site with a plan-confirm-publish workflow. Shows what changed since last publ…
654 installsThis skill should be used when the user wants to "publish an agent", "publish my ADK agent", "r…
160.2K installsPublish a generated CLI to the printing-press-library repo
6K installsMulti-platform social media publishing automation - schedule, post, and track content across Ti…
4.7K installsOther skills from soia-team/soia-open-media-content-skills.
npx skills add soia-team/soia-open-media-content-skills
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
main
Parsed from SKILL.md frontmatter.
Files included with this skill beyond the listing page.
SKILL.md
21,306 B
SUMMARY.md
426 B
把 compose 产出的成文草稿改写成适合 rednote(小红书)的笔记文案。默认在回复中交付 Markdown 文本供客户自行发布;客户当次明确授权时,也可由 Agent 驱动客户已登录的浏览器在创作服务平台 网页端完成整套发布(见「网页端发布实操」)。本 skill 不调用 rednote 私有 API、不使用第三方逆向 上传包、不修改原稿。
从文章中提炼一个明确的分享角度,组织成适合移动端快速阅读的笔记:一个有信息承诺的标题、3–5 段短文、相关话题标签,以及与内容匹配的配图建议。
| 客户想要 | 技能会做 | 客户能看到 |
|---|---|---|
| 把文章发成小红书笔记 | 提炼角度、重写标题和短段落、补充标签 | 一份可复制的 rednote Markdown 文案 |
| 需要视觉素材方向 | 给出封面/配图的主体、构图、文字和比例建议 | 可执行的配图建议;需要时可衔接 soia-media-generate-article-image |
| 自己发布 | 只生成文本与配图建议 | 可直接复制的文案,发布动作由客户完成 |
| 代为发布(需当次授权) | 在客户已登录的浏览器里传图、填文、加话题、挂 Red 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
soia-media-generate-article-image 是可选衔接 skill:需要生成封面或正文位图时,先安装并运行它。soia-media-compose-article-draft 是常见上游产物,但不是安装级强依赖;也可以直接提供任意成文草稿。已登录小红书创作服务平台。凭据始终留在客户浏览器里,本技能不读取、不导出、不存储 cookie。
WorkBuddy 的装载单位是角色化专家而不是插件,npx skills add -a '*' 覆盖不到它,需要单独安装,见 docs/install/workbuddy.md。
和会话只留在浏览器里;不落盘、不回显、不写进回执或日志。
私信内容或其它无关个人数据,不转述、不摘录。
每次执行都要回报实际处理范围、标题/段落/标签数量和发布边界,不把“已生成”说成“已发布”, 也不把“已点发布”说成“已确认发布成功”。最低格式:
完成:已将 <输入范围> 改写为 rednote 笔记文本,未调用平台 API。
日志摘要:
- started: <输入来源、目标读者与分享角度>
- processed: <标题 1 个、正文 3–5 段、标签数量、配图建议数量>
- created/updated: <回复文本或客户指定的输出位置>
- skipped/failed: <未处理内容及原因;没有则写“无”>
验证:
- <标题吸引力与事实一致性、段落数量、标签相关性、配图建议核对结果>
问题与下一步:
- 请客户人工复制文案并准备图片后发布;<其它问题,没有则写“无”>
代为发布时追加:
发布回执:
- 授权:<客户原话> | 原创声明:<已开/未开,未开时说明原因>
- 配图:<张数 / 尺寸 / 注入方式>
- 话题:<数量>,逐个下拉确认,编辑器内均为蓝色
- 组件:Red Skill 已挂 <技能名> / 未挂
- 核实:笔记管理页可见 <标题>,<发布时间>(不以 published=true 为准)
soia-media-generate-article-image,但不要声称图片已生成、上传或发布。小红书图文笔记正文上限 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 组件可挂 |
| 关联活动 | 官方活动列表可关联(带档期) |
| 更多设置 | 允许合拍、允许正文复制、公开可见、定时发布 |
| 草稿 | 「暂存离开」进草稿箱;平台自动保存 |
执行要点:
路线二(跨平台复用才用):自产文字卡。仅当同一长文还要发公众号/X 需要同一套卡,或品牌统一系列时才走;小红书单端发布不再用此路线:
soia-media-generate-article-image,deck 先行(00-series-bible 统一基座 → 逐卡 prompt → 落盘后生图);观点/随笔类可用纸质衬线风与品牌深色卡区分。逐卡验字——文字卡整卡都是逐字内容,验收成本按全文字数计。只走官方创作服务平台网页端,用客户自己已登录的浏览器。 以下每条都由 2026-08-06 首次真实 发布验证过,不是设想。
必须有客户当次的明确授权(「帮我发」「开始发布吧」)。「写一篇小红书」只是要文案,不是要 发布。最后点「发布」前把最终状态截图给客户,等一句确认再点——客户不在电脑旁时,这句确认可以 在聊天里给,但不能省略。
内容讲场景、卡片管转化,是同平台闭环。
宿主的文件上传工具可能不可用(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 截图顶替了判定矩阵图混进笔记,靠客户人工发现替换。两条硬规则:
pgrep -f 'codex exec' 为空),期间不派新任务。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 签名逆向),本技能不使用:
并在讨论增加鼠标轨迹模拟等反检测手段——即当前行为会被平台识别。
redskillhub-upload),没有发笔记的官方 API 或 MCP;开放平台的内容接口面向企业/服务商,个人创作者拿不到。
驱动客户自己已登录的浏览器走官方网页端,与自动化脚本的区别在于:凭据不外流、走的是官方界面、 每一步可见可停、发布由客户拍板。这条边界不因工具方便而放宽。
默认输出为 Markdown:
## 标题
<吸睛标题,可带少量 emoji>
## 正文
<第 1 段>
<第 2 段>
<第 3–5 段>
## 话题标签
#主题标签 #具体问题 #方法标签
## 配图建议
- 封面:<主体 / 构图 / 配色 / 文字 / 比例>
- 内页 1:<单一信息点;没有则省略>
列表之外可附事实取舍、禁用词或配图衔接说明。客户未指定落盘位置时,只产出回复文本;指定位置时再写入独立草稿文件,绝不覆盖源文件。不要输出“已发布”的假链接或 API 结果。
published=true 不作为成功判据