fix: correct broken batch file paths and update README

- start-llama-server.bat: fix LLAMA_DIR to bin\llama (was bin\ollama),
  fix model to qwen2.5-coder-1.5b (was Llama-3.2-1B), use correct
  GPU (llama-server.exe) and CPU (cpu\llama-server-cpu.exe) binaries
- start-windows-mcp.bat: remove dead python313\ tier, use single
  embedded Python 3.13 at python\python.exe
- run-hermes.bat: use Scripts\hermes.exe instead of -m hermes_cli
  (no __main__.py in package), fix offline mode to use single
  config.yaml instead of non-existent config.offline.yaml
- run-hermes.ps1: same hermes_cli → hermes.exe fix
- README.txt: update to match actual USB state (Python 3.13, 142
  wheels, Qwen2.5-Coder-1.5B 1117MB model, correct dir structure)
This commit is contained in:
2026-07-12 12:37:52 -04:00
parent 2b7a8290a5
commit 14cf8332a2
5 changed files with 104 additions and 78 deletions
+50
View File
@@ -0,0 +1,50 @@
Hermes Portable Rescue USB
===========================
Multi-boot IT rescue toolkit — boot from ISO or use on a running Windows PC.
🥾 BOOT MODE (Ventoy)
Restart PC -> F12/F2/ESC -> select USB -> pick ISO/hermes-rescue.iso
Boots Xubuntu with auto-launching hardware diagnostics + Hermes AI.
🪟 WINDOWS PORTABLE MODE
Plug USB into any Windows PC, open windows-hermes/, double-click:
run-hermes.bat
MENU:
1) Hermes CLI — auto: online (opencode-go), falls back to local LLM
2) Hermes CLI — force offline (pre-starts local llama.cpp)
3) Web Dashboard + AI Chat — http://rescue.local:8080 / http://localhost:9090
4) Hardware Diagnostics — CPU, RAM, disks, GPU, BSOD, drivers
5) Disk Tools — CrystalDiskInfo (SMART health check on Discrete)
6) Windows MCP Server — UI Automation (click, type, screenshot)
7) Exit
📂 USB STRUCTURE
/ISO/ — Bootable ISO images (Ventoy)
/hermes/ — Config, scripts, auth, web dashboard
config.yaml — Online + offline providers (auto-fallback)
auth.json — Your opencode-go credentials
scripts/diagnose_windows.py — Windows-native hardware diagnostics
web/server.py — Hardware dashboard on :8080
tools/disk-info/ — CrystalDiskInfo portable
/windows-hermes/ — Windows portable agent (embedded Python 3.13)
python/ — Embedded Python 3.13 + Hermes Agent 0.15.x
bin/
wheels/ — 47 pre-downloaded Hermes Agent .whl files
wheels-windows-mcp/ — 95 pre-downloaded Windows-MCP .whl files
llama/ — llama-server.exe + CPU-optimized builds
ollama/ — Qwen2.5-Coder-1.5B GGUF model (1,117 MB)
run-hermes.bat — Main launcher (double-click)
start-llama-server.bat — Starts local LLM (auto-detects GPU)
start-windows-mcp.bat — Starts Windows-MCP UI Automation
start-hermes-dashboard.bat — Starts Hermes AI Chat on :9090
/ventoy/ — Ventoy bootloader config
🔑 NOTES
- Online mode: opencode-go (deepseek-v4-flash) — uses your credentials
- Offline mode: llama.cpp (Qwen2.5-Coder-1.5B Q4_K_M) — auto GPU detection, ~2 GB RAM
- All modes share the same memory/session data
- Diagnostics and dashboard work fully offline
- CrystalDiskInfo requires admin for SMART data on some systems
- Windows-MCP (UI Automation) requires admin for screenshots/clicking
- Hermes AI Chat at http://localhost:9090 (requires llama-server running)
+19 -4
View File
@@ -8,6 +8,7 @@ set HERMES_HOME=%~dp0..\hermes
set HERMES_ROOT=%~dp0..\hermes
set HERMES_CONFIG=%HERMES_ROOT%\config.yaml
set PYTHON=%~dp0python\python.exe
set HERMES_CLI=%~dp0python\Scripts\hermes.exe
set PIP=%~dp0python\Scripts\pip.exe
set WHEELS_DIR=%~dp0bin\wheels
set MARKER=%~dp0\.installed
@@ -90,7 +91,14 @@ echo [*] Starting Hermes CLI (online mode - opencode-go)...
echo.
call :ensure_mcp
set HERMES_HOME=%~dp0..\hermes
"!PYTHON!" -m hermes_cli --config "!HERMES_CONFIG!"
if not exist "!HERMES_CLI!" (
echo [ERROR] Hermes CLI not found at !HERMES_CLI!
echo Run this script again to install Hermes Agent first.
echo.
pause
goto menu
)
"!HERMES_CLI!" --config "!HERMES_CONFIG!"
echo.
pause
goto menu
@@ -125,9 +133,16 @@ goto wait_llm
:skip_wait
echo.
echo [*] Starting Hermes CLI (offline mode - local LLM)...
set HERMES_HOME=%~dp0..\hermes\offline
if not exist "!HERMES_HOME!" mkdir "!HERMES_HOME!"
"!PYTHON!" -m hermes_cli --config "!HERMES_ROOT!\config.offline.yaml"
echo [*] Using single config.yaml with auto-fallback to lmstudio provider.
set HERMES_HOME=%~dp0..\hermes
if not exist "!HERMES_CLI!" (
echo [ERROR] Hermes CLI not found at !HERMES_CLI!
echo Run this script again to install Hermes Agent first.
echo.
pause
goto menu
)
"!HERMES_CLI!" --config "!HERMES_CONFIG!"
echo.
pause
goto menu
+8 -1
View File
@@ -43,6 +43,13 @@ if (-not (Test-Path $Marker)) {
Write-Host "[OK] Hermes Agent installed." -ForegroundColor Green
}
# Check Hermes CLI installed
if (-not (Test-Path $HermesExe)) {
Write-Host "[ERROR] Hermes CLI not found at $HermesExe" -ForegroundColor Red
Write-Host "Run this script again to install Hermes Agent first."
exit 1
}
# Auto-start Windows-MCP server
$mcpHealth = "http://127.0.0.1:8000/mcp/health"
try {
@@ -69,7 +76,7 @@ try {
# Launch Hermes
Write-Host ""
Write-Host "[*] Starting Hermes Agent..."
& $PythonExe -m hermes_cli --config $HermesConfig
& $HermesExe --config $HermesConfig
Write-Host ""
Write-Host "[*] Hermes exited."
+8 -7
View File
@@ -22,9 +22,11 @@ cd /d "%~dp0"
set LLAMA_DIR=%~dp0bin\ollama
set LLAMA_DIR=%~dp0bin\llama
set MODEL=%LLAMA_DIR%\Llama-3.2-1B-Instruct-Q4_K_M.gguf
set OLLAMA_DIR=%~dp0bin\ollama
set MODEL=%OLLAMA_DIR%\qwen2.5-coder-1.5b-q4_k_m.gguf
set PORT=11434
@@ -172,7 +174,7 @@ if !GPU_FOUND! equ 1 (
echo [*] Starting llama-server with GPU acceleration (Vulkan)...
echo [*] Model: Llama-3.2-1B (Q4_K_M)
echo [*] Model: Qwen2.5-Coder-1.5B (Q4_K_M)
echo [*] Server: http://127.0.0.1:!PORT!/v1
@@ -186,7 +188,7 @@ if !GPU_FOUND! equ 1 (
"!LLAMA_DIR!\llama-server-vulkan.exe" ^
"!LLAMA_DIR!\llama-server.exe" ^
--host 127.0.0.1 --port !PORT! ^
@@ -206,7 +208,7 @@ if !GPU_FOUND! equ 1 (
echo [*] No compatible GPU found. Starting CPU-only mode.
echo [*] Model: Llama-3.2-1B (Q4_K_M)
echo [*] Model: Qwen2.5-Coder-1.5B (Q4_K_M)
echo [*] Server: http://127.0.0.1:!PORT!/v1
@@ -220,7 +222,7 @@ if !GPU_FOUND! equ 1 (
"!LLAMA_DIR!\llama-server.exe" ^
"!LLAMA_DIR!\cpu\llama-server-cpu.exe" ^
--host 127.0.0.1 --port !PORT! ^
@@ -241,4 +243,3 @@ echo.
echo [*] Server exited with code !errorlevel!
pause
+19 -66
View File
@@ -7,10 +7,8 @@ cd /d "%~dp0"
set MCP_PORT=8000
set MCP_HOST=127.0.0.1
set WHEELS_DIR=%~dp0bin\wheels-windows-mcp
set PYTHON_MAIN=%~dp0python\python.exe
set PYTHON313=%~dp0python313\python.exe
set PYTHON=%~dp0python\python.exe
set MARKER=%~dp0bin\.windows-mcp-installed
set PYTHON_CMD=
echo.
echo ============================================
@@ -33,57 +31,24 @@ echo.
exit /b 0
)
:: --- Find Python 3.13+ -------------------------------------------------------
echo [*] Looking for Python 3.13+...
:: Tier 1: Dedicated python313\ directory
if exist "!PYTHON313!" (
"!PYTHON313!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul
if !errorlevel! equ 0 (
echo [OK] Found dedicated Python 3.13: !PYTHON313!
set PYTHON_CMD=!PYTHON313!
goto install_and_run
)
)
:: Tier 2: Main portable Python (if 3.13+)
if exist "!PYTHON_MAIN!" (
"!PYTHON_MAIN!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul
if !errorlevel! equ 0 (
echo [OK] Found Python 3.13: !PYTHON_MAIN!
set PYTHON_CMD=!PYTHON_MAIN!
goto install_and_run
) else (
"!PYTHON_MAIN!" --version 2>nul
echo [INFO] Main Python version is not 3.13+ (need >=3.13 for windows-mcp)
)
)
:: Tier 3: uv/uvx (handles its own Python)
where uvx >nul 2>&1
if !errorlevel! equ 0 (
echo [OK] Using uvx (auto-manages Python)
goto use_uvx
)
where uvx.exe >nul 2>&1
if !errorlevel! equ 0 (
echo [OK] Using uvx (auto-manages Python)
goto use_uvx
)
:: No Python 3.13+ found
echo.
echo [ERROR] No Python 3.13+ found and uvx is not available.
echo.
echo To use Windows-MCP, you need one of:
echo A) Place Python 3.13 portable in: python313\
echo (Download from https://www.python.org/downloads/)
echo B) Install uv and ensure it's in PATH:
echo winget install astral.uv
echo or: npm install -g uv
:: --- Check Python exists -----------------------------------------------------
if not exist "!PYTHON!" (
echo [ERROR] Embedded Python 3.13 not found at !PYTHON!
echo.
pause
exit /b 1
)
:: Verify it's 3.13+
"!PYTHON!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul
if !errorlevel! neq 0 (
echo [ERROR] Embedded Python is not 3.13+ (need >=3.13 for windows-mcp)
"!PYTHON!" --version
echo.
pause
exit /b 1
)
echo [OK] Found Python 3.13: !PYTHON!
:: --- Install from local wheels -----------------------------------------------
:install_and_run
@@ -94,10 +59,10 @@ if not exist "!WHEELS_DIR!\windows_mcp-*-py3-none-any.whl" (
) else (
if not exist "!MARKER!" (
echo [*] Installing Windows-MCP from local wheels...
"!PYTHON_CMD!" -m pip install --no-index --find-links "!WHEELS_DIR!" --quiet windows-mcp 2>&1
"!PYTHON!" -m pip install --no-index --find-links "!WHEELS_DIR!" --quiet windows-mcp 2>&1
if errorlevel 1 (
echo [WARN] Offline install failed, trying online...
"!PYTHON_CMD!" -m pip install --quiet windows-mcp 2>&1
"!PYTHON!" -m pip install --quiet windows-mcp 2>&1
)
if errorlevel 1 (
echo [ERROR] Failed to install windows-mcp.
@@ -112,18 +77,6 @@ if not exist "!WHEELS_DIR!\windows_mcp-*-py3-none-any.whl" (
)
goto run_server
:: --- Use uvx -----------------------------------------------------------------
:use_uvx
echo [*] Starting via uvx (auto-manages dependencies)...
echo.
echo [*] Press Ctrl+C to stop the server.
echo.
uvx windows-mcp serve --transport sse --host %MCP_HOST% --port %MCP_PORT% --exclude-tools PowerShell,Registry
echo.
echo [*] Server exited with code !errorlevel!
pause
exit /b 0
:: --- Run server --------------------------------------------------------------
:run_server
echo.
@@ -140,7 +93,7 @@ echo.
echo [*] Press Ctrl+C to stop the server.
echo.
"!PYTHON_CMD!" -m windows_mcp serve --transport sse --host %MCP_HOST% --port %MCP_PORT% --exclude-tools PowerShell,Registry
"!PYTHON!" -m windows_mcp serve --transport sse --host %MCP_HOST% --port %MCP_PORT% --exclude-tools PowerShell,Registry
echo.
echo [*] Server exited with code !errorlevel!