You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make FlashPaste a faster overlay-capable agent surface
Constraint: Preserve the bash fallback and existing clipboard intent behavior while adding overlay checks and reducing daemon hot-path process work.
Rejected: Commit generated agent state or the local references checkout | They are runtime/reference artifacts, not project deliverables.
Rejected: Per-paste tmux, screenshot, xclip, and trigger-log fan-out | It keeps avoidable subprocess and filesystem work on the hot path.
Confidence: medium
Scope-risk: broad
Directive: Keep overlayd diagnostics structured and keep hot-path probes throttled or opt-in.
Tested: cargo fmt --manifest-path rs/Cargo.toml --all --check; RUSTC_WRAPPER= cargo clippy --manifest-path rs/Cargo.toml --workspace --offline -- -D warnings; RUSTC_WRAPPER= cargo test --manifest-path rs/Cargo.toml --workspace --offline; bash -n bin/flashpaste-doctor.sh bin/tmux-paste-dispatch.sh bin/flashpaste-screenshot-preload.sh install.sh bootstrap.sh packaging/build-deb.sh packaging/build-rpm.sh; git diff --cached --check; bash bin/flashpaste-doctor.sh
Not-tested: Live Wayland layer-shell draw on this non-Wayland shell; AGENTS-release-check still reports historical missing tags/releases for older v1.10-v1.27 history.
-`flashpaste-overlayd`, a Wayland screen-annotation daemon for agent-driven highlights, pointers, labels, and fade-out TTLs.
14
+
- Three MCP overlay tools in `flashpaste-mcp`: `highlight_region`, `point_at`, and `clear_annotations`.
15
+
- GNOME-compatible overlay fallback path for environments without layer-shell support.
16
+
- Multi-monitor overlay support so annotations map to the visible output geometry instead of assuming a single screen.
17
+
18
+
### Changed
19
+
20
+
-`flashpaste-doctor` now runs 17 core checks, up from the previous 13, including overlay daemon, socket, compositor, and draw-path probes.
21
+
22
+
### Notes
23
+
24
+
- Compositor support matrix: wlroots compositors with layer-shell get the native layer-surface path; GNOME/Mutter uses the fallback path; other compositors should run `flashpaste-overlayd --probe` before relying on MCP annotations.
25
+
- GNOME fallback caveat: annotations are still programmatic and click-through by design, but Mutter does not expose the same layer-shell semantics as wlroots, so placement and stacking should be treated as best-effort until the probe and quickstart workflow pass on the target desktop.
28
26
29
27
## [1.26] - 2026-05-19
30
28
@@ -172,7 +170,8 @@ Release-tag policy: every `vX.Y` commit on `main` must be tagged and have a matc
172
170
173
171
Initial commit: sub-120 ms bash hot path for image-paste into GNOME Wayland TUIs.
Copy file name to clipboardExpand all lines: README.md
+44-6Lines changed: 44 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,17 @@ The missing clipboard glue between **GNOME · kitty · tmux** and your terminal
13
13
14
14
<imgsrc="assets/hero-animated.svg"alt="Animated diagram: a screenshot leaves the PrtScr key, travels through a glowing pipe past the mutter, kitty, and tmux layers, and lands in a Claude Code terminal as an attached image in 15 milliseconds — visualizing how FlashPaste pastes screenshots into terminal LLM agents on GNOME Wayland"width="100%">
15
15
16
+
<!--
17
+
overlay-demo.gif slot — see "Agent-driven screen annotation" section below
18
+
and `docs/overlay-quickstart.md#record-the-demo-gif`. The asset lives at
19
+
`assets/overlay-demo.gif` (≤5 MB, 10–15 s). Uncomment the <img> tag below
20
+
once the file is committed; until then the placeholder keeps the README
21
+
free of broken images.
22
+
-->
23
+
<!--
24
+
<img src="assets/overlay-demo.gif" alt="Demo GIF: user pastes a screenshot into Claude Code, Claude replies 'the bug is in this function' and a red box appears around the relevant code in the user's editor, the user clicks straight to it — driven by flashpaste-mcp's highlight_region tool and flashpaste-overlayd" width="100%">
@@ -130,22 +141,39 @@ FlashPaste is **MIT** — fork it, vendor it, ship it.
130
141
## flashpaste-mcp — agents get a first-class API
131
142
132
143
<divalign="center">
133
-
<imgsrc="assets/mcp-flow.svg"alt="Animated sequence diagram of flashpaste-mcp: a terminal LLM agent on the left (Claude Code, Codex CLI, Aider) sends four MCP tool calls — take_screenshot, read_clipboard, copy_text, paste_to_pane — along colored lanes to the flashpaste-mcp server on the right"width="100%">
144
+
<imgsrc="assets/mcp-flow.svg"alt="Animated sequence diagram of flashpaste-mcp: a terminal LLM agent on the left (Claude Code, Codex CLI, Aider) sends MCP tool calls including take_screenshot, read_clipboard, copy_text, paste_to_pane, highlight_region, point_at, and clear_annotations along colored lanes to the flashpaste-mcp server on the right"width="100%">
134
145
</div>
135
146
136
-
`flashpaste-mcp` is a drop-in [Model Context Protocol](https://modelcontextprotocol.io) server. Any MCP-aware client ([Claude Code](https://www.anthropic.com/claude-code), [Codex CLI](https://github.com/openai/codex), [Aider](https://github.com/Aider-AI/aider), [Continue](https://github.com/continuedev/continue), …) picks it up automatically and gets four tools:
147
+
`flashpaste-mcp` is a drop-in [Model Context Protocol](https://modelcontextprotocol.io) server. Any MCP-aware client ([Claude Code](https://www.anthropic.com/claude-code), [Codex CLI](https://github.com/openai/codex), [Aider](https://github.com/Aider-AI/aider), [Continue](https://github.com/continuedev/continue), ...) picks it up automatically and gets clipboard, screenshot, paste, and screen annotation tools:
|`read_clipboard`| Read the current Wayland selection (text or image) with MIME |
142
153
|`copy_text`| Place text on the clipboard via the stable daemon owner |
143
154
|`paste_to_pane`| Send a paste to a specific kitty/tmux pane by id, even unfocused |
155
+
|`highlight_region`| Draw a temporary rectangle or circle highlight on the user's visible screen |
156
+
|`point_at`| Draw a temporary pointer arrow toward a specific screen location |
157
+
|`clear_annotations`| Clear active overlay highlights, pointers, and labels |
144
158
145
159
Drop it in your client config — see [`docs/architecture.md`](docs/architecture.md#mcp).
146
160
147
161
---
148
162
163
+
## Agent-driven screen annotation
164
+
165
+
Once the agent can *see* your screen (via `take_screenshot`), the next obvious move is to let it *point at things*. `flashpaste-overlayd` is a tiny Rust daemon that paints temporary boxes, arrows, and labels directly on your Wayland screen, driven by three MCP tools that ship in the same `flashpaste-mcp` server — `highlight_region`, `point_at`, `clear_annotations`. Claude reads your screenshot, decides "the bug is in this function," draws a red box around it, and you click straight there. Annotations are click-through by default, fade out on a TTL, and never block your input.
166
+
167
+
```jsonc
168
+
// One MCP call from the agent → red box appears on screen for 4 seconds.
169
+
{"name":"highlight_region",
170
+
"arguments": {"shape":"rect", "x":412, "y":318, "w":280, "h":96, "color":"#ff3b30", "label":"the bug is in this function", "ttl_ms":4000}}
171
+
```
172
+
173
+
Setup, the GNOME caveat, and the recording recipe live in [`docs/overlay-quickstart.md`](docs/overlay-quickstart.md).
174
+
175
+
---
176
+
149
177
## How to install FlashPaste on Linux
150
178
151
179
### One-line bootstrap (any distro)
@@ -160,7 +188,7 @@ Then wire up your dotfiles, reload, and verify:
MIT — see [LICENSE](LICENSE). Built by [@NagyVikt](https://github.com/NagyVikt).
296
324
@@ -313,7 +341,7 @@ If FlashPaste saved you a Wayland headache, a [GitHub star](https://github.com/N
313
341
"@type": "SoftwareApplication",
314
342
"name": "FlashPaste",
315
343
"alternateName": ["flashpaste", "flash-paste"],
316
-
"description": "Sub-15 ms image-paste glue for terminal AI agents (Claude Code, Codex CLI, Aider, llm) on GNOME Wayland. Works around mutter's surfaceless-client clipboard refusal, kitty's map ctrl+v interception, and tmux's bind -n C-v recursion via three progressive performance tiers.",
344
+
"description": "Sub-15 ms image-paste glue and agent overlay for terminal AI agents (Claude Code, Codex CLI, Aider, llm) on GNOME Wayland. Works around mutter's surfaceless-client clipboard refusal, kitty's map ctrl+v interception, and tmux's bind -n C-v recursion via three progressive performance tiers, then lets MCP clients annotate the visible screen with highlight_region, point_at, and clear_annotations.",
@@ -404,7 +442,7 @@ If FlashPaste saved you a Wayland headache, a [GitHub star](https://github.com/N
404
442
"name": "Does FlashPaste include an MCP (Model Context Protocol) server?",
405
443
"acceptedAnswer": {
406
444
"@type": "Answer",
407
-
"text": "Yes. flashpaste-mcp is a drop-in MCP server that any MCP-aware client (Claude Code, Codex CLI, Aider, Continue) picks up automatically. It exposes four tools: take_screenshot (capture via xdg-desktop-portal), read_clipboard (current Wayland selection with MIME), copy_text (place text on the clipboard via the daemon owner), and paste_to_pane (send a paste to a specific kitty or tmux pane by id, even when unfocused)."
445
+
"text": "Yes. flashpaste-mcp is a drop-in MCP server that any MCP-aware client (Claude Code, Codex CLI, Aider, Continue) picks up automatically. It exposes tools for take_screenshot (capture via xdg-desktop-portal), read_clipboard (current Wayland selection with MIME), copy_text (place text on the clipboard via the daemon owner), paste_to_pane (send a paste to a specific kitty or tmux pane by id, even when unfocused), and overlay screen annotation through highlight_region, point_at, and clear_annotations."
0 commit comments