跳到正文
DEV Community· Arthur031221·· 3 小時前AI 評分58

Blinkling 桌面助手讓 Claude Code 解釋 Ctrl-click 選取的螢幕內容

I built a desktop buddy for Claude Code that explains whatever you Ctrl-click

AI 導讀

Arthur031221 製作 Claude Code 插件 Blinkling,讓用戶按住 Ctrl 點選螢幕上的段落、按鈕或圖片,或拖曳選取區域,再由 Claude Code 提供解釋。3.2.7 版支援自動解釋及引導模式;截圖只在記憶體保留至交給 Claude Code,Blinkling 不會點擊、輸入或控制其他應用程式。

正文

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.

Ctrl-click a paragraph and the answer streams into the chat card beside Blink

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/

來源:DEV Community · dev.to