PoC to try how implement something like Claude Cowork
- Rust 66.1%
- QML 16.5%
- Nix 15.7%
- CMake 1.4%
- Shell 0.3%
| .claude | ||
| npins | ||
| src | ||
| .envrc | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| CMakeLists.txt | ||
| fr.mrdev023.cowork.desktop | ||
| fr.mrdev023.cowork.metainfo.xml | ||
| fr.mrdev023.cowork.svg | ||
| Messages.sh | ||
| README.md | ||
| shell.nix | ||
cowork_test
Desktop AI assistant: a Kirigami/Qt6 desktop app and an MCP server for Wayland desktop control.
Requirements
- A Wayland session with xdg-desktop-portal (GNOME or KDE)
- Nix (packages are declared in
shell.nix, load withdirenv allow)
How it works
On Wayland, direct input/screen access is not allowed. This server uses the XDG Desktop Portal APIs via ashpd:
- RemoteDesktop portal — to move the pointer and send button/key events
- Screencast portal — to get a stream node ID required by RemoteDesktop
- Screenshot portal — to take screenshots
On startup, the portal will prompt for permission to control the desktop. Once granted, the session stays open until the server stops.
Rust stack
- Qt: https://github.com/KDAB/cxx-qt
- KDE frameworks (WIP): https://invent.kde.org/libraries/cxx-kde-frameworks
- DBus : https://github.com/z-galaxy/zbus/
- XDG Portals : https://github.com/bilelmoussaoui/ashpd
- Agentic AI : https://github.com/zavora-ai/adk-rust