Linux migration companion — proactive local LLM assistant for Windows and macOS switchers
Find a file
pyr0ball 42472ee024 feat(ui): replace Vue/Vite frontend with self-contained static HTML
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)
2026-05-20 12:23:04 -07:00
.vscode feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
dist feat(ui): replace Vue/Vite frontend with self-contained static HTML 2026-05-20 12:23:04 -07:00
public feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
src feat(patterns): mobile-origin users + dual-boot supplement system 2026-05-19 09:32:18 -07:00
src-tauri feat(ui): replace Vue/Vite frontend with self-contained static HTML 2026-05-20 12:23:04 -07:00
.gitignore feat(ui): replace Vue/Vite frontend with self-contained static HTML 2026-05-20 12:23:04 -07:00
index.html feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
manage.sh feat(ui): replace Vue/Vite frontend with self-contained static HTML 2026-05-20 12:23:04 -07:00
package-lock.json feat(m1): ChatPanel listens for robin:event, drains pending on open 2026-05-18 18:24:34 -07:00
package.json feat(m1): ChatPanel listens for robin:event, drains pending on open 2026-05-18 18:24:34 -07:00
README.md feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
tsconfig.app.json feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
tsconfig.json feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
tsconfig.node.json feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
vite.config.ts fix(webview): pin Vite to port 1420 + manage.sh auto-starts Vite for debug builds 2026-05-20 11:16:40 -07:00

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.

Status License


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.