This is THOR’s repo-owned runbook for bringing up a brand-new Jetson AGX Thor Developer Kit from macOS without a monitor.
It is based on NVIDIA’s current Jetson AGX Thor quick-start flow plus the internal Shenzhen bring-up notes we were already using in trainops/JetsonThor, but it is now kept in this public repo so THOR does not depend on private local skills.
- You already created a bootable Jetson ISO USB stick.
- You have a Mac with a data-capable USB cable.
- You want the first boot, OEM-config, and first SSH path to work entirely headless.
- Plug the bootable USB stick into a Thor USB-A port.
- Plug power into Thor USB-C
5b. - Plug a USB data cable from your Mac into the Thor Debug-USB port
8. - Open the UEFI serial console from macOS.
Factory UEFI 38.0.0 is known to render badly on serial unless the terminal is sized to 242x61.
THOR includes a helper:
Scripts/jetson-thor/thor_serial.sh uefiThis auto-picks the second /dev/cu.usbserial-* device, sends the resize escape sequence, and opens either tio or screen at 9600 baud.
From there:
- Boot the board.
- Let it boot from the USB installer.
- Choose
Flash Jetson Thor AGX Developer Kit on NVMe. - Wait for the BSP install to finish.
- Let the automatic UEFI update run.
- Remove the USB stick after the second reboot so it does not loop back into the installer.
After the NVMe boot starts, move the USB cable from Debug-USB 8 to USB-C 5a.
THOR helper:
Scripts/jetson-thor/thor_serial.sh oem-configThat opens the first /dev/cu.usbmodem* device at 115200 baud.
Walk through:
- License / locale
- Username and password
- Network interface selection
- Hostname
Before you continue, write down the username you created during OEM-config. The examples below use <oem-config-username> on purpose. Do not keep using nvidia unless you explicitly created that user on the device.
Phase 2 is complete when you can log in with the new username and the board proceeds into the installed Jetson Linux system instead of returning to the installer.
Once Jetson Linux is up, the same USB-C cable exposes a USB-Ethernet gadget.
- Thor:
192.168.55.1 - Mac:
192.168.55.100via a newenXinterface
Recommended shell variable:
export THOR_USER="<oem-config-username>"First SSH:
ssh "$THOR_USER"@192.168.55.1If the tether does not appear, verify the cable is still in Thor USB-C 5a and that macOS brought up the gadget interface.
Phase 3 is complete when ssh "$THOR_USER"@192.168.55.1 opens a shell on the device without needing to discover any LAN IP.
THOR now vendors a safe bootstrap helper:
Scripts/jetson-thor/bootstrap_ssh.sh <user@host> [public-key-path]Example:
Scripts/jetson-thor/bootstrap_ssh.sh "$THOR_USER"@192.168.55.1 ~/.ssh/id_ed25519.pubThis will:
- Append your public key to
authorized_keys - Enable passwordless sudo for the remote user
- Optionally disable password auth if you set
DISABLE_PASSWORD_AUTH=1
If THOR says no key was detected, generate one first:
ssh-keygen -t ed25519 -f "$HOME/.ssh/id_ed25519" -C "thor-jetson"Phase 4 is complete when you can SSH back in with your key and sudo -n true succeeds on the device.
Install JetPack after the first SSH session:
ssh "$THOR_USER"@192.168.55.1 'sudo apt update && sudo apt install -y nvidia-jetpack'Then verify Docker/runtime readiness:
ssh "$THOR_USER"@192.168.55.1 'docker --version && sudo systemctl status docker --no-pager'After the THOR agent is installed and reachable through THOR or a local SSH tunnel, use THOR itself or thorctl doctor <local-agent-port> to verify. Example if you forwarded the device agent locally to 8470:
thorctl doctor <local-agent-port>
# Example if your local tunnel or THOR session exposes the agent on 8470:
# thorctl doctor 8470Phase 5 is complete when JetPack is installed, Docker reports healthy, and THOR’s setup doctor reports the device as ready over the port you actually exposed for the agent.
THORApp.app→ onboarding and setup doctor now expose this same headless bring-up flow.thorctl quickstart [username]prints the same Mac-side detection and first-boot commands. Replace[username]with the OEM-config username you actually created on the device. Thenvidiaexamples in older notes are placeholders, not a required default.thorctl quickstartis a guided helper, not a flash utility; it assumes you already have the bootable USB installer and a physical Thor board.
- If the Debug-USB console does not appear, run
Scripts/jetson-thor/thor_serial.sh listand confirm the second/dev/cu.usbserial-*path is present. - If the OEM-config console does not appear, confirm the cable is on Thor USB-C
5a, not the Debug-USB port. - If the bootstrap helper pauses at
sudo, stay in the terminal. THOR opens the command with a TTY so the normal password prompt can work. - If the USB tether never appears, wait a few seconds after the CUI setup completes and check that macOS assigned a
192.168.55.xaddress. - If you are validating THOR from source rather than bringing up hardware, use
make test-unitfor the fast local gate andmake testwhen Docker Desktop is running.