The UI was previously a Vue 3 SPA served via a Vite dev server on :1420.
This had two problems:
- Building from source required Node, npm, and the Tauri CLI
- Running required starting a Vite dev server alongside the binary
Replace with a single self-contained dist/index.html using vanilla JS
and the Tauri 2 withGlobalTauri IPC global. No build step, no npm, no
dev server — the binary loads the static file directly.
Changes:
- dist/index.html: full Robin UI (chat, events, debug tabs) in ~750 LOC
- Chat tab: streaming LLM responses via robin:chat-token events
- Events tab: live matched system events with severity badges
- Debug tab: migration config, Ollama status probe, notif level picker
- Onboarding form shown on first run (calls complete_onboarding IPC)
- All user/LLM text via textContent/DOM construction, no innerHTML
- Markdown renderer (fenced code, inline code) built from DOM nodes
- tauri.conf.json: add withGlobalTauri: true, remove devUrl and Node hooks
- tauri.conf.json: update CSP to allow inline scripts (desktop app)
- manage.sh: remove Vite dev server auto-start and kill logic
- manage.sh: build/dev now use cargo directly, add bundle command for
full .deb/.rpm/.AppImage (still requires Tauri CLI)
- .gitignore: track dist/index.html, only ignore dist/assets/ (Vite output)
|
||
|---|---|---|
| .vscode | ||
| dist | ||
| public | ||
| src | ||
| src-tauri | ||
| .gitignore | ||
| index.html | ||
| manage.sh | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
Robin
Linux, with a guide who's been there.
Robin is a proactive Linux companion for users migrating from Windows or macOS. It watches your system, detects migration friction, and surfaces plain-language help before you know what to search for.
What Robin does
- Lives in your system tray — out of the way until it has something useful to say
- Watches journald, dmesg, and system events for common migration pain points
- Knows what you came from: "where's My Documents?" maps to
~/Documents; "how do I install this .exe?" becomes a package manager explainer - Learns what you already know — stops offering suggestions you keep dismissing
- All inference runs locally via Ollama — nothing leaves your machine
Target users
People switching from Windows or macOS who are not comfortable with the terminal, don't know what a log is, and are experiencing friction they can't name.
Robin is not a sysadmin tool. See Turnstone for that.
Real test cases
| Test case 1 | Test case 2 | |
|---|---|---|
| Source OS | macOS | Windows |
| Target distro | CachyOS (Arch) | Linux Mint (Ubuntu/Debian) |
Both users' real friction points during migration are the ground truth for the pattern library.
Stack
- Backend: Rust + Tauri 2
- Frontend: Vue 3 + TypeScript (chat panel, onboarding)
- System integration: D-Bus, journald, inotify (via Rust crates)
- LLM: Ollama (local inference, any compatible model)
Getting started (development)
Prerequisites
Arch/CachyOS:
./manage.sh install-deps-arch
Debian/Ubuntu/Mint:
./manage.sh install-deps
You also need Rust and Node 18+.
Dev mode
./manage.sh dev
This starts the Vite dev server and launches the Tauri app with hot-reload.
Build
./manage.sh build
# Produces: src-tauri/target/release/robin
# Installers: src-tauri/target/release/bundle/
Install as a service
./manage.sh install # registers systemd user service
./manage.sh start # start Robin
Robin starts with your desktop session and lives in the system tray.
Milestones
| Milestone | Scope |
|---|---|
| M0: Scaffold | Repo structure, Tauri skeleton, system tray placeholder, first-run onboarding |
| M1: System presence | journald/dmesg watcher, D-Bus events, desktop notifications, /etc/os-release detection |
| M2: CachyOS/macOS patterns | macOS → CachyOS translation layer, AUR failure detection — validated on Xander's machine |
| M3: Mint/Windows patterns | Windows → Mint translation layer, apt/Flatpak/Timeshift patterns — validated on Muninn |
| M4: Robin agent | Ollama integration, full chat, RAG migration knowledge base |
| M5: Fluency model | Dismissal learning, confidence calibration, graduation handoff |
Architecture
System events (journald, dmesg, D-Bus, inotify)
│
▼
Event classifier (pattern matching + Ollama when needed)
│
▼
Migration context (source OS, distro, fluency level)
│
▼
Robin agent (Ollama — local LLM)
+ Migration knowledge base (equivalents, common friction, distro docs)
│
▼
Chat panel (Tauri webview, Vue 3)
+ System tray notifications
License
System monitor and pattern matching: MIT Robin chat agent and migration knowledge base: BUSL-1.1 (converts to MIT after 4 years)
Part of the Circuit Forge menagerie.