Made for the Palantir Product Design Show & Tell. v0.4 built in 3 hours. See the commits ›

Deixis for Mac

Agents don't understand this. Deixis does.

Point at one element in any app. Your coding agent gets the element, not a screenshot.

macOS 15 or laterApple silicon and IntelFreeNo account

Capture
button · captureButton
Hover shows the element and its identifier. Nothing is written until Enter.

Three seconds, start to paste

1
twice

Point

Double-tap Control, or click the ball. Hover, then click the element.

2
make this rounded↩ copy · esc cancel

Note

Type what should change. Enter captures. Esc cancels, nothing written.

3
## Deixis capture (fix)
Image: ~/Pictures/Deixis/…
button · id=captureButton

Paste

Into Claude Code, Cursor, or Codex. The image path comes first.

Point, up close

The overlay over Calculator. Every frame is a real capture.

The overlay over Calculator: the 8 key outlined in blue, with the label button · Eight beneath it

Hover

The element under the cursor and its identifier: button · Eight.

With Option held, the whole keypad is outlined and the label reads group · CalculatorKeypadView

Option

Steps to the parent: group · CalculatorKeypadView. Again for the next level.

A dragged frame around the number keys with a 161 by 167 point readout

Drag

A frame, with every element inside it listed for the agent.

After the click, a note field under the highlighted key reads make this key bigger, with Return to copy and Escape to cancel

Note

Click, say what should change, Return. Esc cancels, nothing written.

The ball

A glass disc that lives at the edge of the screen and stays out of the way until you reach for it.

The ball docked: a half disc tucked into the screen edge

Docked

After two seconds without use it tucks into the nearest edge, part of it showing.

The ball awake: a full glass disc on the desktop

Awake

Move toward it and it comes back out. Drag it anywhere.

The ball ready: the pointing hand appears on the disc

Ready

Under the cursor the hand appears. Click to point.

The ring: Snap, Text, Color and Cut around the ball, revealed by pressing and holding

The ring

Press and hold for Snap, Text, Color, and Cut. Release on one.

What your agent receives

Enough to find the right file on the first try.

## Deixis capture (fix)
Image: ~/Pictures/Deixis/deixis-simulator-20260913-153012-k7q2.png
App: Simulator (com.example.myapp) · Window: iPhone 17 Pro
Captured: 2026-09-13 15:30 · Image region: 450×130 pt @2x (element + 40 pt)

### Target element
button · id=captureButton
Frame: x=43 y=894 w=370 h=50
Path: application > window > group > group > button#captureButton

### Note
make this rounded, match the other pills
Image firstTerminal agents get only the text on paste. The path leads, so the agent can open the PNG.
Fix or referenceYour own apps are inferred: the Simulator, anything built on this Mac, anything signed with your Team ID.
Identifier and pathThe accessibility identifier is what the agent greps for. The path says where in the tree it sits.
On disk tooA PNG and a JSON sidecar in Pictures, tagged in Finder, validating against a published schema.

When there is no element

Deixis steps down a ladder and says which rung it reached.

1button · id=captureButton

Element with a declared identifier. The best case.

2button "Save changes" · no identifier

Label only. The nearest labeled neighbors are named too.

3Elements in frame (6)

Drawn frame. Drag on the overlay; everything inside is listed.

4Text in image · Nearby

Text and neighbors. Words in the image are recognized.

5No element information available

Image. The payload says so, and still carries your note.

Four more, on the same gesture

Press and hold the ball for the ring.

Snap

A region or a window, as a PNG.

Keeps a file

Text

Recognized lines, to the clipboard.

Keeps nothing

Color

Hex, rgb(), hsl(), or SwiftUI Color. sRGB or Display P3.

Keeps nothing

Cut

The subject on a transparent background.

Keeps a file

See what changed

After the agent's edit, choose Capture after. Deixis finds the same element in the running app, captures it again, and shows both with the diff beneath.

Settings that look like Settings

The one place Deixis is a window. Every default works on first launch.

Deixis Settings window, General tab: capture hotkey set to double-tap Control, a toggle to adjust the selection before capturing, and per-action hotkeys for Snap, Text, Color, and Cut

Private by design

Two permissions, both explained

Accessibility reads what is under your cursor. Screen Recording captures the pixels. There is no third prompt.

Nothing leaves the machine

No network, no telemetry, no accounts. Captures stay in your Pictures folder and go to the Trash after 30 days unless pinned.

Signed and notarized

Every build is signed with a Developer ID and notarized by Apple. A dmg, not the App Store.

Quiet

No Dock icon. Idle memory under 30 MB. Nothing pulses, bounces, or waits for you.

Works where you paste

The payload is plain Markdown, so any agent takes it on paste. Whether it also opens the image, as of version 0.5:

Claude CodeReads the PNG from the path, check pendingExpected to work
CursorReads the pathUntested
Codex CLIViews the image at the pathUntested
Gemini CLI, AntigravityUntestedUntested

Known limitations

Element quality follows the app's accessibility

SwiftUI, AppKit, and the iOS Simulator work well. Electron and Chromium apps build their tree on first contact, so the first hover can take half a second.

Custom-drawn UIs expose little

Figma, games, and canvases usually reach the bottom of the ladder. The payload says so.

Hover picks the smallest real control

Press Option to step to the parent.