For macOS · Ghostty · iTerm2 · Terminal · kitty · WezTerm · Alacritty · VS Code · Cursor · Zed (terminal panel) · tmux

The last thing your terminal said, ready to paste.

Press a key in any app and the previous command's output is on your clipboard — progress bars gone, errors kept, recognized secrets masked — ready for ChatGPT, Claude, or a teammate. Even while the command is still running.

Download for macOS $29, free for 14 days or type lo  ·  anywhere ⌃⌥⌘C

macOS 14+, no card. Unzip, drag Lastout to Applications and open it. Click Set Up, open a new terminal tab and run any command, like ls. Then press ⌃⌥⌘C. Tabs already open aren't recorded; if something's off, run lo doctor.

Not recorded: Warp, JetBrains IDE terminals and Emacs terminals. In tmux or screen, press ⌃⌥⌘L, run lo in the pane, or press ⌃⌥⌘C from another app; with the terminal itself in front, the shortcut doesn't reach panes yet.

~/code/app — zsh
❯ pnpm build
Progress: resolved 1342, reused 1338, downloaded 4
✓ 812 modules transformed.
warn  Browserslist: caniuse-lite is outdated
[████████████░░░░░░░░] 62% 
vite v6.2.0 building for production...
API_KEY=sk-proj-9f2Xq…7Lw loaded from .env
✗ Build failed in 4.31s
error TS2322: Type 'string' is not assignable
  to type 'number'.  src/cart/total.ts:42:7
  … 3,180 more lines …
❯ █
⌃⌥⌘C copied
`pnpm build` · exit 1 · 41.2s · ~/code/appMarkdown
✓ 812 modules transformed.
warn  Browserslist: caniuse-lite is outdated
API_KEY=[REDACTED:api-key] loaded from .env
… [3,060 lines omitted] …
✗ Build failed in 4.31s
error TS2322: Type 'string' is not assignable
  to type 'number'.  src/cart/total.ts:42:7

Showing 240 of 3,200 lines (head, errors and tail).
How it works

Your terminal already knows. Lastout remembers.

01

Exactly what you saw

Each command's output is replayed like your terminal drew it: progress bars collapse to their last frame, colors and cursor tricks disappear, wide characters and emoji stay intact.

02

Long output, made short

3,000 lines become the head, the detected errors with their context as far as the budget allows, and the tail — within a budget an AI can read. --mode full when you want every line that was recorded, each up to 2,000 characters.

03

Recognized secrets masked first

Recognized API keys, tokens, passwords, private keys and connection strings are redacted before anything is copied — matched on the text as your terminal showed it, so a key split by colour codes is still caught. When a command starts with op, vault or a similar tool, its output isn't stored; in a chain like cd x && op read it still is. Recordings on disk are kept as-is; the masking happens when output is read.

Where copying by hand falls apart

Still running, far away, or full-screen.

04

Still running? Copy it anyway

The dev server that just threw an error doesn't have to stop. ⌃⌥⌘C or lo --running copies its output so far, cleaned up like any other.

05

Over ssh, too

lssh server records every command on the remote host one by one — with nothing installed there but three small shell scripts and a marked block in the rc file.

06

Even full-screen programs

man, less, htop, vim: Lastout copies the last screen they showed instead of nothing.

On your Mac

Four ways to keep it one glance away.

07

Beside the notch

A Dynamic Island–style strip shows what runs and how the last command went. Hover it and it grows into every terminal.

08

A bubble anywhere

A small pill floats above every app. Drag it wherever it stays out of your way; it opens toward the side with room.

09

A tab on the edge

A slim tab grows out of the side of the screen. Rest on it for the latest commands; grab its grip to move it.

10

Or just the menu bar

Nothing on screen at all: the menu bar icon, and ⌃⌥⌘L opens the terminals in the middle.

For coding agents

“Wait for my build, then fix it.”

Claude Code, Codex, Cursor and other agents can read your terminals through a built-in MCP server — wait for a command running in another window, search past output, read just the errors. Read-only, with recognized secrets redacted on every read.

I'm running the tests in my other terminal. Wait for them and fix whatever fails.
On it.

wait_for_command · pytest -x · exit 1 · 2m 14s

get_command_output mode=errors · 38 of 2,904 lines

`test_checkout_total` fails because total() returns a string. Fixing cart/total.py line 42…
Privacy

Stays on your Mac until you paste it or connect an agent.

Recordings aren't uploaded

The app has no analytics and no account. Recordings live in a private folder on your Mac. The app connects only to check for updates and, about every 15 minutes, to verify your trial or license; neither sends anything you recorded.

Recognized secrets masked

Recognized secrets are masked in every copy of recorded output and every agent read through MCP. The rules know known formats, not every secret, and MCP has no way to turn them off. An agent that also has a shell runs as you: it could run lo --no-redact or read the recordings on disk, like any file you own.

Pause or forget

lo pause --for 30m stops recording; commands starting with a space are never stored, not even their text. Printed a password? lo forget deletes that command and zeroes its bytes in the database; a copy printed with lo --print or --json is its own command: remove it with lo forget --id N. An older copy of a command line can linger in the database file's unused space, so change a password typed on the command line.

Gone on its own

200 commands per terminal, 30 days, 500 MB — then it cleans up after itself.

The privacy policy spells out each claim and what each license check sends. Found one that doesn't hold? support@lastout.dev.

Pricing

One price. No subscription.