An AI-native operating system.
| Architecture | ISO | VM Image |
|---|---|---|
| x86_64 (Intel/AMD PCs) | tensoragent-os-x86_64.iso.xz | — |
| ARM64 (Apple Silicon, RPi) | tensoragent-os-aarch64.iso.xz | Pre-built VM |
Flash to USB:
sudo dd if=tensoragent-os-x86_64.iso of=/dev/sdX bs=4M status=progressBoot in VM: Use VirtualBox, VMware, UTM, or QEMU.
Default login:
ainux/ainux
TensorAgent OS is a bootable Linux-based OS where an AI agent is the primary user interface. Instead of clicking through menus, you talk to the system. The agent has native access to:
- The kernel (system calls, processes, namespaces)
- Hardware (battery, sensors, audio, displays via
systeminformation) - The filesystem and network stack
- systemd services and package management
- A WebMCP-enabled Chromium for tool use inside web pages
- A pluggable skills + tools layer through OpenWhale
It ships as either a full bootable ISO (via debootstrap + Ubuntu 24.04 LTS)
or as a pre-built UTM/QEMU image you can boot in seconds on macOS.
| Layer | Component | Tech |
|---|---|---|
| AI engine | OpenWhale | TypeScript, multi-agent, MCP, tools, skills |
| Desktop shell | WhaleOS | Qt6 / QML, native C++ helpers |
| Core orchestrator | @ainux/core | Node.js — IPC, process mgmt, hardware bridge |
| Browser | ainux-chromium | Chromium + WebMCP patches, kiosk/agentic mode |
| Optional GUI | packages/gui | React + Vite (alternative to QML shell) |
| Build system | scripts/build-iso.sh | debootstrap + xorriso + (optional) Buildroot |
The fastest path. Double-click and boot.
brew install --cask utm
open utm_build/TensorAgentOS.utmLogin: ainux / ainux
Pre-configured with 6 GB RAM, 6 cores, ARM64 virtualisation, and host port forwarding:
| Host port | Guest service |
|---|---|
7777 |
OpenWhale API / dashboard |
2222 |
SSH |
⚠️ If the VM hangs at the EFI shell or the desktop never appears, that's a known issue — try a cold restart from UTM and give it 2–3 more minutes. First boot runs cloud-init and can take a while.
brew install qemu
# 1. Download an Ubuntu Server 24.04 ARM64 cloud image (~580 MB)
curl -L -o vm/ubuntu-server.qcow2 \
"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-arm64.img"
# 2. Launch (first boot ≈ 5 minutes — cloud-init installs everything)
python3 vm/launch-ainux.pyAfter it finishes provisioning:
| Service | Where |
|---|---|
| Desktop | The QEMU window |
| API / Dashboard | http://localhost:7777 |
| SSH | ssh ainux@localhost -p 2222 |
The launcher script (vm/launch-ainux.py) injects all of packages/whaleos/,
the OpenWhale patch script, and the login HTML into the guest via cloud-init,
so any local changes are picked up on the next boot.
ISOs are built automatically by GitHub Actions for both x86_64 and ARM64. Download the latest from the Releases page, or build from source using the instructions below.
Reproducible from-scratch ISO build. Linux x86_64 host required, ~16 GB RAM and ~150 GB free disk recommended (less if you skip Chromium).
# 1. Install host build dependencies
sudo apt install -y \
build-essential git python3 wget curl xz-utils \
gcc g++ make tar patch pkg-config \
debootstrap xorriso grub-pc-bin grub-efi-amd64-bin \
mtools squashfs-tools qemu-user-static binfmt-support
# 2. Build the ISO
./scripts/build-iso.sh # x86_64, full build (slow)
./scripts/build-iso.sh --skip-chromium # use Ubuntu's chromium, much faster
./scripts/build-iso.sh --arch=aarch64 # cross-build ARM64 ISO
./scripts/build-iso.sh --clean # nuke ./build and start over
# 3. Smoke-test in QEMU
./scripts/run-qemu.shThe build pipeline (see scripts/build-iso.sh) does:
debootstrapan Ubuntu 24.04 Noble rootfs.- Install Qt6, Node.js, PAM, Wayland, and other system packages.
- Drop in rootfs-overlay/ (systemd units, configs).
- Build & install OpenWhale + WhaleOS into
/opt/ainux/. - Install the GRUB bootloader and generate the ISO with
xorriso.
# Replace /dev/sdX with the right device — this WILL erase it.
sudo dd if=ainux.iso of=/dev/sdX bs=4M status=progress conv=fsync
syncWrap a generated qcow2 disk into a ready-to-double-click UTM VM:
# 1. Produce vm/ainux.qcow2 first
python3 vm/launch-ainux.py
# 2. Stage the bundle
mkdir -p utm_build/TensorAgentOS.utm/Data
cp vm/ainux.qcow2 utm_build/TensorAgentOS.utm/Data/ainux.qcow2
# 3. Drop in the config.plist (template lives in utm_build/)
# 4. Open
open utm_build/TensorAgentOS.utmNote: UTM does not run cloud-init on its own. Make sure the disk image already has
systemd-networkdDHCP configured, otherwise the VM will boot with no network and the agent will look broken.
ainux/
├── packages/
│ ├── openwhale/ # OpenWhale AI engine (TS) — agents, MCP, skills, tools
│ ├── whaleos/ # Qt6 / QML desktop shell — main.qml, ChatBar, Desktop, …
│ ├── core/ # Node.js core orchestrator — IPC, hardware, process mgmt
│ ├── chromium/ # Chromium patches: WebMCP-on, AInux hooks, kiosk mode
│ └── gui/ # Optional React/Vite shell (alternative front-end)
├── buildroot-external/ # Custom Buildroot packages (ainux-shell, ainux-gui, …)
├── board/ainux/ # Bootloader configuration (GRUB)
├── configs/ # Buildroot defconfig + kernel .config
├── rootfs-overlay/ # Files copied into the rootfs (systemd units, /etc, /opt)
├── scripts/
│ ├── build-iso.sh # Master build script (Ubuntu-based)
│ ├── run-qemu.sh # Launch the built ISO in QEMU
│ ├── integrate-openwhale.sh
│ ├── configure-rendering.sh
│ ├── post-build.sh / post-image.sh
│ └── ainux-update.sh # In-guest updater
├── vm/
│ ├── launch-ainux.py # One-command QEMU launcher (ARM64 + HVF on macOS)
│ ├── boot-ainux.sh # Plain boot script
│ ├── auto-setup.sh # In-guest first-boot setup
│ └── cidata/ # cloud-init seed (meta-data / user-data)
├── utm_build/ # Pre-built UTM virtual machine bundle
├── docs/ # Project docs (HTML)
└── package.json # npm workspace root
Hot-reload changes into a running VM over SSH:
# WhaleOS (QML) — restart shell after copying
scp -P 2222 packages/whaleos/*.qml ainux@localhost:/opt/ainux/whaleos/
ssh -p 2222 ainux@localhost "sudo systemctl restart ainux-gui"
# OpenWhale (TypeScript) — rebuild + restart in-guest
scp -P 2222 packages/openwhale/src/**/*.ts ainux@localhost:/tmp/
ssh -p 2222 ainux@localhost "
sudo cp /tmp/*.ts /opt/ainux/openwhale/src/ &&
cd /opt/ainux/openwhale && sudo npm run build &&
sudo systemctl restart openwhale
"
# Tail logs
ssh -p 2222 ainux@localhost "journalctl -u openwhale -u ainux-gui -f"There's also a convenience script: scripts/dev-push.sh.
npm run dev # Run OpenWhale directly on the host (no VM)
npm run build:shell # Build the WhaleOS QML shell locally
npm run build:iso # Build the x86_64 ISO
npm run build:iso:arm64
npm run setup:vm # Provision vm/ contents
npm run test:qemu # Boot the latest ISO in QEMU
npm run lintDefault credentials everywhere: ainux / ainux (login, sudo, SSH).
Change them before exposing the VM to anything other than localhost.
A non-exhaustive list — please add to it via GitHub issues:
- Live ISO only. The ISO currently boots live; persistence is whatever the underlying VM disk gives you. No installer yet.
- First-boot cloud-init can hang. If you don't see the desktop after
~10 minutes, SSH in on
2222and runcloud-init status --long. - WhaleOS shell crash on resize. Resizing the QEMU/UTM window can take
the QML shell down. Restart with
sudo systemctl restart ainux-gui. - OpenWhale agents may stall waiting on a tool call that never returns.
Restart with
sudo systemctl restart openwhale. - Chromium kiosk patches are out of date for some upstream versions; use
--skip-chromiumif the build fails. - ARM64 cross-build of Chromium is essentially untested.
- No installer. The ISO currently boots live; persistence is whatever the underlying VM disk gives you.
- Networking in UTM can come up without a route on some macOS versions.
sudo dhclient enp0s1(or similar) usually fixes it.
Issues and PRs welcome — especially:
- Reproducible bug reports (host OS, arch, exact command, full log).
- Cleanups in
scripts/build-iso.sh(it's grown organically). - Additional OpenWhale skills under packages/openwhale/skills/.
- New QML apps under packages/whaleos/.
Please keep changes focused and avoid bundling unrelated refactors.
Business Source License 1.1 (BUSL-1.1) — see LICENSE. Production use requires a commercial license before 2050-04-22.
Author: JIJO JOHN — https://jijojohn.me

