{"slug": "show-hn-ai-first-virtual-linux-desktop-as-a-mac-app", "title": "Show HN: AI First Virtual Linux Desktop as a Mac App", "summary": "A new Mac app, AI First Virtual Linux Desktop, lets AI agents run as root in a hardware-sandboxed Linux virtual machine, with no permission prompts, and includes preinstalled Claude Code, Codex, Gemini CLI, and MiMo. The app, built on Apple's Virtualization framework, allows drag-and-drop file transfer, clipboard sharing, and one-click factory reset, and is available through the App Store.", "body_md": "## The AI runs as root. It doesn't ask - it does.\n\nThis virtual computer exists for one thing: running AI agents in full-permission \"YOLO\" mode, as the root sudo admin of their own machine. No permission prompts, no babysitting - Claude Code, Codex, Gemini and MiMo install, configure, build and break things at full speed. That's safe to allow, because the whole computer is hardware-sandboxed: the worst an agent can lose is itself, never your Mac.\n\n### Full sudo, YOLO mode\n\nMade to run agents with permission checks off - `--dangerously-skip-permissions`\n\n, `--yolo`\n\nand friends. Here, the AI is the admin.\n\n### Installs anything\n\napt packages, toolchains, daemons, system services - no \"may I?\" dialog, no waiting for you to approve each step.\n\n### Reconfigures everything\n\n/etc, cron, systemd, the desktop itself. Root means root - the agent shapes the whole system to the job.\n\n### Works unattended\n\nGive it a goal and walk away. It builds, tests, breaks and fixes at full speed while you do something else.\n\n### Cannot escape\n\nHardware-isolated by Apple's Virtualization framework. Whatever the agent does in there stays in there - your Mac is never touched.\n\n### Worst case: Factory Reset\n\nIf an agent trashes its computer, one click gives it a brand-new one in minutes. Your Mac never even noticed.\n\n## 1First start\n\nThree steps to a complete, AI-ready Linux computer - walled off from your Mac.\n\n**Click the one button.** The app unpacks a complete Linux system onto your Mac - a few minutes, once.\n\n**Read the tips while you wait.** Files in, files out, clipboard, sound - all covered. Bring them back any time.\n\n**Your desktop appears.** A full Linux computer - real browser, real dev toolchain, and four AI coding agents already signed in and ready to build. Use it like a second Mac, minus the risk.\n\n**Give it room. It cannot get out.** Claude Code, Codex, Gemini and MiMo run with full root inside the guest, so they can work without stopping at every step. Hardware-isolated by Apple's Virtualization framework: whatever happens in there stays in there.\n\n## 2Files in, files out\n\nDrag and drop, both directions. No setup needed.\n\n### INTO Linux\n\nDrag a file from the Finder onto the Linux window. It lands on the **Linux Desktop**. Folders work too.\n\n### OUT to your Mac\n\nDrag a file *inside* Linux - a **\"Send to Mac\" zone** appears bottom-right. Drop it there, or right-click → **Send to Mac**. It appears in the **Files from Linux** window (tray button in the title bar), where you can drag it straight into the Finder.\n\n**invisible until you drag**- by design. Start moving a file and watch the bottom-right corner.\n\n## 3Everyday use\n\n### Copy & paste\n\nText, images, files - both ways. `⌘C` on the Mac, paste in Linux.\n\n### Sound\n\nLinux audio plays through your Mac's speakers.\n\n### Back to your Mac\n\n`⌘Tab` as always. Linux keeps running until you stop it.\n\n### Your files persist\n\nHome folder survives quitting, updates, even a system rebuild.\n\n### Throwaway sessions\n\nStart one from the launch screen. Quit, and it never existed.\n\n### Factory Reset\n\nDesktop menu → Factory Reset. Brand-new Linux computer.\n\n### Screenshot & record\n\nTitlebar button, or `aifcc screenshot`\n\n/ `aifcc record`\n\n.\n\n### SSH from your Mac\n\nTHIS Mac only, never your LAN. Run `aifcc ssh`\n\nfor the command.\n\n### Updates\n\nThrough the App Store, like any app. Home folder always stays.\n\n## 4Four AI agents, preinstalled\n\nNo install step. Sign in with your own account/key and go.\n\n### Claude Code\n\nReady. chrome-devtools-mcp pre-wired for browser automation.\n\n### Codex\n\nSame chrome-devtools-mcp wiring.\n\n### Gemini CLI\n\nSame chrome-devtools-mcp wiring.\n\n### MiMo\n\nPreinstalled, but **no** chrome-devtools-mcp - its config schema rejects that key. Wire it yourself via `mimo mcp`\n\n.\n\n**apfel: free on-device AI.** Turn it on in Settings - Linux gets an\n\n`apfel`\n\ncommand backed by your Mac's on-device Apple Intelligence. On by default on macOS 26+.## 5Power user: Settings reference\n\nUnder `⌘,`, in the app's own tab order.\n\n| Tab | What it does | Default |\n|---|---|---|\n| General | Cores (1-8), memory (1-16 GB), display size, recording quality. Applies next launch. | 4 cores, 4 GB |\n| Storage | Disk location, live usage, Factory Reset. Disks (~40-50 GB) live outside the app. | - |\n| Drag & Drop | Where dropped files land inside Linux: Desktop, Home, Downloads, or custom. | Desktop |\n| Mount Folder | A real hole in the sandbox - anything inside Linux, including AI tools, can read/change/delete it. Drag-and-drop stays sandboxed and needs no mount. | off |\n| SSH Access | Guest sshd is always on, reachable only from THIS Mac. User/password both `aifcc` , or run `aifcc ssh` . | always on |\n| MCP (AI Control) | \"Let an AI control the desktop\" + guest mirror. See\n|\n\n`apfel`\n\ncommand backed by the Mac's on-device Apple Intelligence. No cloud, no keys.## 6Power user: the `aifcc`\n\nCLI\n\nEverything the GUI can do, the CLI can do too - most commands support `--json`\n\nfor scripting or an AI to parse.\n\n| Command | What it does |\n|---|---|\n| version | Print product name + version + build + git SHA (JSON). |\n| vm-config | Validate + clamp a VM profile (`--cpu --ram-gib --disk-gib` ), JSON. |\n| lineage | Parse a golden lineage JSONL file and print rows (JSON). |\n| status | Report VM disks, golden version, last shutdown + boot health (`--container` , JSON). |\n| logs | Print the captured guest boot console log (`--container` , `--tail N` , `--json` ). |\n| diagnostics | One-shot diagnostic bundle: version + VM state + recent boot log (`--container` , JSON). |\n| ssh | Print how to SSH into the running Linux desktop. |\n| doctor | Installed app build vs this CLI's build, with an in-sync verdict (`--json` ). |\n| debug-log | The persistent app + guest-agent debug log (`--container` , `--tail N` , `--json` ). |\n| screenshot | Capture the Linux desktop to ~/Downloads (`--window` , `--max-width N` , `--out PATH` , `--json` ). |\n| factory-reset | Erase ALL VM state for a brand-new desktop. Requires `--yes` ; refuses while running. |\n| desktop | Control the Linux desktop: click / move / type / key / scroll / windows / activate / launch / exec (`--json` ). |\n| mcp | Manage MCP access: `serve` | `enable` | `disable` | `status` | `guest` | `register` . |\n| record | Record a video of the Linux desktop to ~/Downloads (`--seconds N` , `--quality` , `--out` , `--json` ). |\n| apfel | `on` | `off` | `status --json` - the Mac's on-device AI, bridged into the guest. |\n\n## 7Power user: drive it with an AI (MCP)\n\nA Model Context Protocol server (JSON-RPC 2.0, stdio) exposing the desktop as tools. Any MCP client can drive it - never anything on your Mac.\n\n```\nclaude mcp add aifcc -- aifcc mcp serve   # register with an MCP client\naifcc mcp register                        # wire into the guest's own Claude Code\naifcc mcp serve                           # run the server directly\n```\n\n`factory-reset`\n\nhas no MCP tool - never exposed. Both switches (host + guest mirror) are **on by default** on a fresh install; an explicit OFF sticks.\n\n| Tool | Description | Args |\n|---|---|---|\n| aifcc_status | Report the Linux desktop's disks, golden version, boot health. | - |\n| aifcc_version | aifcc version + build + provenance. | - |\n| aifcc_ssh_info | How to SSH into the running Linux desktop (address + user). | - |\n| aifcc_logs | Recent app + guest-agent log lines. | - |\n| aifcc_diagnostics | One-shot diagnostic bundle: version + VM state + recent boot log. | - |\n| aifcc_doctor | Installed app build vs this CLI's build + an in-sync verdict. | - |\n| aifcc_debug_log | The persistent app + guest-agent debug log. | tail (int) |\n| aifcc_vm_config | Resolve a VM profile (clamped). | cpu, ramGib, diskGib (ints) |\n| aifcc_screenshot | Capture the desktop (or active window) to a PNG, returned inline as base64. Defaults to a token-cheap width. | window (bool), maxWidth (int, default 1280) |\n| aifcc_desktop_click | Click the pointer at guest pixels (x, y). | x, y, button, double |\n| aifcc_desktop_move | Move the pointer to guest pixels (x, y). | x, y |\n| aifcc_desktop_type | Type literal text into the focused window. | text |\n| aifcc_desktop_key | Press a key or chord (xdotool syntax, e.g. Return, ctrl+c). | combo |\n| aifcc_desktop_scroll | Scroll the wheel by N (negative = down). | amount |\n| aifcc_desktop_windows | List open windows (id, class, geometry, title). | - |\n| aifcc_desktop_activate | Focus/raise a window by title or class substring. | target |\n| aifcc_desktop_close | Close a window (graceful) by title or class substring. | target |\n| aifcc_desktop_maximize | Maximize a window by title or class substring. | target |\n| aifcc_desktop_minimize | Minimize the active window. | - |\n| aifcc_ssh_enable | Enable the guest SSH server (open SSH access to the desktop). | - |\n| aifcc_ssh_disable | Disable the guest SSH server (close SSH access). | - |\n| aifcc_desktop_launch | Launch a desktop app by its .desktop id. | app |\n| aifcc_desktop_exec | Run a shell command as the desktop user; returns rc/stdout/stderr. | command |\n| aifcc_record | Record a video of the Linux desktop. | seconds (1-600), quality (low|medium|high) |\n\n## 8For AI agents\n\n- Machine-readable index:\n[/llms.txt](/llms.txt) - Full CLI table:\n[#cli-table](#cli-table)above (15 rows) - Full MCP tool table:\n[#mcp-tools](#mcp-tools)above (24 rows) - Server:\n`aifcc mcp serve`\n\n- JSON-RPC 2.0 over stdio, protocol`2024-11-05`\n\n- Requires user consent (Settings → MCP) - on by default on a fresh install\n`factory-reset`\n\nis never exposed over MCP\n\n```\nYou can control a full Linux desktop running on my Mac via the \"aifcc\" MCP server.\nAvailable tools: aifcc_status, aifcc_diagnostics, aifcc_logs, aifcc_screenshot\n(full desktop or active window; maxWidth to save tokens), and desktop control -\naifcc_desktop_launch, aifcc_desktop_exec, aifcc_desktop_windows, aifcc_desktop_click /\nmove / type / key / scroll, aifcc_desktop_activate. Screenshot first, then act.\nFactory reset is intentionally not exposed.\n```\n\nSame prompt the app's Settings screen offers via \"Copy prompt for an AI\" - this page is its durable, linkable version.\n\n## 9Pricing\n\nOne price. No tiers, no add-ons, no usage metering.\n\n**Free for 3 months** from first launch, then a single\n\n**€49/year** auto-renewing subscription. It renews yearly unless cancelled at least 24 hours before the period ends; manage or cancel it any time in your Apple Account settings.\n\n## 10Questions\n\n## What can an AI actually control?\n\nWith consent (Settings → MCP, on by default), an AI can screenshot, click, type, scroll, manage windows and run shell commands inside Linux - never your Mac, never Factory Reset.\n\n## I dragged a file out - where is it?\n\nYour Mac's **Desktop** by default (change it in Settings → Send to Mac). The Linux dialog names the exact folder.\n\n## How much disk space does it use?\n\nIt needs about 34 GB free to set up, and grows to roughly 50 GB as you use it. That data stays on your Mac after you delete the app - run Factory Reset first if you want it gone.\n\n## Text is too small / too big.\n\nSettings (`⌘,`) → display size. Applies next launch.\n\n## Is my Mac safe?\n\nYes - Apple's hardware virtualization sandbox. No access to your files unless you mount a folder yourself.\n\n## Something looks wrong - how do I report it?\n\nHelp → **Email Support**, Desktop menu → \"Report a Problem\", or the [Feedback & bug reports](#feedback) section below. Mention the build from the badge.\n\n## 11Feedback & bug reports\n\nFound a bug, hit something confusing, or have an idea for AIFCC? One inbox reads all of it.\n\n**We read every message.**\n\nFor bug reports, include your build number (Settings → About) and what you expected to happen.", "url": "https://wpnews.pro/news/show-hn-ai-first-virtual-linux-desktop-as-a-mac-app", "canonical_source": "https://aifcc.franzai.com/", "published_at": "2026-08-15 08:54:44+00:00", "updated_at": "2026-08-15 09:10:47.900519+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-products", "ai-infrastructure"], "entities": ["Apple", "Claude Code", "Codex", "Gemini CLI", "MiMo", "AI First Virtual Linux Desktop"], "alternates": {"html": "https://wpnews.pro/news/show-hn-ai-first-virtual-linux-desktop-as-a-mac-app", "markdown": "https://wpnews.pro/news/show-hn-ai-first-virtual-linux-desktop-as-a-mac-app.md", "text": "https://wpnews.pro/news/show-hn-ai-first-virtual-linux-desktop-as-a-mac-app.txt", "jsonld": "https://wpnews.pro/news/show-hn-ai-first-virtual-linux-desktop-as-a-mac-app.jsonld"}}