CleanShot X Alternative That Understands What's On Screen

ComparisonsAugust 22, 20269 min readBy PinVari
CleanShot X Alternative That Understands What's On Screen

CleanShot X is the gold standard for Mac screenshots—scrolling capture, annotations, zero-friction sharing. But it treats your screen as a grid of pixels. PinVari is the layer above: you point at a UI element and speak, and it resolves the named accessibility element (role, label, frame) with a confidence score, then hands that resolved instruction to your AI coding agent or bug tracker. Most developers assume a better screenshot tool solves the "my agent keeps fixing the wrong button" problem—it doesn't, because screenshots waste Claude Code tokens without telling the agent which element you mean.

Why CleanShot X users hit a wall with AI coding agents

CleanShot X excels at capturing and annotating what you see—scrolling captures, pixel-perfect cropping, OCR text extraction, cloud sync, video recording. If you're filing a Slack bug report or tweeting a UI critique, it's unbeatable at $29 one-time.

The gap appears when you're working with Claude Code, Cursor, or Codex. You screenshot a form, circle a broken dropdown, and paste it into the chat. The agent sees pixels and your arrow. It can't programmatically identify that the dropdown is AXPopUpButton with title "Country Selector" at frame {x:420, y:180, width:200, height:32} in the settings window's toolbar. Claude Code can't see your screen unless you give it structured context—a screenshot alone forces the agent to guess from visual similarity, and that guess is often wrong.

CleanShot X wasn't built to feed coding agents. It was built to replace the default macOS screenshot shortcuts with something delightful. PinVari starts where CleanShot X stops: after you've circled something, PinVari tells you what you circled with a confidence score and hands the named element to your agent.

Key

CleanShot X captures the appearance of your screen. PinVari captures the structure—the named UI elements, their roles, and their relationships—plus your spoken instruction, all on-device.

How PinVari resolves the named element (the technical moat)

When you press ⌥⌘A in PinVari, hold to mark a region, and speak "make this dropdown show provinces when Canada is selected," here's what happens on-device:

  1. Screenshot the display at native resolution and draw your freehand mark (lime ink, not forced ellipses).
  2. Transcribe your voice on-device (Apple's SFSpeechRecognizer with timestamps for each word).
  3. Resolve the element under the circled region via macOS Accessibility API (AXUIElementCopyElementAtPosition at the centroid of your mark). This returns the exact role (AXPopUpButton), title ("Country"), value ("United States"), frame in screen coordinates, and parent chain up to the window.
  4. Compute confidence (0.0–1.0) based on mark overlap with the element's frame and whether you dwelled on it while speaking. Marks ≥0.8 confidence resolve automatically; below that, PinVari asks "Did you mean the Country dropdown?"
  5. Bind deictic words ("this", "that") to the pointer's location at the instant you said them (a timestamped trail).
  6. Read the window's full text via the AX tree (not OCR) and the browser's real URL (AXWebArea attribute) if it's a Chromium/WebKit window.
  7. Fallback to OCR (on-device Vision framework) only for AX-blind surfaces like canvas elements or some Electron apps that lazy-load their accessibility tree.

The named element (not a pixel guess) goes to your agent via the local MCP server (claude mcp add pinvari) or files to Linear/GitHub with the circled region as an attached crop. How AI agents know which UI element you mean is by getting the AX role and frame, not by looking at a screenshot.

Tip

PinVari's overlay is always topmost, so a naive hit-test would resolve to PinVari's own window. The engineering detail: chainExcludingSelf walks the on-screen window list (via CGWindowListCopyWindowInfo) and hit-tests the real app underneath. Electron/Chromium build their AX trees lazily, so PinVari sets AXManualAccessibility and retries (~150ms) until a labeled element appears.

Feature comparison: CleanShot X vs PinVari

FeatureCleanShot XPinVari
Screenshot capture✅ Area, window, scrolling, fullscreen✅ Point-and-speak spatial regions
Annotations✅ Arrows, text, shapes, blur, numbering✅ Freehand marks with ink trail
OCR text extraction✅ On-device Vision OCR✅ Fallback for AX-blind surfaces
Named element resolution❌ Pixels only✅ AX role/title/frame + confidence
Voice transcription✅ On-device, timestamped per word
AI agent integration✅ MCP server for Claude/Cursor/Zed
Bug tracker routing✅ Linear, GitHub, Slack with crops
Video recording✅ With audio, GIF export
Cloud sync✅ CleanShot Cloud❌ (on-device by default)
Pricing$29 one-time$39 launch (first 500), then $59
PlatformmacOS 10.15+macOS 14+ (Sonoma), Intel + Apple Silicon

CleanShot X is the better screenshot tool. PinVari is the better spatial-capture-to-agent tool. If you're shipping features with Claude Code and filing bugs to Linear, you need element-aware context, not just prettier pixels.

When CleanShot X is still the right choice

CleanShot X remains unmatched for:

  • Scrolling captures of long web pages or documents (PinVari doesn't auto-scroll).
  • Video screen recordings with audio (PinVari is voice + screenshot, not video).
  • Cloud sharing via CleanShot Cloud with expiring links (PinVari doesn't upload by default).
  • Teams without AI agents who just need fast annotation and Slack/email sharing.

If your workflow is "screenshot → annotate → share to Slack," CleanShot X at $29 is the better deal. If your workflow is "point at broken UI → tell Claude Code what's wrong → fix it," PinVari at $39 launch price routes the resolved element to your agent so it doesn't guess wrong.

Heads up

PinVari requires macOS 14+ (Sonoma) because it relies on AXManualAccessibility and newer Accessibility API enhancements. CleanShot X runs on macOS 10.15+ (Catalina). If you're on an older OS, CleanShot X is your only option here.

How PinVari routes to coding agents (the MCP layer)

After you finish marking and speaking, PinVari surfaces the capture in a dark notch island HUD and a light Command Center window. From there, you route it to:

  1. AI coding agent via MCP: claude mcp add pinvari installs a local server (127.0.0.1, no internet). The agent calls pinvari_next_instruction and receives a JSON payload with the resolved element path (window → toolbar → popUpButton "Country"), the spoken instruction, the region circled, and a screenshot cropped to that region. The MCP server for AI agent screen context runs on-device and never uploads your screen.
  2. Bug tracker (Linear, GitHub, Slack): PinVari creates a draft with the spoken instruction as the title, the cropped screenshot attached, and the element details in the body.
  3. Shareable page: a local HTML file with the screenshot, transcription, and element metadata—no cloud upload unless you choose to host it.

The agent marks the instruction done with pinvari_mark_done, which closes the capture in the Command Center. This is the workflow CleanShot X can't replicate because it doesn't resolve the named element or integrate with agent tools.

Voice interaction: why point-and-speak beats paste-and-type

PinVari's default hotkey is ⌥⌘A (press-to-toggle). Hold it down, circle or point at any UI element, speak your instruction, then press ⌥⌘A again or hit ⏎ to finish. ⌥⌘V is voice-only (no marking). The transcription happens on-device via Apple's Speech framework—no API keys, no upload.

The interaction mirrors push-to-talk voice for Claude Code on Mac (tools like Wispr Flow prove this is a paid habit at ~$12–15/mo). PinVari borrows the same muscle memory and aims it at spatial UI feedback instead of general chat.

CleanShot X has keyboard shortcuts for capture types (area, window, scrolling) but no voice layer. If you're already speaking to your agent, adding spatial pointing to that voice command closes the loop—your hands never leave the keyboard except to mark the screen.

Pricing: one-time vs subscription, and what you get

  • CleanShot X: $29 one-time for the app. CleanShot Cloud (optional) is $8/month or $96/year for 1TB storage and team sharing.
  • PinVari: $39 one-time for the first 500 launch licenses, then $59. No subscription for the core app. Team seats available (volume pricing on request). Distributed as a notarized Developer-ID DMG (not Mac App Store—the MAS sandbox forbids the global hotkey CGEventTap and reading other apps' AXUIElement).

Both respect the Mac power-user preference for one-time purchases over rentals. PinVari's higher price reflects the engineering cost of AX element resolution, on-device transcription, and MCP server integration—features that require ongoing macOS API maintenance as Apple ships updates.

Key

PinVari is on-device by default—no API keys, no uploads. You bring your own AI agent (Claude Code, Cursor, Codex, Zed). CleanShot Cloud is optional for CleanShot X; PinVari has no cloud component unless you route to a web-based tracker like Linear.

Limitations PinVari shares with all AX-based tools

The macOS Accessibility API exposes UI structure for apps that implement it. Some surfaces are AX-blind:

  • Canvas-based apps (Figma, some games) where the AX tree is empty or incomplete—PinVari falls back to on-device OCR, which returns text but not named elements.
  • Lazy-loaded Electron trees (Slack, VS Code before focus)—PinVari sets AXManualAccessibility and retries, usually succeeding in ~150ms.
  • Dynamic web content that rebuilds the DOM after page load—PinVari's snapshot is from the moment you marked, not live-updated.

CleanShot X doesn't face these issues because it only captures pixels. PinVari's OCR fallback means you still get text even when AX fails, but the confidence score will be lower (typically 0.5–0.7) because the named element is missing.

FAQ

Is PinVari a screenshot tool like CleanShot X?

PinVari screenshots the region you mark, but its purpose is to resolve the named UI element and route the instruction to an AI coding agent or bug tracker. CleanShot X is a full-featured screenshot utility with annotations, video, and cloud sync. PinVari is narrower—it's a spatial-capture tool for developers working with agents. If you need scrolling captures or video, CleanShot X is still the tool for that.

Can I use PinVari without an AI coding agent?

Yes. You can route captures to Linear, GitHub, or Slack directly, or export them as shareable HTML pages. The MCP server integration is optional—PinVari works standalone for filing bugs with point-and-speak commands. The agent layer is the moat, but the bug-filing workflow is valuable on its own.

Does PinVari replace CleanShot X or complement it?

Complements. CleanShot X handles general screenshots, video, and cloud sharing. PinVari handles element-aware spatial captures for coding agents and structured bug reports. Many users will run both: CleanShot X for everyday screenshots, PinVari when working with Claude Code or filing bugs to Linear.

Why is PinVari more expensive than CleanShot X?

CleanShot X is $29 because it's a mature product with a large user base and simpler technical scope (pixels + annotations). PinVari is $39 launch/$59 regular because it maintains AX element resolution across macOS updates (Apple changes the Accessibility API frequently), on-device voice transcription, MCP server integration, and confidence scoring. The narrower use case (developers + agents) supports a higher price for fewer buyers.

Does PinVari work on Intel Macs?

Yes. PinVari supports Apple Silicon and Intel Macs running macOS 14+ (Sonoma). CleanShot X runs on older macOS versions (10.15+), so if you're on Catalina or Big Sur, CleanShot X is your only option here.

Can PinVari capture scrolling screenshots like CleanShot X?

No. PinVari captures the visible screen at the moment you mark and speak. If you need scrolling captures of long pages, CleanShot X is the better tool. PinVari's strength is resolving the exact element you pointed at, not stitching multiple screens together.

Hand your agent the exact element

PinVari resolves what you point at into a named, executable instruction — on-device, no keys, your own agent. If you run Claude Code, it is one command.

claude mcp add pinvari
Get PinVari — $39 →