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

Locant for Mac

Point, don't describe.

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
## Locant capture (fix)
Image: ~/Pictures/Locant/…
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.

## Locant capture (fix)
Image: ~/Pictures/Locant/locant-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

Locant 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, run the app again. Locant finds the same element, captures it when it looks different, and keeps every iteration with the diff beneath. Show before & after is in the menu bar.

Settings that look like Settings

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

Locant Settings window, General tab: Accessibility and Screen Recording granted, the floating ball and auto-hide on, a daily update check, version 0.7.0, and the Help rowLocant Settings window, General tab: Accessibility and Screen Recording granted, the floating ball and auto-hide on, a daily update check, version 0.7.0, and the Help row

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 telemetry, no accounts. The one request is a daily check for a newer version on GitHub, and you can turn it off.

Signed and notarized

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

Quiet

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

Paste it, or let the agent fetch it

The payload is plain Markdown, so any agent takes it on paste. Locant is also an MCP server: connect Claude Code, Cursor, or Codex in Settings › Agents, then say what should change and the agent pulls the capture itself, image included. Run end to end, as of version 0.7.1:

Claude CodeFetches the capture over MCP and opens the imageSep 15, 2026
CursorFetches over MCP; Cursor asks once to enable the serverSep 15, 2026
Codex CLIFetches over MCP and views the image at the pathSep 15, 2026
Gemini CLI, AntigravityPaste, or the snippet from Settings › AgentsUntested

Known limitations

Quality follows the app

SwiftUI, AppKit, and the Simulator work well. Electron apps build their tree on first contact, so the first hover can lag.

Custom-drawn UIs expose little

Figma, games, and canvases reach the bottom of the ladder. The payload says so, and still carries the image.

Hover picks the smallest control

It sticks to that control across its padding. Press Option to step to the parent, and again for the next level.