惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Help Net Security
Help Net Security
P
Privacy International News Feed
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
A
Arctic Wolf
Latest news
Latest news
T
Threat Research - Cisco Blogs
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
月光博客
月光博客
N
News and Events Feed by Topic
Jina AI
Jina AI
博客园 - 司徒正美
WordPress大学
WordPress大学
罗磊的独立博客
雷峰网
雷峰网
AI
AI
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
博客园 - 【当耐特】
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Schneier on Security
Schneier on Security
博客园 - Franky
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cloudbric
Cloudbric
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
Last Week in AI
Last Week in AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News

Hacker News - Newest: "AI"

AI can't read an investor deck AI as an attorney? Student uses ChatGPT, Gemini to sue UW over alleged racial discrimination Hacking MCP Servers in AI Systems – The Rug Pull: Tool Changes After Approval GitHub - MeepCastana/KubeezCut: Free Web based video editor GitHub - GenAI-Gurus/awesome-eu-ai-act: Curated tools, official sources, OSS, templates, and guides for EU AI Act compliance. Can AI judge journalism? A Thiel-backed startup says yes, even if it risks chilling whistleblowers Coming soon: 10 Things That Matter in AI Right Now DARPA built an AI to fact-check enemy weapons claims What explains heterogeneity in AI adoption? When AI Meets Muscle: Context-Aware Electrical Stimulation Promises a New Way to Guide Human Movements - Department of Computer Science AI Changed How We Build. It Did Not Change What Matters. Linux rules on using AI-generated code - Copilot is OK, but humans must take 'full responsibility for the… Meta spins up AI version of Mark Zuckerberg to engage with employees Code Mode: Let Your AI Write Programs, Not Just Call Tools | TanStack Blog GitHub - Delavalom/graft: Go framework for building AI agents. Type-safe tools, multi-provider (OpenAI, Anthropic, Gemini, Bedrock), zero vendor SDKs. India's TCS tops estimates, says new AI models did not dent services demand Gen Z's fading AI hype Strong feeling: we are in a folded AI reality GitHub - machinarii/total-recall-catalog: A reference catalog of latest knowledge retrieval, memory & RAG systems GitHub - mensfeld/code-on-incus: Give each AI agent its own isolated machine with root, Docker, and systemd. Active defense detects and stops threats automatically.. Quantization, LoRA, and the 8% Problem: Benchmarking Local LLMs for Production AI Iran war: We spoke to the man making Lego-style AI videos that experts say are powerful propaganda Powell, Bessent discussed Anthropic's Mythos AI cyber threat with major U.S. banks GitHub - immartian/bellamem: Persistent belief-graph memory for AI agents. Retrieves decisive context by importance — not recency, not RAG, not /compact. recursive-mode: The Repo-Native Operating System for AI Engineering After the attack on Sam Altman's home, will AI CEO's go on the offensive? The biggest advance in AI since the LLM Opus 4.6 vs GPT 5.4 One Prompt Unity World Generation Test “AI polls” are fake polls Client Challenge Can AI be a 'child of God'? Inside Anthropic's meeting with Christian leaders How to Switch AI Chatbots and Why You Might Want To GitHub - MattMessinger1/agentic_refund_guardrail: Safe refund policy layer for AI agents — Python + TypeScript. Same behavior, shared tests. Adam/papers/emergent_values_whitepaper.md at master · strangeadvancedmarketing/Adam Ask HN: How do you stop playing 20 questions with your AI coding tools How far can automation and AI support psychotherapy? - @theU GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits A Mac Studio for Local AI — 6 Months Later A History of the Early Years of AI at the University of Edinburgh Why AI Coding Tools Still Feel Stuck on Localhost MSN AI Datacenters Are Becoming Strategic Targets twitter.com Penn Researchers Use AI to Surface Unreported GLP-1 Side Effects in Reddit Posts Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 AI models are terrible at betting on soccer—especially xAI Grok GitHub - xialeistudio/echoic GitHub - HimashaHerath/github-dev-wrapped: AI-powered weekly GitHub activity reports deployed to GitHub Pages GitHub - alejandrobalderas/claude-code-from-source: Architecture, patterns & internals of Anthropic's AI coding agent — reverse-engineered from source maps AI and Tech brief: Ireland ascendant GitHub - Titovilal/context0: Context0 - Never Surrender Training for a Marathon with an AI Coach: What Worked and What Didn't Cyber Pulse: Agentic Intel - Apps on Google Play I Built an AI PR Reviewer That Catches Bugs by Not Looking for Bugs Gen Z workers are so fearful AI will take their job they’re intentionally sabotaging their company’s AI rollout | Fortune How AI Is Reimagining the Game of Golf–For Both Players and Courses GitHub - nattergabriel/reseed: A CLI tool for managing and distributing agent skills across projects Is SVG the final frontier? My AI workflow evolved from prompts to a near-autonomous workflow MLSharp Help - 3DGS Viewer & Generator I put my cognitive field based AI's runtime on GitHub Is Numble the first AI-proof game? A3: Kubernetes for autonomous AI agent fleets | Emergent Principles Deepali Vyas ("The Elite Recruiter") GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Unionized ProPublica staff are on strike over AI, layoffs, and wages Unleashing the Advantage of Quantum AI We're heading for an AI-fueled 'dementia crisis,' brain scientist warns The AI-Assisted Breach of Mexico's Government Infrastructure [pdf] GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. MSN GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness We gave an AI a 3 year retail lease in SF and asked it to make a profit | Andon Labs AI Code is Hollowing Out Open Source, and Maintainers are Looking the Other Way What leaked "SteamGPT" files could mean for the PC gaming platform's use of AI AI is the boss at this retail store. What could go wrong? GitHub - Wuzu11517/agentic-proxy: Local proxy meant to help reduce With Drones, Geophysics and ArtificiaI Intelligence, Researchers Prepare to Do Battle Against Land Mines A Single Operator, Two AI Platforms, Nine Government Agencies: The Full Technical Report 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - inevolin/resume-cli: Hit Claude usage limits? Resume any AI coding session elsewhere. Switch tools at zero friction. GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. How to Build a Secure AI PR Reviewer with Claude, GitHub Actions, and JavaScript This Startup Wants You to Pay Up to Talk With AI Versions of Human Experts Intel Arc Pro B70 Brings 32GB VRAM to Local AI for $949 WordPress 7.0: The Good, the AI, and the Still Missing AI on the couch: Anthropic gives Claude 20 hours of psychiatry IatroBench: Pre-Registered Evidence of Iatrogenic Harm from AI Safety Measures AI Agents Know About Supabase. They Don't Always Use It Right. The history and future of AI at Google, with Sundar Pichai Inside an AI‑enabled device code phishing campaign How Meta Used AI to Map Tribal Knowledge in Large-Scale Data Pipelines AI for Systems: Using LLMs to Optimize Database Query Execution Forecasting the Economic Effects of AI Introducing Tinker: Play with AI, bring your ideas to life AI sheds light on an ancient gaming mystery People really hate AI but not as much as Iran—or Democrats | Fortune What is an AI Product Engineer? Phoebe Gates wants her $185 million AI startup to succeed with 'no ties to my privilege or my last name': 'I have a chip on my shoulder' | Fortune
UI tests are the guardrails an AI needs: the story of clipboardwire
martinlofgre · 2026-05-22 · via Hacker News - Newest: "AI"

Since December I had been patiently putting up with one of those everyday frustrations that, before you notice, turn into a project. I work with two machines at once: my Ubuntu laptop running Wayland, and a Windows PC that I drive from the Linux box using Deskflow — the free continuation of the old Synergy. For keyboard and mouse it works great: one input drives both screens. But the clipboard does not sync. And it turns out Deskflow, which does sync clipboards on X11, isn’t compatible with Wayland yet.

Two laptops on a warmly-lit desk: on the left, a Linux/Wayland-style screen in teal tones; on the right, a Windows-style screen in warm tones; between them, a clipboard floats in mid-air, linked by a luminous thread arcing across the gap

I tried the obvious alternatives: KDE Connect and a few other contraptions of that kind. But they were as likely to work as to stop working. One day the sync was fine, the next it wasn’t, the day after you had to restart something or re-pair the devices. For a tool that needs to be invisible and always ready, that kind of inconsistency is worse than not having it.

The awkward shuffle was always the same: copy something on Linux, open Google Chat, send it to myself, switch to Windows, paste it from Google Chat there. Or the other way around. A pain every time. For anyone who uses two systems side by side, clipboard sync is one of those things you don’t notice you depend on until it isn’t there.

In some forum I found a promising alternative: ClipCascade. Linux client, Windows client, a central hub to forward messages between them. Exactly what I wanted. I opened it ready to install… and saw it was a Java application on Spring Boot. The server recommended half a gigabyte of minimum heap. To sync some text between two machines on my own network.

My reaction was immediate: no, thanks. I’m not going to have a process chewing half a gigabyte of RAM permanently just so a Ctrl+C on one machine reaches the other. I closed the browser and opened Claude Code.


“Let’s convert this to Rust”

My initial prompt was, almost verbatim: “Let’s port this application to Rust, keeping the idea but making it lighter. I want a single binary that can act as both client and server.” I gave it the ClipCascade repository and let it go.

I had never written a serious line of Rust. I had read a chapter or two of the book, glanced at it on the odd curious afternoon, but nothing in production. I picked it because it met two non-negotiable requirements for this use case: a single binary, no runtime to load, and a memory-safe language. If I’m going to have a process listening on a port in my network, I’d rather any slip-up end in a panic than in a buffer overflow.

I also made one thing explicit from the start: Wayland took priority over X11. Half the problems with tray apps on Linux come from assuming we’re all still on X11. I didn’t want to drag that debt into my own code.


The rhythm: prompts in the background

Working with Claude Code on this had a specific rhythm worth describing, because it’s not how I had imagined it would work. It wasn’t a multi-hour session glued to the screen. It was more like having a quiet intern you hand a task to and come back to later to see what they’ve done.

I’d give a high-level instruction, let it get going, and meanwhile I’d carry on with client work, or go have lunch, or deal with an email. Every so often I’d come back to the console, read the diff of what it had done, tell it where to head next, and let it go again. Short review sessions separated by long stretches where it built and I did something else.

In a couple of days — because that’s how long it took — there was something working on my network. Two clients, a hub, WebSocket messages, basic authentication. Enough to start using it.


The slump: bugs that came and went

And then came the part nobody was counting on. I’d find a bug, describe it to Claude, it would fix it. I’d keep testing. Another one appeared, I’d describe it, it would fix it… and a bit later the first one came back. Or a similar one. Or a brand-new one in the area it had just touched.

This kind of thing, frustrating with a human, is downright maddening with an AI. Because there’s no persistent memory of “we’ve been here before”. No “yes, I know, I fixed that last week”. There’s a system that, at each turn, does the best it can with the code in front of it, without remembering it touched the same area before.

I’d been like this for a couple of days when I realised the problem wasn’t Claude’s. The problem was that I had no way of knowing whether a fix broke something that was already fine. Neither did he, neither did I. The application is a tray app, with a graphical UI and asynchronous behaviour — exactly the kind of thing that’s hard to test by hand, and where a bug can take several uses to resurface.


The investment that changed everything: tests, UI included

So I stopped asking for features for a whole day and started asking for something else entirely: a test battery covering everything, the graphical UI included.

Here I had to push pretty hard. Claude would start with things like “UI tests are hard to do well”, “they require graphical environments”, “this part is hard to isolate”. All true, but none of them a good enough reason. I told it to figure it out: if a headless Wayland compositor was needed for the tests, then spin one up. If it had to talk to DBus to verify the tray menu responded, then talk to DBus. If on Windows it had to use the UI Automation API, then use it.

And bit by bit it came together. We ended up with:

  • Tier-1 smoke tests that run on every push.
  • Linux tray menu tests driven over DBus, asserting that each entry responds as it should.
  • Windows tray icon discovery tests using the UI Automation API.
  • UI tests for the Settings dialog with egui_kittest.
  • An integration test that checks the singleton lock catches duplicate launches.

CI runs all of it on Linux and Windows on every push. And from that moment on, everything changed. The AI became much more reliable. Because when it broke something, we saw it immediately. And when it fixed something, we knew it was actually fixed, not just looking that way.

That is probably the most reusable lesson from this whole project: tests aren’t a burden you add because “you should”. They’re the guardrails an agent needs not to drive off the road. With solid tests, an AI can iterate aggressively without breaking things. Without them, it just goes around in circles.


The decisions I owned

Although most of the code was written by Claude, there were several underlying decisions I made myself, deliberately, that change the nature of the project. I’m spelling them out because I think this is the interesting bit for anyone else experimenting with this kind of workflow.

I simplified the authentication system

ClipCascade came with a fairly elaborate auth scheme, designed for a broader scenario than mine. When I saw what was being ported over, I stopped the translation and told Claude to tear most of it out. For my use case — my LAN, my VPN, my machines — I don’t need PBKDF2 or key derivation rounds or anything like that. HTTP Basic over TLS is plenty. Anything beyond that is over-engineering.

I committed to an honest threat model

The hub sees the clipboard in plaintext once TLS has terminated. There is no end-to-end encryption between clients. This is a deliberate decision, not an oversight: I run the hub on a machine I control, inside a network I control. If I trust my own machine (which has my SSH keys, my cookies, my history), adding E2EE would be security theatre. I wrote that down explicitly in the docs.

For use over the public internet or across untrusted infrastructure, the tool isn’t the right fit — and I make that clear. The day I want to go there, I’ll build E2EE with TOFU device pairing. But that’s a different tool.

Three modes in a single binary

The same executable can behave as a client (connect), as a hub (serve), or as both at the same time in the same process (host, which is the mode on my workstation: it participates AND serves as the hub for the other machines). This feels like the natural way to package this kind of thing: a single .deb, a single .msi, and depending on how you launch it, it takes on the role.

A tray app, not a daemon

I wanted the app to install and stay visible in the system tray, with an icon and live status (Connecting / Connected / Disconnected — retrying in N s). That’s not just cosmetics: when something fails in a clipboard tool, you notice it after it has failed. Having a permanent visible indicator changes that experience: you see the state before you paste.


Wayland, by the way, gave me no trouble

A short note for anyone coming to this from a pain similar to mine: Wayland just worked. Once I’d made it clear to Claude that this was the priority environment, the implementation with GTK + libayatana-appindicator landed on the first attempt. No weird hacks, no X11 fallback in disguise. The tray icon appears, the menu responds, clipboard events arrive via arboard. That’s it.

Maybe this should no longer surprise anyone in 2026, but considering this whole story started because Deskflow doesn’t support Wayland, I think it’s worth saying out loud.


What I’m taking away

Three things I didn’t expect before I started:

  • The bottleneck was the quality of the feedback the AI received, not its capacity to write code. While bugs were being diagnosed by manual inspection, we were moving at zero speed. As soon as there were tests giving a binary signal — “works / doesn’t work” — speed multiplied.
  • My real work was direction, not programming. The decisions that mattered most — simplifying auth, treating Wayland as the priority, defining the threat model, pushing for UI tests despite the protests — are product and architecture decisions, not code. That’s where I’m still adding value.
  • The “I don’t know Rust” stopped being an obstacle within hours. Not because I learnt Rust — I still don’t know Rust in the traditional sense — but because I can direct a Rust project by reading the diff, understanding the overall structure, and letting someone else handle the idiomatic detail.

That last one leaves me with mixed feelings, and I’m not going to hide them. On the one hand it’s liberating: the tools I need are no longer limited by the languages I master. On the other hand there’s something being lost there, and I don’t quite have a name for it yet.


The result

The project is called clipboardwire and lives at github.com/davefx/clipboardwire. There are .deb, .rpm and .msi packages on every release. macOS is coming. The project page on this site is here.

I use it every day between my Linux box and my Windows box. The server takes a few megabytes of RAM, not half a gigabyte. And Ctrl+C on one machine reaches the other without having to go through Google Chat.

If you find yourself in a similar spot — or if you’re simply tempted to try building something in a language you don’t know — maybe this is useful to you.