-
Notifications
You must be signed in to change notification settings - Fork 1
Troubleshooting
This page covers the failures most likely to matter during real RGH/JTAG use.
Use rgh health when you want to check local XeCLI settings before connecting to a console or before creating a support bundle:
rgh health
rgh health --jsonThe command stays local and offline. It does not contact the console. It checks config parsing, saved target/profile data, and the local command log.
Saved target endpoints are redacted by default. Use rgh health --include-private only when you need full endpoint text in local output.
Warning statuses are informational and still exit 0. If the command reports a failure, fix the shown local issue first.
If support still needs more context, run rgh support bundle, rgh diagnostics bundle --support, or rgh diag bundle after reviewing the health output.
Use the support command when you need one local package with version, settings, health summary, and command-log context:
rgh support bundle
rgh diagnostics bundle --support
rgh diag bundle
rgh support bundle --out .\xecli-support.zip
rgh diagnostics bundle --support --out .\xecli-support.zip
rgh diagnostics bundle --out .\xecli-diagnostics.zip
rgh diagnostics bundle --folder --out .\xecli-diagnosticsrgh diag bundle is the same command through the short alias. rgh diagnostics bundle stays available for compatibility, and --support switches that tree onto the support bundle layout.
The bundle includes the support or diagnostics report, version.json, redacted health.json and configuration data, command-log exports, release-check.json for the local package-integrity summary, and manifest.json.
The bundle redacts local paths, IP addresses, console IDs, and known secrets. Review the files before sharing because command history can still show workflow context.
Expected behavior in the current release is that small reads line up across all three commands.
Checks:
- re-read the exact same address and size without changing the title state
- confirm the region is still mapped with
rgh mem regions - compare a static buffer before testing a fast-moving game structure
Useful commands:
rgh mem hexdump --addr 0x30000000 --size 0x40
rgh mem peek --addr 0x30000000 --type u32
rgh mem dump --addr 0x30000000 --size 0x40 --out .\mem.binIf the same small region still disagrees across those commands, treat it as target-side instability or a transport/plugin problem rather than normal CLI behavior.
Expected behavior in the current release is fast failure, not long silent hangs.
Checks:
- confirm the console IP is still reachable
- confirm XBDM is listening on the expected port
- run
rgh targetto verify the saved IP and port
Useful commands:
rgh target
rgh ping
rgh status --quickIf status --quick works and full status is slow, the extra time is usually in the FTP 21 check or the optional JRPC2 or user/drive checks rather than XBDM itself.
These messages mean XeCLI could not finish setting or verifying the console target:
Console connection failedConsole connection timed outConsole connection did not complete
Checks:
- confirm the console is powered on and on the same network as the PC
- confirm XBDM is enabled and listening on the expected port
- run
rgh targetto see the saved target - if the console IP changed, run
rgh connect <console-ip>before retrying
Useful commands:
rgh target
rgh start
rgh connect <console-ip>
rgh ping
rgh status --quickIf rgh start finds the console but rgh connect <console-ip> still fails, check the console IP, firewall, and plugin state before trying slower commands such as full rgh status.
That can be correct at the Title ID level while still being unhelpful to an operator.
XeCLI tries to improve that by using the running XEX path as a fallback display name. If you still need a custom name, select a .csv or .txt file under XeTerminal Settings > Paths, set XECLI_TITLE_DATABASE, or add titleids.csv to the active XeCLI configuration directory. That directory is %APPDATA%\XeCLI when installed, UserData beside the executables in portable mode, or the directory selected by XECLI_HOME. Existing titleids.local.csv files continue to work as a legacy fallback.
Plain rgh launch confirms only that XBDM accepted the request. Use --wait when the active XEX must be proven:
rgh launch Hdd1:\Games\Example\default.xex --verify --waitSome active titles deny the directory check used by --verify. For a recovery path you already trust, retry once with --no-verify --wait. XeCLI still requires the active XEX to change and exits nonzero if XBDM acknowledges the request but the title ignores it.
If the known recovery launch is also ignored, use a verified reboot instead of repeating magicboot requests:
rgh reboot --yes --waitPossible reasons:
- you used
status --quick - JRPC2 is not deployed or enabled on the console yet
- JRPC2 is deployed but not healthy
Useful checks:
rgh jrpc2 title-id
rgh jrpc2 dashboard
rgh jrpc2 tempsThis is the main reason the pending-verification flow exists.
Use:
rgh modules load --path Hdd:\HvP2.xex --system --reboot-expectedThen after reboot:
rgh modules pendingDo not treat a disconnect as success unless the post-reboot state confirms it.
XeCLI requires --force because unload can destabilize the target.
Use:
rgh modules unload --name HvP2.xex --forceIf the module handle cannot be resolved:
- confirm the module is actually loaded with
rgh modules list - try unloading by explicit handle if you already know it
Check:
- the console is running a visible title or shell
- the frame buffer format is being decoded into the selected output format
- the output file size is reasonable
- if the image is correct except for a small right-edge strip, use
--crop-rightor--crop-right-percentfor an explicit trim override
A healthy screenshot capture should produce a non-trivial .png or .bmp file with dimensions matching the decoded frame-buffer metadata emitted by the command.
Use more specific filters:
rgh save list --titleid 415608C3 --profile E00012AA8D7879B4
rgh content list --titleid 415608C3Dashboard content trees can be very large if you query them broadly.
Run:
rgh ghidra verify --dir .\decompIf the output contains widespread bad-instruction placeholders, the problem is usually with import or loader quality rather than a terminal formatting issue.
That is expected. They hit different console services.
If FTP commands fail while XBDM commands succeed:
- verify the FTP service is enabled
- verify username, password, and port
- verify the path format you are using
Read FTP and File Transfer for supported FTP sources, the port 21 listener requirement, and the common signs that the console only has XBDM or JRPC2 available.
Use the published setup executable when you expect the Windows wizard, Start menu entry, optional desktop shortcut, and Windows uninstall integration:
.\XeCLI-2.0.0-win-x64-setup.exergh install is also supported, but it is a separate CLI-driven workflow that copies a verified portable release and configures command access. It does not reproduce the setup wizard or create its shortcuts and uninstall entry. Its prompts are skipped when input is redirected, --quiet is used, or scope/path options already define a noninteractive plan.
The setup executable suppresses wizard pages only when launched with Inno Setup silent-install arguments such as /SILENT or /VERYSILENT. For a normal interactive install, rerun the verified setup package without those arguments. Setup does not scan for consoles. Discover or select a target explicitly after setup:
rgh start
rgh connect <console-ip>
rgh statusIf setup added XeCLI to PATH, run those commands from a newly opened terminal. If PATH registration was skipped, run rgh.exe from the installation directory.
XeCLI v2.0.0 packages are not Authenticode-signed, so Windows may identify the publisher as unknown. Confirm that the package came from the official GitHub release and verify the matching .sha256 sidecar before allowing it to run:
$packagePath = ".\XeCLI-2.0.0-win-x64-setup.exe"
$expectedHash = ((Get-Content "${packagePath}.sha256" -Raw).Trim() -split '\s+')[0]
$actualHash = (Get-FileHash $packagePath -Algorithm SHA256).Hash
if ($actualHash -ne $expectedHash) { throw "SHA-256 mismatch. Do not run this package." }
"SHA-256 verified: $actualHash"Use the same command with XeCLI-2.0.0-win-x64.zip when checking the portable package. A matching checksum verifies the downloaded bytes; it does not create a publisher signature.
Setup upgrades an existing XeCLI copy only in the same installation directory. It stops before installing new files when Windows reports another or ambiguous XeCLI location, when the existing copy is missing the ownership manifest needed for a safe upgrade, when the selected folder is a portable package, or when an unrecognized destination already contains files.
Recovery:
- Uninstall the existing XeCLI entry through Windows. The v2.0.0 uninstaller retains settings, cache, command logs, and default captures.
- Rerun the new setup package and select the desired installation directory.
- Open a new terminal if PATH registration changed.
The v1.x uninstaller can leave .xecli-install as the sole item in its old program folder. v2.0.0 setup verifies and removes that exact legacy marker automatically. If the folder contains anything else, setup does not modify it; use an empty dedicated directory instead.
Retained settings remain under %APPDATA%\XeCLI, cache and the default command log remain under %LOCALAPPDATA%\XeCLI, and default XeTerminal captures remain under the Windows Pictures folder at XeCLI\Captures. Configured capture/log directories and any XECLI_HOME directory are also untouched. Delete retained data manually only when you no longer need it.
Do not point setup at an extracted portable package. Choose an empty dedicated installation folder instead. To update portable XeCLI, verify and extract the new ZIP into a new empty folder, close the old copy, and copy only the old UserData folder when you want to retain portable state.
PATH registration is optional and applies only to new processes. Close any terminal that was already open before setup and open a new one. If PATH registration was skipped, run the executable from the selected installation directory or reinstall with PATH enabled. The default setup directory is %LOCALAPPDATA%\Programs\XeCLI for a current-user install and %ProgramFiles%\XeCLI for an all-users install.
For a CLI-driven current-user install, rgh install --no-path creates a per-user command shim without adding the installation directory itself to PATH. All-users --no-path leaves PATH unchanged. See Commands Reference for complete rgh install behavior.
The published win-x64 portable release should not require a separate .NET install. If you see a runtime-missing error:
- you are probably using an older framework-dependent build
- or you are running a source build instead of the packaged release
Use the latest release archive from GitHub Releases. The release folder should contain:
-
rgh.exeandXeTerminal.exe - bundled runtime files beside it
Assets/-
ghidra_scripts/andida_scripts/ -
LICENSE, required third-party notices/licenses, matching-tag source directions underPROVENANCE/, and integrity manifests - the empty
xecli.portablemarker in the portable ZIP only
ConsoleDependencies/ is not supplied in the release. It appears only if you add permitted console-side plugin files for homebrew staging.
If you are intentionally running from source, install the .NET 10 SDK selected by global.json and use:
dotnet run --project src/Xbox360.Remote.Cli -- --helpThe zip releases are the portable builds. The setup executable is the installer.
The portable ZIP contains an xecli.portable marker beside the executables. While that marker is present, XeCLI stores configuration, cache, command logs, and default captures under the package-local UserData folder. Keep the marker with the executables when moving the folder.
XECLI_HOME takes precedence over the marker. If it is set, XeCLI stores application state in that custom directory instead of package-local UserData.
Portable use makes no installation changes by default. You can explicitly run .\rgh.exe install from the extracted release to copy it into a current-user or all-users installation and configure command access. rgh install --uninstall removes that CLI registration but does not delete the installed folder or user data.
Use the setup executable when you want:
- PATH registration
- XeCLI Start menu integration
- optional XeCLI desktop shortcut creation
- uninstall integration
- the installer-owned language selection step
Install and same-directory upgrade keep existing UiLanguage and PathPromptHandled settings. If config.json is malformed, setup leaves it untouched instead of replacing the file.
Uninstall always retains settings under %APPDATA%\XeCLI, cache and the default command log under %LOCALAPPDATA%\XeCLI, and default XeTerminal captures under the Windows Pictures folder at XeCLI\Captures. Configured capture/log directories and any XECLI_HOME directory are also retained. Remove these locations manually only when you no longer need them.
Use the zip release when you want:
- a portable folder you can run directly
- no installation changes on the machine
- manual control over where the files live
XeCLI v2.0.0 publishes one supported portable package for 64-bit Windows: XeCLI-2.0.0-win-x64.zip.
XeCLI documentation for the rgh command. For release downloads, use the latest release.