diff --git a/hermes_cli/setup.py b/hermes_cli/setup.py index a766e3afe..946021a2a 100644 --- a/hermes_cli/setup.py +++ b/hermes_cli/setup.py @@ -662,16 +662,11 @@ def run_setup_wizard(args): print() # Show file locations prominently - print(color("📁 Your configuration files:", Colors.CYAN, Colors.BOLD)) + print(color("📁 All your files are in ~/.hermes/:", Colors.CYAN, Colors.BOLD)) print() print(f" {color('Settings:', Colors.YELLOW)} {get_config_path()}") - print(f" Model, terminal backend, compression, etc.") - print() print(f" {color('API Keys:', Colors.YELLOW)} {get_env_path()}") - print(f" OpenRouter, Custom Endpoint, tool API keys") - print() - print(f" {color('Data:', Colors.YELLOW)} {hermes_home}/") - print(f" Cron jobs, sessions, logs") + print(f" {color('Data:', Colors.YELLOW)} {hermes_home}/cron/, sessions/, logs/") print() print(color("─" * 60, Colors.DIM)) diff --git a/scripts/install.ps1 b/scripts/install.ps1 index 9cecb4582..caf80288d 100644 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -15,7 +15,8 @@ param( [switch]$NoVenv, [switch]$SkipSetup, [string]$Branch = "main", - [string]$InstallDir = "$env:USERPROFILE\.hermes-agent" + [string]$HermesHome = "$env:USERPROFILE\.hermes", + [string]$InstallDir = "$env:USERPROFILE\.hermes\hermes-agent" ) $ErrorActionPreference = "Stop" @@ -248,36 +249,40 @@ function Set-PathVariable { function Copy-ConfigTemplates { Write-Info "Setting up configuration files..." - Push-Location $InstallDir + # Create ~/.hermes directory structure (config at top level, code in subdir) + New-Item -ItemType Directory -Force -Path "$HermesHome\cron" | Out-Null + New-Item -ItemType Directory -Force -Path "$HermesHome\sessions" | Out-Null + New-Item -ItemType Directory -Force -Path "$HermesHome\logs" | Out-Null - # Create .env from example - if (-not (Test-Path ".env")) { - if (Test-Path ".env.example") { - Copy-Item ".env.example" ".env" - Write-Success "Created .env from template" + # Create .env at ~/.hermes/.env (top level, easy to find) + $envPath = "$HermesHome\.env" + if (-not (Test-Path $envPath)) { + $examplePath = "$InstallDir\.env.example" + if (Test-Path $examplePath) { + Copy-Item $examplePath $envPath + Write-Success "Created ~/.hermes/.env from template" + } else { + # Create empty .env if no example exists + New-Item -ItemType File -Force -Path $envPath | Out-Null + Write-Success "Created ~/.hermes/.env" } } else { - Write-Info ".env already exists, keeping it" + Write-Info "~/.hermes/.env already exists, keeping it" } - # Create cli-config.yaml from example - if (-not (Test-Path "cli-config.yaml")) { - if (Test-Path "cli-config.yaml.example") { - Copy-Item "cli-config.yaml.example" "cli-config.yaml" - Write-Success "Created cli-config.yaml from template" + # Create config.yaml at ~/.hermes/config.yaml (top level, easy to find) + $configPath = "$HermesHome\config.yaml" + if (-not (Test-Path $configPath)) { + $examplePath = "$InstallDir\cli-config.yaml.example" + if (Test-Path $examplePath) { + Copy-Item $examplePath $configPath + Write-Success "Created ~/.hermes/config.yaml from template" } } else { - Write-Info "cli-config.yaml already exists, keeping it" + Write-Info "~/.hermes/config.yaml already exists, keeping it" } - Pop-Location - - # Create user data directory - $hermesDir = "$env:USERPROFILE\.hermes" - New-Item -ItemType Directory -Force -Path "$hermesDir\cron" | Out-Null - New-Item -ItemType Directory -Force -Path "$hermesDir\sessions" | Out-Null - New-Item -ItemType Directory -Force -Path "$hermesDir\logs" | Out-Null - Write-Success "Created ~/.hermes data directory" + Write-Success "Configuration directory ready: ~/.hermes/" } function Install-NodeDeps { @@ -330,16 +335,16 @@ function Write-Completion { Write-Host "" # Show file locations - Write-Host "📁 Your files:" -ForegroundColor Cyan + Write-Host "📁 Your files (all in ~/.hermes/):" -ForegroundColor Cyan Write-Host "" - Write-Host " Install: " -NoNewline -ForegroundColor Yellow - Write-Host "$InstallDir" Write-Host " Config: " -NoNewline -ForegroundColor Yellow - Write-Host "$env:USERPROFILE\.hermes\config.yaml" + Write-Host "$HermesHome\config.yaml" Write-Host " API Keys: " -NoNewline -ForegroundColor Yellow - Write-Host "$env:USERPROFILE\.hermes\.env" + Write-Host "$HermesHome\.env" Write-Host " Data: " -NoNewline -ForegroundColor Yellow - Write-Host "$env:USERPROFILE\.hermes\ (cron, sessions, logs)" + Write-Host "$HermesHome\cron\, sessions\, logs\" + Write-Host " Code: " -NoNewline -ForegroundColor Yellow + Write-Host "$HermesHome\hermes-agent\" Write-Host "" Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Cyan diff --git a/scripts/install.sh b/scripts/install.sh index 69e283e56..463a0d5be 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -27,7 +27,8 @@ BOLD='\033[1m' # Configuration REPO_URL_SSH="git@github.com:NousResearch/hermes-agent.git" REPO_URL_HTTPS="https://github.com/NousResearch/hermes-agent.git" -INSTALL_DIR="${HERMES_INSTALL_DIR:-$HOME/.hermes-agent}" +HERMES_HOME="$HOME/.hermes" +INSTALL_DIR="${HERMES_INSTALL_DIR:-$HERMES_HOME/hermes-agent}" PYTHON_MIN_VERSION="3.10" # Options @@ -401,31 +402,36 @@ EOF copy_config_templates() { log_info "Setting up configuration files..." - # Create .env from example - if [ ! -f "$INSTALL_DIR/.env" ]; then + # Create ~/.hermes directory structure (config at top level, code in subdir) + mkdir -p "$HERMES_HOME/cron" + mkdir -p "$HERMES_HOME/sessions" + mkdir -p "$HERMES_HOME/logs" + + # Create .env at ~/.hermes/.env (top level, easy to find) + if [ ! -f "$HERMES_HOME/.env" ]; then if [ -f "$INSTALL_DIR/.env.example" ]; then - cp "$INSTALL_DIR/.env.example" "$INSTALL_DIR/.env" - log_success "Created .env from template" + cp "$INSTALL_DIR/.env.example" "$HERMES_HOME/.env" + log_success "Created ~/.hermes/.env from template" + else + # Create empty .env if no example exists + touch "$HERMES_HOME/.env" + log_success "Created ~/.hermes/.env" fi else - log_info ".env already exists, keeping it" + log_info "~/.hermes/.env already exists, keeping it" fi - # Create cli-config.yaml from example - if [ ! -f "$INSTALL_DIR/cli-config.yaml" ]; then + # Create config.yaml at ~/.hermes/config.yaml (top level, easy to find) + if [ ! -f "$HERMES_HOME/config.yaml" ]; then if [ -f "$INSTALL_DIR/cli-config.yaml.example" ]; then - cp "$INSTALL_DIR/cli-config.yaml.example" "$INSTALL_DIR/cli-config.yaml" - log_success "Created cli-config.yaml from template" + cp "$INSTALL_DIR/cli-config.yaml.example" "$HERMES_HOME/config.yaml" + log_success "Created ~/.hermes/config.yaml from template" fi else - log_info "cli-config.yaml already exists, keeping it" + log_info "~/.hermes/config.yaml already exists, keeping it" fi - # Create ~/.hermes directory for user data - mkdir -p "$HOME/.hermes/cron" - mkdir -p "$HOME/.hermes/sessions" - mkdir -p "$HOME/.hermes/logs" - log_success "Created ~/.hermes data directory" + log_success "Configuration directory ready: ~/.hermes/" } install_node_deps() { @@ -473,12 +479,12 @@ print_success() { echo "" # Show file locations - echo -e "${CYAN}${BOLD}📁 Your files:${NC}" + echo -e "${CYAN}${BOLD}📁 Your files (all in ~/.hermes/):${NC}" echo "" - echo -e " ${YELLOW}Install:${NC} $INSTALL_DIR" echo -e " ${YELLOW}Config:${NC} ~/.hermes/config.yaml" echo -e " ${YELLOW}API Keys:${NC} ~/.hermes/.env" - echo -e " ${YELLOW}Data:${NC} ~/.hermes/ (cron, sessions, logs)" + echo -e " ${YELLOW}Data:${NC} ~/.hermes/cron/, sessions/, logs/" + echo -e " ${YELLOW}Code:${NC} ~/.hermes/hermes-agent/" echo "" echo -e "${CYAN}─────────────────────────────────────────────────────────${NC}"