"Paste once, run once." — Trimmy flattens those multi-line shell snippets you copy so they actually paste and run.
- Lives in your macOS menu bar (macOS 15+). No Dock icon.
- Watches the clipboard and, when it looks like a shell command, removes newlines (respects
\continuations) and rewrites the clipboard automatically. - Strips leading shell prompts (
#/$) when the line looks like a command, while leaving Markdown headings untouched. - Aggressiveness levels (Low/Normal/High) to control how eagerly it detects commands:
- Low: only flattens when it’s obviously a command. Example: a long
kubectl ... | jq ...multi-line snippet. - Normal (default): balances caution and helpfulness. Example: a
brew update \ && brew upgradecopy from a blog post. - High: flattens almost any multi-line text that could be a command. Example: a quick two-line
ls+cdcopied from chat.
- Low: only flattens when it’s obviously a command. Example: a long
- Optional "Keep blank lines" so scripts with intentional spacing stay readable.
- Optional "Remove box drawing chars (│┃)" to strip prompt-style gutters (any count, leading or trailing) and collapse the leftover whitespace.
- "Paste Trimmed" button + hotkey trims on-the-fly and pastes without permanently altering the clipboard (uses High aggressiveness); shows the target app (e.g., “Paste Trimmed to Ghostty”) and strikes out removed chars in the preview.
- "Paste Original" button + hotkey pastes the untouched copy even after auto-trim.
- Optional "Launch at login" toggle (macOS 13+ via SMAppService).
- Auto-update via Sparkle (Check for Updates… + auto-check toggle; feed from GitHub Releases).
- Uses a marker pasteboard type to avoid reprocessing its own writes; polls with a lightweight timer and a small grace delay to catch promised pasteboard data.
- Safety valve: skips auto-flatten if the copy is more than 10 lines (even on High) to avoid mangling big blobs.
- Low (safer) — needs strong command cues (pipes, redirects, continuations).
Before:After:ls -la \ | grep '^d' \ > dirs.txtls -la | grep '^d' > dirs.txt - Normal (default) — README/blog-ready: handles typical multi-line commands with flags.
Before:After:kubectl get pods \ -n kube-system \ | jq '.items[].metadata.name'kubectl get pods -n kube-system | jq '.items[].metadata.name' - High (eager) — flattens almost anything command-shaped, plus the manual “Paste Trimmed” hotkey always uses this level.
Before:After:echo "hello" print statusecho "hello" print status - Prompt cleanup — copies that start with
#or$are de-promoted when they look like shell commands, e.g.# brew install foo→brew install foo; Markdown headings like# Release Notesremain untouched.
Get the precompiled binary from Releases
- Build:
swift build -c release(Swift 6, macOS 15+). - Bundle:
./Scripts/package_app.sh release→Trimmy.app. - Launch: open
Trimmy.app(or add to Login Items). Menu shows Auto-Trim toggle, Aggressiveness submenu, Keep blank lines toggle, Paste Trimmed/Paste Original actions, and a last-action status.
Use the bundled CLI to trim text without launching the UI:
swift run TrimmyCLI --trim /path/to/file --aggressiveness high --json
Pipe stdin:
pbpaste | swift run TrimmyCLI --trim - --force
Options:
--force/-fforces High aggressiveness--aggressiveness {low|normal|high}--preserve-blank-lines/--no-preserve-blank-lines--remove-box-drawing/--keep-box-drawing--jsonemits{original, trimmed, transformed}- Exit codes: 0 success, 1 no input/error, 2 no transformation, 3 JSON encode error
- Format:
swiftformat. - Lint:
swiftlint lint --fixorswiftlint lint.
- Update version strings and CHANGELOG.
- swiftformat / swiftlint
- swift test
- ./Scripts/package_app.sh release
- ./Scripts/sign-and-notarize.sh
- Verify:
spctl -a -t exec -vv Trimmy.app;stapler validate Trimmy.app - Upload release zip and tag
- Bundle ID:
com.steipete.trimmy(LSUIElement menu-bar app). - Polling: ~150ms with leeway; grace delay ~80ms to let promised data arrive.
- Clipboard writes tag themselves with
com.steipete.trimmyto avoid loops.
- 🟦🟩 CodexBar — Keep Codex token windows visible in your macOS menu bar.
- ✂️ Trimmy — “Paste once, run once.” Flatten multi-line shell snippets so they paste and run.
- 🧳 MCPorter — TypeScript toolkit + CLI for Model Context Protocol servers.
- 🧿 Oracle — Prompt bundler/CLI for GPT-5.1/Claude/Gemini with multi-model support.
MIT


