paste 是一个内容清理与格式化技能,用于把通常来自终端的输出整理成适合粘贴到不同平台的形式。
用途
当用户希望把终端输出、日志或其他文本清理后粘贴到 Slack、Notion、Twitter/X、LinkedIn、邮件、GitHub 或纯文本时,可以使用 /paste。它会去除终端特有的杂讯,并按目标平台的格式规则重新排版。
主要能力
- 读取内容:优先使用用户在提示中提供的内容;否则通过 pbpaste 读取剪贴板;两者都为空时询问用户要粘贴什么。
- 解析目标平台:支持 plain、slack、notion、twitter/x、linkedin/li、email、email rich/html、github/gh、markdown/md、html 等目标。若目标不明确会询问用户。各目标的具体规则位于 references/destinations.md。
- 密钥扫描:在任何清理或复制之前,先按 references/secret-patterns.md 中的模式扫描。若命中,则停止复制,以掩码形式(仅显示前 4 位和后 4 位,如 sk-12...wxyz)报告检测到的类型,并询问用户继续、脱敏(替换为 [REDACTED])还是中止;若无明确回答,默认中止。
- 通用清理:去除 ANSI 转义码(如 \x1b[[0-9;]*[a-zA-Z] 及相关颜色、光标移动、屏幕控制码);去除制表符(╭ ─ ╮ │ ╰ ╯ 等,按上下文替换为 -、| 或直接删除);去除终端提示符痕迹(行首的 $、>、❯、%、# 等);将回车符(\r)替换为 \n 或删除;去除每行行尾空白;将连续 3 个以上空行压缩为 2 个。
- 应用目标规则:读取 references/destinations.md 并应用相应转换。
- 输出:对于 plain、slack、notion、twitter、linkedin、email、github,在聊天中以代码块显示预览,并通过 pbcopy 将干净版本复制到剪贴板;对于 email rich,渲染为 HTML,写入 /tmp/paste-<timestamp>.html 并在浏览器中打开,跳过剪贴板;对于 markdown,直接在聊天中渲染清理后的 markdown,同时将原始 markdown 复制到剪贴板,并询问是否也以 HTML 打开;对于 html,渲染为 HTML,写入 /tmp/paste-<timestamp>.html 并打开,跳过剪贴板。输出后报告一行清理摘要,例如“Stripped 12 ANSI codes, 4 box-drawing chars, 1 prompt artifact. Character count: 248 / 280 (X).”。
- 长度警告:Twitter/X 超过 280 字符时警告并说明超出量;LinkedIn 超过 400 字符时警告(舒适线,非硬限制);其他目标无长度警告。
- 社交目标的 URL 处理:若内容含 URL 且目标为 twitter 或 linkedin,则单独列出 URL(不放入正文),并提醒用户链接应放在 LinkedIn 的第一条评论或 X 的回复中,而非正文。
使用方式
通过 /paste 命令调用,可附加目标平台参数,例如 /paste slack、/paste twitter、/paste html。若目标不明确会询问用户。
适用场景
- 将终端错误日志清理后粘贴到 Slack 或 Twitter/X。
- 将 markdown 表格渲染为 HTML 后粘贴到 Notion 或邮件,保留格式。
- 在引用抓取到的帖子前先清理内容。
- 将输出干净地捕获到笔记文件中。
- 将视频转录或摘要输出按平台重新格式化。
限制
- 密钥检测始终最先运行,宁可偶尔误报也不泄露真实密钥。
- 不同目标使用不同的转换规则,目标参数不可省略。
- ANSI 码对所有目标都会被去除。
- 字符限制会被强制执行,paste 拒绝复制超限输出并提供裁剪策略。
- 社交目标的链接应放在首条评论而非正文。
- HTML 目标在浏览器标签页中打开,而非复制到剪贴板,因为格式化表格和代码块需要渲染后的界面才能保留格式复制。
该技能可与其他技能组合使用,例如 jab-hook、social-fetch、second-brain、watch-video。