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:
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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!
|
||||
|
||||
Reference in New Issue
Block a user