paste
Original:🇺🇸 English
Translated
When you want to clean and reformat content (usually from your terminal) for pasting into Slack, Notion, Twitter/X, LinkedIn, email, GitHub, or plain text. Strips ANSI codes, box-drawing chars, terminal prompt artifacts, and applies destination-specific formatting. Default input is the clipboard (read via `pbpaste`); default output is both the clipboard (`pbcopy`) and a chat preview. Triggers on "/paste", "/paste [destination]", "clean this for X," "format for slack/notion/twitter/linkedin/email/github," "render as markdown," "paste-ready," "strip formatting," "make this copy-pastable." Default destination is plain. Also scans for secrets (API keys, tokens, .env values) and warns before copying anything sensitive.
5installs
Added on
NPX Install
npx skill4agent add coreyhaines31/makerskills pasteTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →/paste — Clean content for any destination
Cleans terminal output (ANSI, box-drawing, prompt artifacts, etc.) and reformats per destination rules. Reads clipboard by default, writes back to clipboard + previews in chat.
Step 1 — Get the content
In order:
- If the user included content in the prompt (pasted, or referenced from earlier in the conversation), use that.
- Else, read clipboard:
pbpaste - If both empty, ask the user what to paste.
Step 2 — Parse destination
| Invocation | Destination |
|---|---|
| plain (default) |
| plain |
| slack |
| notion |
| |
| |
| email (plain) |
| email (rich/HTML) |
| github |
| markdown render |
| render to HTML file + open in browser |
If ambiguous, ask. Per-destination rules live in .
references/destinations.mdStep 3 — Scan for secrets
Before any cleaning or copying, scan against patterns in .
references/secret-patterns.mdIf any match:
- Stop. Don't copy yet.
- Report what was detected with the value masked (first 4 + last 4 chars only — e.g. ).
sk-12...wxyz - Ask: "Spotted [type] in the content. Continue, redact (replace with ), or abort?"
[REDACTED] - Default to abort if no clear answer.
Step 4 — Universal cleaning
Strip from the content:
- ANSI escape codes — and related (color codes, cursor movement, screen control)
\x1b\[[0-9;]*[a-zA-Z] - Box-drawing chars — etc. Replace with simpler equivalents (
╭ ─ ╮ │ ╰ ╯ ╞ ╡ ╤ ╧ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ ━ ┃ ┏ ┓ ┗ ┛,-) or remove entirely depending on context.| - Terminal prompt artifacts — leading ,
$,>,❯,%(when first non-whitespace on a line that looks like a shell prompt)# - Carriage returns () — replace with
\ror delete\n - Trailing whitespace per line
- Excess blank lines — collapse 3+ consecutive blank lines to 2
Step 5 — Apply destination rules
Read and apply the relevant transform.
references/destinations.mdStep 6 — Output
| Destination | Output behavior |
|---|---|
| plain / slack / notion / twitter / linkedin / email / github | (a) Show preview in a code fence in chat. (b) Copy clean version to clipboard via |
| email rich | Render to HTML, write to |
| markdown | Render the cleaned markdown directly in chat (Claude Code renders it). Also copy raw markdown to clipboard. Offer: "Open as HTML too?" — if yes, write and open. |
| html | Render to HTML, write to |
After output, report a one-line summary of what was cleaned (e.g., "Stripped 12 ANSI codes, 4 box-drawing chars, 1 prompt artifact. Character count: 248 / 280 (X).").
Length warnings
Twitter and LinkedIn have practical limits. the user said "let me trim" — don't refuse or auto-truncate.
- Twitter/X: warn if >280 chars. Note the overage.
- LinkedIn: warn if >400 chars (comfort line, not hard limit).
- Other destinations: no length warning.
URL handling for social destinations
If the content has URLs and destination is twitter or linkedin:
- Surface the URLs separately (don't include them in the body)
- Remind the user: links go in a first comment (LinkedIn) or reply (X), not the body
- See and
makerskills:jab-hook~/.claude/memory/feedback_social_link_placement.md
Examples
/paste slack→ Reads clipboard, strips ANSI, converts to , copies to clipboard, shows preview.
**bold***bold*/paste twitter
[pasted error log]→ Uses pasted content (ignores clipboard), strips everything, warns at 412/280 chars, copies, asks if the user wants to trim or pick a different destination.
/paste html
[pasted markdown table]→ Renders table as HTML, opens in browser. the user selects + copies into Notion/email with formatting preserved.
/paste
[pasted output with sk-anthropic-key in it]→ Stops. "Spotted what looks like an Anthropic API key: . Continue, redact, or abort?"
sk-an...3kf9Composes with
- — clean output for pasting into Typefully drafts when the MCP path doesn't fit; also enforces the link-placement rule for X/LinkedIn destinations
jab-hook - — clean a fetched post before quoting it in a draft or newsletter
social-fetch - —
second-brainoutput can be captured cleanly intopastefor future compilationraw/note-<slug>.md - — transcript / summary output often flows through
watch-videofor platform-specific reformattingpaste
Notes on quality
- Secret detection runs first, always. Before any formatting or destination logic, scans for
paste,sk-*,AKIA*, JWT-shaped strings, and long-hex tokens. Prompts before proceeding on any hit. Better to false-positive occasionally than to leak a real key.xoxb-* - Destination-aware transforms, not one-size-fits-all. Slack wants ; LinkedIn wants unicode-styled bold; email wants HTML. Same input, 9 different valid outputs. The destination flag is not optional.
*bold* - ANSI codes get stripped for every destination. Terminal escapes (etc.) render as garbage everywhere except the source terminal.
\033[31m - Character limits are enforced, not warnings. X at 280, LinkedIn at 3000, Twitter at 25000 — paste refuses to copy over-limit output and offers a trim strategy.
- Links go in first comments for social destinations — not the body. Enforced when destination is or
twitter. Documented inlinkedin.~/.claude/memory/feedback_social_link_placement.md - HTML destination opens in a browser tab, not the clipboard. Formatted tables + code blocks need a rendered surface to select-and-copy from with formatting preserved. Copying raw HTML to the clipboard produces garbage in Notion/email.