Terminal text cleaner
Paste text you copied from Claude Code, Codex or any terminal. It comes back as the paragraphs, lists and tables it was meant to be.
Runs in your browser. Nothing you paste leaves this page.
What it fixes
- Broken lines. A terminal ends every line at the window edge, so a copied paragraph arrives as a stack of short lines. The cleaner joins lines a wrap cut, and only those.
- Agent symbols. Claude Code draws ⏺ before replies and tool calls and ⎿ under tool results, and some tools use ● or ✻. They are removed along with the two-space gutter they sit in. A • that starts a list item is kept, since it's a bullet.
- Padding. Trailing spaces that fill each line to the window width are trimmed.
- Split links and paths. A URL cut at the edge is rejoined without a space, so it works again.
- Box tables. Tables drawn with │ and ─ become Markdown tables, and cells that wrapped onto two lines are merged.
How it decides what to join
It finds the width the text was wrapped at (the longest line) and joins a line to the next one only when the line is full: long, and the next word would not have fit after it. Lists, headings, quotes, code fences and prompts always start a new line, and line-by-line output such as git log, file listings, logs and code is left as it is.
This is the same logic the Unwrap app uses when it can't find the original reply, ported to JavaScript and checked against the app's test copies. It is a heuristic: if a short line was meant to stay short, it stays short, and if something looks wrong you still have your original on the left.
Why terminals copy text like this
A terminal draws characters on a grid. When you select and copy, you get the grid back: hard line breaks where the window ended, the spaces that padded each row, and whatever symbols the program drew in the margin. Here's the longer explanation, with the fixes that work inside Claude Code itself.