关于 paste
paste 是用于清理文本并按目标平台重新格式化的技能,适合整理终端输出和待分享内容。它会先检查疑似密钥,并支持剪贴板读写及格式预览。
主要功能
- 01清除 ANSI 与终端提示符
- 02按目标平台调整格式
- 03复制并预览剪贴板内容
- 04检测疑似密钥并询问处理方式
- 05支持 HTML 渲染并在浏览器打开
适用场景
- 01清理终端命令输出后粘贴
- 02将文本改成 Slack 或邮件格式
- 03整理内容以发布到社交平台
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ coreyhaines31/ makerskills --skill paste安装后在 Claude Code 中输入/paste确认已加载。
附带文件references/destinations.mdreferences/secret-patterns.md
详细介绍
/paste — 为任意目标清理内容
清理终端输出(ANSI、框线字符、提示符伪影等),并根据目标平台的规则重新排版。默认读取剪贴板,将内容写回剪贴板,并在聊天中预览。
第 1 步 — 获取内容
按以下顺序:
- 如果用户在提示词中提供了内容(直接粘贴,或引用对话中较早的内容),使用该内容。
- 否则,读取剪贴板(命令如下)。
- 如果两者都为空,询问用户要粘贴什么。
各平台的剪贴板命令(读取 / 写入):
| 平台 | 读取 | 写入 |
|---|---|---|
| macOS | pbpaste | pbcopy < "$f" |
| Linux(Wayland) | wl-paste -n | wl-copy < "$f" |
| Linux(X11) | xclip -selection clipboard -o | xclip -selection clipboard < "$f" |
| Windows | powershell Get-Clipboard -Raw | powershell "Get-Content -Raw '$f' | Set-Clipboard" |
$f 是第 6 步写入流程中创建的临时文件。始终从文件复制,绝不要使用 heredoc 或 echo。
没有剪贴板(远程、无头或聊天机器人 Agent):跳过剪贴板,从提示词中获取内容,并将清理后的文本放在代码围栏中返回。
第 2 步 — 解析目标
| 调用方式 | 目标 |
|---|---|
/paste | 纯文本(默认) |
/paste plain | 纯文本 |
/paste slack | slack |
/paste notion | notion |
/paste twitter 或 /paste x | |
/paste linkedin 或 /paste li | |
/paste email | email(纯文本) |
/paste email rich 或 /paste email html | email(富文本/HTML) |
/paste github 或 /paste gh | github |
/paste markdown 或 /paste md | markdown 渲染 |
/paste html | 渲染为 HTML 文件并在浏览器中打开 |
如果有歧义,请提问。各目标的规则见 references/destinations.md。
第 3 步 — 扫描机密信息
在进行任何清理或复制前,根据 references/secret-patterns.md 中的模式进行扫描。
如果匹配到任何内容:
- 停止。 暂不复制。
- 报告检测到的内容,并对值进行遮蔽(仅显示前 4 个和后 4 个字符,例如
sk-12...wxyz)。 - 询问:“检测到内容中有 [类型]。要继续、脱敏(替换为
[REDACTED]),还是中止?” - 如果没有明确答复,默认中止。
第 4 步 — 通用清理
从内容中移除:
- ANSI 转义码 —
\x1b\[[0-9;]*[a-zA-Z]及相关代码(颜色代码、光标移动、屏幕控制) - 框线字符 —
╭ ─ ╮ │ ╰ ╯ ╞ ╡ ╤ ╧ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ ━ ┃ ┏ ┓ ┗ ┛等。根据上下文替换为更简单的等效字符(-、|)或直接移除。 - 终端提示符伪影 — 行首的
$、>、❯、%、#(当它们是看起来像 shell 提示符的行中第一个非空白字符时) - 回车符(
\r)— 替换为\n或删除 - 行尾空白
- 多余空行 — 将连续 3 行或更多空行合并为 2 行
第 5 步 — 应用目标规则
阅读 references/destinations.md 并应用相应的转换。
步骤 6 — 输出
剪贴板写入流程(所有写入剪贴板的目标):
- 使用 Agent 的文件写入工具,将清理后的内容写入临时文件,例如
/tmp/paste-<slug>.txt。绝不要通过 shell heredoc 或echo传递内容:Agent 执行环境可能会将 heredoc 自动换行(约 70 个字符)并为每行添加缩进,导致粘贴内容错乱,而聊天中看起来却正常。 - 使用步骤 1 中的写入命令从文件复制内容。
- 验证往返结果。 读取剪贴板内容并与文件比较,例如
pbpaste | cmp -s - "$f" && echo match(替换为对应平台的读取命令;在 Windows 上使用powershell "(Get-Clipboard -Raw) -eq (Get-Content -Raw '$f')")。如果不匹配,报告问题并改为在代码围栏中显示文本。 - 根据读回的内容生成聊天预览,而不是根据原本想复制的内容。凭记忆生成预览,是复制内容损坏却看起来正常的原因。
- 验证完成后删除临时文件。文件可能包含用户复制的任何内容,包括通过了机密信息扫描的文本。
| 目标 | 输出行为 |
|---|---|
| plain / slack / notion / twitter / linkedin / email / github | (a) 在聊天中的代码围栏内显示预览。(b) 使用上述剪贴板写入流程;预览以读回的内容为准。 |
| email rich | 渲染为 HTML,写入 /tmp/paste-<timestamp>.html,然后在浏览器中打开(macOS 上使用 open,Linux 上使用 xdg-open,Windows 上使用 start)。跳过剪贴板(用户从浏览器复制,以保留富文本格式)。 |
| markdown | 直接在聊天中渲染清理后的 Markdown(大多数 Agent 界面都支持渲染)。同时使用上述写入流程将原始 Markdown 复制到剪贴板。询问:“也要以 HTML 格式打开吗?”——如果要,则写入文件并打开。 |
| html | 渲染为 HTML,写入 /tmp/paste-<timestamp>.html,然后在浏览器中打开。跳过剪贴板。 |
输出后,用一句话总结清理了哪些内容(例如,“移除了 12 个 ANSI 代码、4 个框线字符、1 个提示词伪影。字符数:248 / 280(X)。已验证剪贴板往返结果。”)。
长度警告
Twitter 和 LinkedIn 有实际字符数限制。用户说过“让我自己删减”,不要拒绝,也不要自动截断。
- Twitter/X:超过 280 个字符时发出警告,并注明超出字符数。
- LinkedIn:超过 400 个字符时发出警告(这是建议上限,并非硬性限制)。
- 其他目标:不提示长度警告。
社交平台目标的 URL 处理
如果内容中包含 URL,且目标是 twitter 或 linkedin:
- 单独列出 URL(不要将其包含在正文中)
- 提醒用户:链接应放在首条评论(LinkedIn)或回复(X)中,而不是正文里
- 参阅记忆库中的
makerskills:jab-hook和feedback_social_link_placement.md(Agent 的记忆库,或${MAKERSKILLS_MEMORY:-${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/memory}/)
示例
/paste slack
→ 读取剪贴板,移除 ANSI 代码,将 **bold** 转换为 *bold*,复制到剪贴板并显示预览。
/paste twitter
[pasted error log]
→ 使用粘贴的内容(忽略剪贴板),移除所有内容,在字符数达到 412/280 时发出警告,复制内容,并询问用户要自行删减还是选择其他目标。
/paste html
[pasted markdown table]
→ 将表格渲染为 HTML,并在浏览器中打开。用户可以选择并复制到 Notion / email,同时保留格式。
/paste
[pasted output with sk-anthropic-key in it]
→ 停止。“发现疑似 Anthropic API 密钥:sk-an...3kf9。要继续、编辑以隐藏密钥,还是中止?”
配合使用
jab-hook— 当 MCP 路径不适用时,清理要粘贴到 Typefully 草稿中的内容;还会对 X / LinkedIn 目标强制执行链接位置规则social-fetch— 在引用抓取的帖子到草稿或简报之前进行清理second-brain—paste输出可以直接整理到raw/note-<slug>.md,供日后汇编watch-video— 转录 / 摘要输出通常会经过paste,以便针对不同平台重新排版
质量说明
- 剪贴板写入流程不可省略。 文件 → 从文件复制 → 读回并比较 → 从读回的内容生成预览。来源:2026-07-31,通过 heredoc 管道复制的内容发布后出现了硬换行和缩进,而聊天预览看起来很干净;发现问题的是用户,而不是验证流程。
- 始终先检测机密信息。 在进行任何格式处理或目标逻辑之前,
paste会扫描sk-*、AKIA*、xoxb-*、JWT 格式的字符串和长十六进制令牌。发现任何匹配项时,都会提示用户确认后再继续。偶尔误报也好过泄露真正的密钥。 - 根据目标进行转换,而不是一刀切。 Slack 使用
*bold*;LinkedIn 使用 Unicode 样式的粗体;电子邮件使用 HTML。同一输入可以有 9 种有效输出。目标标志不可省略。 - 所有目标都会剥除 ANSI 代码。 终端转义序列(如
\033[31m)在源终端以外的任何地方都会显示为乱码。 - 强制执行字符数限制,而不只是发出警告。 X 限制为 280 个字符,LinkedIn 限制为 3000 个字符,Twitter 限制为 25000 个字符;对于超出限制的输出,
paste会拒绝复制,并提供缩减方案。 - 社交平台目标的链接应放在首条评论中——而不是正文中。当目标为
twitter或linkedin时会强制执行此规则。相关说明记录在记忆存储中的feedback_social_link_placement.md。 - HTML 目标会在浏览器标签页中打开,而不是写入剪贴板。 格式化表格和代码块需要在渲染后的界面中选中并复制,才能保留格式。将原始 HTML 复制到剪贴板会导致内容在 Notion/电子邮件中显示为乱码。