Minimal build instructions.
- Linux host
gitnixwith flakes enabledqemu-system-x86_64sudoaccess for mounting/unmountingtarget/rootfs.img
Clone submodules first:
git submodule update --init --recursiveIf you do not already have Nix installed, run:
sh <(curl -L https://nixos.org/nix/install) --daemonThen restart your shell and enable flakes:
mkdir -p ~/.config/nix
cat > ~/.config/nix/nix.conf <<'EOF'
experimental-features = nix-command flakes
EOFFrom the repository root:
nix runThis enters the flake environment, initializes the rootfs if needed, and runs cargo xrun.
From the repository root:
nix developThe project expects a local Rust toolchain named seele:
cd toolchain
./install.rs
cd ..From the repository root:
cargo xrunFor Codex-driven work, prefer the Seele MCP server over manual QEMU control when it is registered in your MCP configuration. The dev shell provides a seele-mcp command:
nix develop -c seele-mcpThe MCP server exposes tools for the structured control-plane loop:
run_tests: start a structured test job and return typed reports/artifacts.start_vm/start: launch the VM through the MCP control plane.vm_status/status: report QEMU PID, QMP connectivity, and serial log location.serial_tail: read recent serial output.job_status,job_wait,job_cancel: inspect and control structured jobs.stop_vm/stop: stop MCP-managed QEMU state.
Manual cargo xrun remains useful for local foreground runs when MCP is unavailable.
Build or refresh target/rootfs.img and the guest root filesystem:
cargo xbuild-rootfsThe rootfs is Arch Linux based and installs a small base development package set through pacstrap.
Force rebuilding the rootfs image from scratch:
cargo xbuild-rootfs -- --overrideMount target/rootfs_mnt/ from target/rootfs.img through the MCP ensure_rootfs_mounted tool when needed.
Run kernel unit and LTP coverage:
cargo xtestcargo xrunis the main local workflow entrypoint.nix runuses the samecontrol-cliflow.- If
/dev/kvmexists, QEMU will use KVM automatically.