A Screenshot Isn't a Report: Point, Number, Redact

One full working day. That is what the last unmarked bug screenshot cost us, and the fix itself took ten minutes.

We open the ticket. We read "it's broken, see attached." What arrives is a full-screen capture, 2560 by 1440 pixels, no markings. Somewhere in that frame sits a button that didn't render. Finding out which button is the day. The fix is the ten minutes.

"See attached" reads like a report. The attachment says otherwise. A bare capture hands the reader a search problem and calls it communication.

This post walks the workflow that closes the gap: point at the defect, number the repro steps, redact the secrets, all in the ten seconds between seeing the bug and pasting it into Jira. The tool is Heretic Lazy Shot on macOS and Windows.

Anatomy of a bug screenshot that closes tickets

Reports that come back fixed on the first pass share three properties.

  1. The problem is pointed at. An arrow or a box says here. Nobody scans the whole frame.
  2. The sequence is numbered. ① clicked this, ② selected that, ③ this exploded. The repro steps live on the image and match the numbered list in the ticket text.
  3. Nothing leaks. No customer emails in the table behind the dialog. No API token in the visible terminal. No internal numbers in the browser tab strip.

Miss the first and you get "which button?". Miss the second and you get "can't reproduce". Miss the third and the bug report becomes the incident.

The law generalizes. A bug report fails on missing information, not on missing features. The reporter knows where it hurts. Every ticket that leaves that knowledge unmarked buys a round trip, and the round trip costs more than the fix.

Capture it right the first time

Small capture decisions compound downstream.

  • Region capture with a 4× magnifier loupe. Live pixel coordinates and a crosshair make the crop exact: the broken component, nothing around it. The live width×height label tells the developer the rendered size before they ask.
  • Window capture with fuzzy search. Type part of the app or window title, hit Enter, get that window alone. No desktop clutter. No second monitor spilling into the shot.
  • Capture delay, 0–2000 ms. The classic bug state is a hover tooltip or an open dropdown, and it closes the moment the hotkey fires. Set a one-second delay, open the menu, and the shot lands with the menu still open.

None of this is polish. The capture exists to serve the annotation. A tight crop gives the arrow room to do its job.

Number the steps with the Counter tool

After a region capture, the annotation toolbar is already open. Press N for the Counter tool and click in sequence. Each click drops an auto-numbered circle, ①, ②, ③, exactly where the action happened. The ticket text then reads:

  1. Opened the filter panel (①)
  2. Selected "last 30 days" (②)
  3. Table renders empty despite the count badge showing 47 (③)

Ten seconds of clicking replaces a paragraph of spatial prose. "The dropdown near the top right, under the second toolbar" is not a repro step. It's a riddle.

Four letters carry the whole markup: N numbers the steps, A points the arrow at the defect, R draws the box, T adds text when a value needs calling out. Fifty steps of undo sit behind all of them, so a misplaced click costs one keystroke.

A screenshot isn't a report. It's a frame. The pointer is what makes it a report.

For recurring passes: markers that aren't baked in

A one-off bug needs the Counter tool and nothing more. Recurring passes are a different load: QA sweeping the same five checkpoints on every release, a design review hitting the same layout zones on every page. For those, Lazy Shot keeps a second layer. Numbered markers as metadata.

Markers live beside the image, not in its pixels. Move them after placing. Each one takes a keyword label: "contrast", "spacing", "copy". H hides and shows the whole set. They undo independently of drawings. And they save as a preset, so a standard five-point review layout becomes one click on every later screenshot instead of five careful placements.

Drawing bakes into the pixels. A marker doesn't. Drawings are ink on the print. Markers are notes on the recipe card, and the dish survives either way. Because markers never mutate the original, one capture carries a QA pass and a design pass without either destroying the other. Agents use the same mechanism. More below.

Blur the secrets before the shot leaves the machine

Redaction is where screenshots leak. A token in the terminal scrollback. A customer's name in the row behind the dialog. A staging URL with an embedded key. Two tools handle it.

  • Blur (B). Pixelates a region. Right for faces, names, mildly sensitive UI.
  • Spoiler (S). Heavy grid-based pixelation, the Telegram-style mosaic. Use it for anything that must be unrecoverable: tokens, keys, credentials. Pattern-matching attacks like Depix can sometimes reverse a light blur on text. When in doubt, Spoiler.

The heavier tool is not paranoia. It's the amount of damage that matches the data. Redaction depth deserves its own piece.

The structural point sits underneath both tools: redaction happens locally, before sharing. Lazy Shot has no cloud and no telemetry, so the unredacted original never leaves the disk. Once an image uploads, redaction turns into a negotiation with someone else's disk. That's not a privacy guarantee. It's logistics.

Paste it where the ticket lives

The last ten seconds, for Jira, GitHub, or Linear.

  • Copy to clipboard (Cmd/Ctrl+C) straight from the annotation overlay. Paste into the Jira description, the GitHub issue, or the Linear comment. All three take pasted images inline.
  • Drag and drop the file into the browser or the Slack thread.
  • Quick Save (Cmd/Ctrl+S) saves without a dialog, into the default folder, under a filename pattern with the tokens {date}, {time}, {datetime}, {timestamp}, and {ext}. The default is Screenshot {datetime}.{ext}. Attachments sort themselves.

Give the capture a keyword in the library too: login-bug, filter-empty. Three weeks later the ticket reopens, and finding the original is a two-second search instead of a dig through forty files named like Screenshot 2026-07-27 14-03-11.png. Deleted shots go to soft delete, so cleanup isn't destructive either.

And for the person fixing the bug: pin the screenshot always on top, and the before-state floats over the editor while they work.

The agent variant: let Claude do the markup

Everything above also runs through an AI agent. Lazy Shot ships a built-in MCP server, and the bug-report loop maps onto it directly.

Flip to the broken app. Flip back to Claude. One sentence: capture the window I was just in, call it nav-bug, put a numbered marker on the broken element.

That last part works because of the Window Activity Tracker, an opt-in flag that remembers which window had focus last. Opt-in. Not default.

The agent captures headlessly. No overlay, just a flash notification. It names the shot and places the markers on a forked copy. The original stays pristine. The annotated file path comes back ready to paste into the ticket.

The agent never touches the original. Zero pixels move.

The MCP server exposes 23 tools, and the screenshot MCP server deep-dive walks them. The bug-report loop is the most direct first use.

The ten-second checklist

Before the screenshot hits the ticket:

  • Cropped to the relevant window or region, not the whole desktop
  • Defect pointed at (arrow or box)
  • Repro sequence numbered with the Counter tool
  • Secrets Spoiler-ed, PII blurred
  • Keyword assigned so future-you can find the shot

Ten seconds of markup against a day of "which button?" round trips.

That's not ritual. It's arithmetic.


Heretic Lazy Shot: screenshot, annotation, and beautification for macOS and Windows, built for humans and for agents. One-time license, €14.99 for one device or €29.99 for three. No subscription, no account, no telemetry. Activation is online with an offline grace period. The trial ships inside the download, no card. Try Lazy Shot →

Related posts