Linux migration companion — proactive local LLM assistant for Windows and macOS switchers
Find a file
pyr0ball 3c77969680 fix(m1): inotify — use read_to_end for UTF-8 resilience, await spawn_blocking
- read_to_end + from_utf8_lossy replaces read_to_string so Wine/game logs
  with Latin-1 bytes are handled via U+FFFD replacement instead of silently
  dropping all events from that file
- bytes_read from I/O call used for new_pos (not content.len()) for correct
  byte position accounting
- spawn_blocking handle is now awaited so panics inside the blocking task
  surface to the caller instead of being silently swallowed
2026-05-18 17:25:30 -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
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: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
src-tauri fix(m1): inotify — use read_to_end for UTF-8 resilience, await spawn_blocking 2026-05-18 17:25:30 -07:00
.gitignore feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -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: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
package-lock.json feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -07:00
package.json feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -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 feat: M0 scaffold — Tauri 2 + Vue 3, system tray, first-run onboarding, config layer 2026-05-18 10:06:49 -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.