--- a/studio/src-tauri/src/process.rs
+++ b/studio/src-tauri/src/process.rs
@@ -1500,6 +1500,17 @@
 }
 
 pub fn find_unsloth_binary() -> Option<std::path::PathBuf> {
+    // Gentoo system install (sci-ml/unsloth[studio]): the studio backend is the
+    // system-wide `unsloth` CLI, so prefer it over a ~/.unsloth/studio venv. This
+    // also makes the desktop preflight see the backend as already installed and
+    // skip install.sh.
+    {
+        let system = std::path::PathBuf::from("/usr/bin/unsloth");
+        if system.exists() {
+            return Some(system);
+        }
+    }
+
     let home = dirs::home_dir()?;
     let studio = home.join(".unsloth").join("studio");
 
@@ -3149,6 +3160,17 @@
 /// Falls back to find_unsloth_binary() which checks ~/.unsloth/studio/unsloth_studio/
 /// (new layout) then ~/.unsloth/studio/.venv/ (old layout).
 pub(crate) fn resolve_backend_binary() -> Result<std::path::PathBuf, String> {
+    // Gentoo system install (sci-ml/unsloth[studio]): the studio backend is the
+    // system-wide `unsloth` CLI, so prefer it over a ~/.unsloth/studio venv. This
+    // also makes the desktop preflight see the backend as already installed and
+    // skip install.sh.
+    {
+        let system = std::path::PathBuf::from("/usr/bin/unsloth");
+        if system.exists() {
+            return Ok(system);
+        }
+    }
+
     // In dev mode, check for local repo venv first
     #[cfg(debug_assertions)]
     {
--- a/studio/src-tauri/src/desktop_backend_owner.rs
+++ b/studio/src-tauri/src/desktop_backend_owner.rs
@@ -483,6 +483,9 @@
     cmd.env(OWNER_TOKEN_ENV, pending.token.as_str());
     cmd.env(OWNER_KIND_ENV, OWNER_KIND_TAURI);
     cmd.env(OWNER_PID_ENV, std::process::id().to_string());
+    // System backend (sci-ml/unsloth[studio]) serves in-process; without this the
+    // `unsloth studio` CLI would re-exec into a ~/.unsloth/studio venv.
+    cmd.env("UNSLOTH_STUDIO_SYSTEM", "1");
 }
 
 pub(crate) fn activate_owner(
