Pair programming

A keyboard overlay for remote pair programming

In the same room the navigator can see your hands. Over a share, they can only see the aftermath.

Updated August 5, 20268 min read

What the navigator actually loses

Pairing in person is mostly peripheral vision. The navigator watches your hands as much as the screen, so a jump to definition is not a surprise — they saw the reach for the modifier a beat before the file changed. Remote pairing deletes that channel entirely and leaves only the result.

The result is a specific failure mode, and every remote pair has lived it. The driver presses something, four things happen at once — a file changes, the cursor teleports, a panel opens — and the navigator spends the next twenty seconds reconstructing what caused it instead of thinking about the code. By the time they catch up, the driver has moved on twice.

That reconstruction cost is why fast drivers are often worse pairs than slow ones. Fluency in your own editor reads, over a share, as a series of unexplained state changes. Making the chords visible does not slow you down; it stops your speed from costing the other person the thread.

Where it changes the session

Navigation

Jumps stop being teleports

Go-to-definition, jump-to-symbol and back-navigation move the file out from under the navigator. Seeing the chord turns a teleport into a move they can follow and repeat.

Refactoring

Multi-cursor stops looking like magic

Column selection and multi-cursor edits are the single hardest thing to follow over a share. The keycaps make the difference between a trick and a technique the navigator can adopt.

Tooling

The parts nobody documents

Command palette, quick-open, run-last-test, terminal toggle. Nobody writes these down for the team, so they only ever spread by being seen.

Rotation

Mob sessions with a fast rotation

In mob programming the driver changes every few minutes and every driver has different muscle memory. An overlay makes each rotation legible to the other four people.

Set up as the driver

Control, Option and M shown as mechanical keycaps
⌃⌥Mswitch to All Keys when the typing is the point
  1. 01

    Give the editor the whole picture

    Share the display rather than the editor window. A share scoped to a single application window carries that window's content, and the overlay is a separate window drawn above it — so a window share can drop the keys entirely while your side looks correct.

  2. 02

    Choose Shortcuts Only, not All Keys

    You are typing code for most of the session, and the navigator does not need a keycap for every character of a variable name. Shortcuts Only draws the combinations that move state and stays silent through ordinary typing. ⌃⌥M flips it if you hit a stretch where the typing itself is the point.

  3. 03

    Turn off standalone modifiers

    Pairing involves a lot of half-pressed chords and abandoned reaches. Leaving standalone modifiers on means a bare Command tap flashes a keycap every few seconds, which is exactly the kind of flicker that makes a pair ask you to turn the thing off.

  4. 04

    Put it under the editor, not over the code

    Bottom-centre or bottom-right clears the gutter, the minimap and most panel layouts. The eight edge presets cover the usual spots and ⌃⌥P opens a full-screen drag editor with snapping for anything else. Each display keeps its own saved placement.

  5. 05

    Agree on a size with the navigator

    They are the one reading it, on their monitor, at whatever scale your share arrives. Ask once at the start of the session and adjust with ⌃⌥= and ⌃⌥-, which resize the overlay without opening Settings.

Reading modes for a pairing session

The reading mode decides how the overlay behaves during a burst of activity, and pairing produces a lot of bursts. Latest is the right default for the same reason it suits teaching: each chord gets its own moment and is replaced by the next.

SituationModeWhy it fits
Ordinary driving, navigator following alongLatestOne combination at a time, replaced on the next press — matches the pace of talking through what you are doing
Demonstrating a chain of chords deliberatelyHorizontal HistoryA row of recent keycaps means the navigator can still see step one while you are on step three
Sessions where real typing is the subjectStacked HistoryContinuous typing is grouped into readable fragments instead of a stream of loose letters

Two honest caveats before you rely on it

Command, Shift and K shown as mechanical keycaps
⌘⇧Khand the overlay over when you swap roles
  • The overlay draws what your Mac receives. If your pairing tool lets the navigator take control of your machine, whether their synthetic key events are drawn depends entirely on how that tool injects them — test it in a throwaway session rather than assuming either way.
  • Show KeyPress runs on macOS 14 or later and nowhere else. If half your pair is on Windows or Linux, only the Mac side can display keys.
  • There is no plugin for Tuple, Zoom, Meet or anything else, and no integration to configure. That is the point: anything capturing the display captures the overlay.
  • It shows your keys, never the navigator's. Each machine draws its own input, so a two-way session needs the app on both Macs.
  • While macOS Secure Input is active — a sudo prompt in a terminal with Secure Keyboard Entry, a password field, a vault unlock — the keyboard visualization is cleared and a short Keyboard hidden — Secure Input banner appears in its place.

Sources and further reading

Product details and guidance were checked against these first-party pages on August 5, 2026. Re-check current listings before making an install or high-stakes decision.

FAQ

Questions people ask

Does the navigator need to install anything?

No. They are watching a video stream of your screen, and the overlay is part of that picture. Only the person driving needs the app, on the Mac they are sharing.

Will an overlay slow down a fast driver?

It does not change how you type — it draws what you already pressed. The thing that actually saves time is the navigator not having to interrupt and ask what just happened.

Does it work with Tuple, Pop, CodeTogether or VS Code Live Share?

There is no integration with any of them. Tools that stream a display show the overlay like any other window. Collaborative editing sessions that sync the document rather than the screen show only the document, so nothing drawn on your display travels with it.

We rotate drivers every ten minutes — is that a problem?

No, each machine has its own settings and its own overlay. The incoming driver toggles theirs with ⌘⇧K when they take over, and the outgoing one turns theirs off the same way.

Continue the topic