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_ROOT=%~dp0..\hermes
|
||||||
set HERMES_CONFIG=%HERMES_ROOT%\config.yaml
|
set HERMES_CONFIG=%HERMES_ROOT%\config.yaml
|
||||||
set PYTHON=%~dp0python\python.exe
|
set PYTHON=%~dp0python\python.exe
|
||||||
|
set HERMES_CLI=%~dp0python\Scripts\hermes.exe
|
||||||
set PIP=%~dp0python\Scripts\pip.exe
|
set PIP=%~dp0python\Scripts\pip.exe
|
||||||
set WHEELS_DIR=%~dp0bin\wheels
|
set WHEELS_DIR=%~dp0bin\wheels
|
||||||
set MARKER=%~dp0\.installed
|
set MARKER=%~dp0\.installed
|
||||||
@@ -90,7 +91,14 @@ echo [*] Starting Hermes CLI (online mode - opencode-go)...
|
|||||||
echo.
|
echo.
|
||||||
call :ensure_mcp
|
call :ensure_mcp
|
||||||
set HERMES_HOME=%~dp0..\hermes
|
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.
|
echo.
|
||||||
pause
|
pause
|
||||||
goto menu
|
goto menu
|
||||||
@@ -125,9 +133,16 @@ goto wait_llm
|
|||||||
:skip_wait
|
:skip_wait
|
||||||
echo.
|
echo.
|
||||||
echo [*] Starting Hermes CLI (offline mode - local LLM)...
|
echo [*] Starting Hermes CLI (offline mode - local LLM)...
|
||||||
set HERMES_HOME=%~dp0..\hermes\offline
|
echo [*] Using single config.yaml with auto-fallback to lmstudio provider.
|
||||||
if not exist "!HERMES_HOME!" mkdir "!HERMES_HOME!"
|
set HERMES_HOME=%~dp0..\hermes
|
||||||
"!PYTHON!" -m hermes_cli --config "!HERMES_ROOT!\config.offline.yaml"
|
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.
|
echo.
|
||||||
pause
|
pause
|
||||||
goto menu
|
goto menu
|
||||||
|
|||||||
@@ -43,6 +43,13 @@ if (-not (Test-Path $Marker)) {
|
|||||||
Write-Host "[OK] Hermes Agent installed." -ForegroundColor Green
|
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
|
# Auto-start Windows-MCP server
|
||||||
$mcpHealth = "http://127.0.0.1:8000/mcp/health"
|
$mcpHealth = "http://127.0.0.1:8000/mcp/health"
|
||||||
try {
|
try {
|
||||||
@@ -69,7 +76,7 @@ try {
|
|||||||
# Launch Hermes
|
# Launch Hermes
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "[*] Starting Hermes Agent..."
|
Write-Host "[*] Starting Hermes Agent..."
|
||||||
& $PythonExe -m hermes_cli --config $HermesConfig
|
& $HermesExe --config $HermesConfig
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "[*] Hermes exited."
|
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
|
set PORT=11434
|
||||||
|
|
||||||
@@ -172,7 +174,7 @@ if !GPU_FOUND! equ 1 (
|
|||||||
|
|
||||||
echo [*] Starting llama-server with GPU acceleration (Vulkan)...
|
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
|
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! ^
|
--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 [*] 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
|
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! ^
|
--host 127.0.0.1 --port !PORT! ^
|
||||||
|
|
||||||
@@ -241,4 +243,3 @@ echo.
|
|||||||
echo [*] Server exited with code !errorlevel!
|
echo [*] Server exited with code !errorlevel!
|
||||||
|
|
||||||
pause
|
pause
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,8 @@ cd /d "%~dp0"
|
|||||||
set MCP_PORT=8000
|
set MCP_PORT=8000
|
||||||
set MCP_HOST=127.0.0.1
|
set MCP_HOST=127.0.0.1
|
||||||
set WHEELS_DIR=%~dp0bin\wheels-windows-mcp
|
set WHEELS_DIR=%~dp0bin\wheels-windows-mcp
|
||||||
set PYTHON_MAIN=%~dp0python\python.exe
|
set PYTHON=%~dp0python\python.exe
|
||||||
set PYTHON313=%~dp0python313\python.exe
|
|
||||||
set MARKER=%~dp0bin\.windows-mcp-installed
|
set MARKER=%~dp0bin\.windows-mcp-installed
|
||||||
set PYTHON_CMD=
|
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ============================================
|
echo ============================================
|
||||||
@@ -33,57 +31,24 @@ echo.
|
|||||||
exit /b 0
|
exit /b 0
|
||||||
)
|
)
|
||||||
|
|
||||||
:: --- Find Python 3.13+ -------------------------------------------------------
|
:: --- Check Python exists -----------------------------------------------------
|
||||||
echo [*] Looking for Python 3.13+...
|
if not exist "!PYTHON!" (
|
||||||
|
echo [ERROR] Embedded Python 3.13 not found at !PYTHON!
|
||||||
:: Tier 1: Dedicated python313\ directory
|
echo.
|
||||||
if exist "!PYTHON313!" (
|
pause
|
||||||
"!PYTHON313!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul
|
exit /b 1
|
||||||
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+)
|
:: Verify it's 3.13+
|
||||||
if exist "!PYTHON_MAIN!" (
|
"!PYTHON!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul
|
||||||
"!PYTHON_MAIN!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul
|
if !errorlevel! neq 0 (
|
||||||
if !errorlevel! equ 0 (
|
echo [ERROR] Embedded Python is not 3.13+ (need >=3.13 for windows-mcp)
|
||||||
echo [OK] Found Python 3.13: !PYTHON_MAIN!
|
"!PYTHON!" --version
|
||||||
set PYTHON_CMD=!PYTHON_MAIN!
|
echo.
|
||||||
goto install_and_run
|
pause
|
||||||
) else (
|
exit /b 1
|
||||||
"!PYTHON_MAIN!" --version 2>nul
|
|
||||||
echo [INFO] Main Python version is not 3.13+ (need >=3.13 for windows-mcp)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
echo [OK] Found Python 3.13: !PYTHON!
|
||||||
:: 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
|
|
||||||
echo.
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:: --- Install from local wheels -----------------------------------------------
|
:: --- Install from local wheels -----------------------------------------------
|
||||||
:install_and_run
|
:install_and_run
|
||||||
@@ -94,10 +59,10 @@ if not exist "!WHEELS_DIR!\windows_mcp-*-py3-none-any.whl" (
|
|||||||
) else (
|
) else (
|
||||||
if not exist "!MARKER!" (
|
if not exist "!MARKER!" (
|
||||||
echo [*] Installing Windows-MCP from local wheels...
|
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 (
|
if errorlevel 1 (
|
||||||
echo [WARN] Offline install failed, trying online...
|
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 (
|
if errorlevel 1 (
|
||||||
echo [ERROR] Failed to install windows-mcp.
|
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
|
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 --------------------------------------------------------------
|
||||||
:run_server
|
:run_server
|
||||||
echo.
|
echo.
|
||||||
@@ -140,7 +93,7 @@ echo.
|
|||||||
echo [*] Press Ctrl+C to stop the server.
|
echo [*] Press Ctrl+C to stop the server.
|
||||||
echo.
|
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.
|
||||||
echo [*] Server exited with code !errorlevel!
|
echo [*] Server exited with code !errorlevel!
|
||||||
|
|||||||
Reference in New Issue
Block a user