Say you're reading a dense paragraph in a paper and you want Claude to explain it. The usual route is a screenshot, a switch to the terminal and a paste. Some pages won't even take a link, so there's no shortcut there either.
Blinkling is my attempt to remove those steps. It's a Claude Code plugin that puts a small green character called Blink in the corner of your screen, above every app. Hold Ctrl (Control on a Mac), click a paragraph, a button or a picture, and the pick flies into Blink. A chat card opens beside Blink and the answer streams in. Drag instead of click to take an area.
It's MIT licensed and has no API key or account of its own. Here's how the pieces fit together.
What's in the current version
Version 3.2.7 is the latest. The model, effort and permission pickers on the chat card all work. Auto explain is now a short muttering bubble beside Blink, one or two sentences in your language, and it no longer opens the card. Guide mode puts marks on the page itself with a line of text under each, and Next and Previous scroll to them like links. Blink shows a thinking animation only while the AI is working. Capture is faster, and the chat card closes and Blink turns half transparent while it happens, so the card is never in the shot.
How it talks to Claude Code
There are two parts. A desktop app, an Electron shell, draws Blink and does the looking. Claude Code, signed in on the same computer, does the answering.
Every capture, quick ask, typed message and guide step goes through one session. That session runs the signed-in claude command without a shell and reads the answer as a stream of events, so Blink can show sentences as they arrive. Send, stop, retry and resume all work on that one conversation.
A capture is held in memory until it's been handed to Claude Code, then dropped. Nothing about it is written to the app's data folder. Answers can carry marks in screen coordinates, like a highlight on the thing being explained. The overlay checks that the screen hasn't moved before it draws them, and the model returns data, never HTML or script. Markdown in answers is sanitized before display.
The plugin side
The plugin's .mcp.json starts a small local bridge, bin/blinkling.cjs. It listens on a loopback port (43827 by default, scanning ten) and only lets the optional Chrome and Edge helper in when that helper proves it holds a secret stored locally. The same bridge is an MCP server for Claude Code, so Claude Code can look at the screen when you ask it to. One of its tools samples the screen every 5 to 60 seconds, keeps only the frames that changed and makes no model calls.
The desktop app itself is downloaded by a launcher the first time you run /blinkling:blinkling. The launcher checks the build against a SHA-256 digest pinned in the plugin and installs it atomically. A build whose digest doesn't match is never installed.
How the mirroring works
The chat card and the terminal mirror each other, like Remote Control. Half of that is easy. A prompt you type in the terminal session that started Blink, and its finished answer, appear in Blink's chat on their own.
The other half, Blink's chat showing up in the terminal, uses Claude Code's experimental channels, which only load at startup. So you start Claude Code with:
claude --dangerously-load-development-channels plugin:blinkling@blinkling
Claude Code asks you to confirm once. The flag name is Claude Code's, and it reads scarier than it is. If you skip it, Blink still works and answers from its own session, you just lose the mirror in that direction.
What it doesn't do
Blink only looks and explains. It never clicks, types or controls another app. It refuses to capture while a password field, a password manager or a private window has focus, and the browser helper blanks password and payment fields before anything leaves the page. There's no telemetry and no answer service run by me. What you pick goes to your own Claude Code, so your provider's terms and usage apply.
Some pages are off limits to any browser extension, like browser settings, extension stores and the built-in PDF viewer. On those, Blink answers from the screen alone. Claude Code on a remote host isn't supported, because Blink and Claude Code must share a computer with a screen.
Install
claude plugin marketplace add Arthur031221/Blinkling && claude plugin install blinkling@blinkling
claude --dangerously-load-development-channels plugin:blinkling@blinkling
/blinkling:blinkling
You need Claude Code, signed in. On a Mac, allow Screen Recording once in System Settings, Privacy & Security, and Accessibility once so the Ctrl key can start a pick. The app isn't notarized by Apple and has no paid Windows certificate, so the installer removes the quarantine flag and signs ad hoc, but macOS may still make you choose Open Anyway.
Building it with Claude Code
The repo's first commit is from 2026-10-12, and it's past 630 commits now. The 3.x releases were built by Claude Code in long builder passes, mostly Sonnet 5.5 with Opus 5.5 asked for the hard calls. I direct it and test by hand on a Mac. The demo clips were recorded on Linux in a virtual display, so the Mac is where I look for what those clips miss.
The most useful thing I learned is not to trust the builder's own verdict. A green verify report from the build isn't a result for me. Every release waits for a separate Claude Code session that downloads it, runs it under a virtual display and checks each point again before I call anything fixed.
Where it stands
It works, with limits. I only test by hand on a Mac, so Windows and Linux builds exist but have had less real use.
If you know a nicer way than the channels flag to get a plugin's chat into a live Claude Code session, I'd like to hear it in the comments.
Repo: https://github.com/Arthur031221/Blinkling
Demo page with the install steps animated: https://arthur031221.github.io/Blinkling/

Top comments (0)