mirror of
https://github.com/Heretek-AI/ProxmoxVED.git
synced 2026-07-01 12:42:58 -04:00
Merge pull request #10 from community-unscripted/Hermes-Agent
Hermes agent
This commit is contained in:
@@ -13,3 +13,4 @@ vm/debian-13-vm.sh
|
||||
vm/vm-manager.sh
|
||||
vm/vm-manager.sh
|
||||
vm/debian-13-vm.sh
|
||||
.roo/mcp.json
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
__ __
|
||||
/ /_ ___ _________ ___ ___ _____ ____ _____ ____ ____ / /_
|
||||
/ __ \/ _ \/ ___/ __ `__ \/ _ \/ ___/_____/ __ `/ __ `/ _ \/ __ \/ __/
|
||||
/ / / / __/ / / / / / / / __(__ )_____/ /_/ / /_/ / __/ / / / /_
|
||||
/_/ /_/\___/_/ /_/ /_/ /_/\___/____/ \__,_/\__, /\___/_/ /_/\__/
|
||||
/____/
|
||||
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
# Set the base URL for development/fork - must be set before sourcing build.func
|
||||
COMMUNITY_SCRIPTS_URL="${COMMUNITY_SCRIPTS_URL:-https://raw.githubusercontent.com/community-unscripted/ProxmoxVED/Hermes-Agent}"
|
||||
source <(curl -fsSL ${COMMUNITY_SCRIPTS_URL}/misc/build.func)
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: community-scripts
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/NousResearch/hermes-agent
|
||||
|
||||
APP="Hermes"
|
||||
var_tags="${var_tags:-ai;agent;llm;automation}"
|
||||
var_cpu="${var_cpu:-8}"
|
||||
var_ram="${var_ram:-16384}"
|
||||
var_disk="${var_disk:-50}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/hermes-agent ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ ! -x /opt/hermes-agent/.venv/bin/hermes ]]; then
|
||||
msg_error "Hermes executable not found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop hermes-agent
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Configuration"
|
||||
cp -r /root/.hermes /opt/hermes_backup 2>/dev/null || true
|
||||
msg_ok "Backed up Configuration"
|
||||
|
||||
msg_info "Updating Hermes Agent"
|
||||
cd /opt/hermes-agent
|
||||
export VIRTUAL_ENV="/opt/hermes-agent/.venv"
|
||||
$STD /opt/hermes-agent/.venv/bin/hermes update
|
||||
msg_ok "Updated Hermes Agent"
|
||||
|
||||
msg_info "Restoring Configuration"
|
||||
cp -r /opt/hermes_backup/. /root/.hermes 2>/dev/null || true
|
||||
rm -rf /opt/hermes_backup
|
||||
msg_ok "Restored Configuration"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start hermes-agent
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using use the CLI: hermes${CL}"
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "Hermes",
|
||||
"slug": "hermes",
|
||||
"categories": [20],
|
||||
"date_created": "2026-03-09",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://hermes-agent.nousresearch.com/docs/",
|
||||
"website": "https://hermes-agent.nousresearch.com/",
|
||||
"logo": "https://raw.githubusercontent.com/NousResearch/hermes-agent/main/assets/banner.png",
|
||||
"config_path": "/opt/hermes-agent/.env",
|
||||
"description": "Self-improving AI agent with built-in learning loop. Creates skills from experience, improves them during use, and builds a deepening model of user preferences across sessions. Supports multiple LLM providers and messaging platforms.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/hermes.sh",
|
||||
"resources": {
|
||||
"cpu": 8,
|
||||
"ram": 16384,
|
||||
"hdd": 50,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Run '/opt/hermes-agent/.venv/bin/hermes setup' after installation to configure your LLM provider.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Requires API key from OpenAI, OpenRouter, or Nous Portal.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: community-scripts
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/NousResearch/hermes-agent
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
git \
|
||||
build-essential \
|
||||
python3-dev \
|
||||
libffi-dev \
|
||||
ripgrep \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.11" setup_uv
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
msg_info "Cloning Hermes Agent Repository"
|
||||
cd /opt
|
||||
$STD git clone --recurse-submodules https://github.com/NousResearch/hermes-agent.git hermes-agent
|
||||
cd /opt/hermes-agent
|
||||
msg_ok "Cloned Repository"
|
||||
|
||||
msg_info "Installing Python Dependencies"
|
||||
$STD uv venv .venv --python 3.11
|
||||
export VIRTUAL_ENV="/opt/hermes-agent/.venv"
|
||||
$STD uv pip install -e ".[all]"
|
||||
|
||||
msg_info "Installing Submodules"
|
||||
if [[ -d "mini-swe-agent" && -f "mini-swe-agent/pyproject.toml" ]]; then
|
||||
$STD uv pip install -e "./mini-swe-agent"
|
||||
fi
|
||||
if [[ -d "tinker-atropos" && -f "tinker-atropos/pyproject.toml" ]]; then
|
||||
$STD uv pip install -e "./tinker-atropos"
|
||||
fi
|
||||
msg_ok "Installed Python Dependencies"
|
||||
|
||||
msg_info "Creating Configuration Directory"
|
||||
mkdir -p /root/.hermes/{cron,sessions,logs,pairing,hooks,image_cache,audio_cache,memories,skills,whatsapp/session}
|
||||
msg_ok "Created Configuration Directory"
|
||||
|
||||
msg_info "Creating Environment File"
|
||||
if [[ -f "/opt/hermes-agent/.env.example" ]]; then
|
||||
cp /opt/hermes-agent/.env.example /root/.hermes/.env
|
||||
else
|
||||
cat <<EOF >/root/.hermes/.env
|
||||
# Hermes Agent Configuration
|
||||
# Add your LLM provider API keys below
|
||||
|
||||
# OpenAI (optional)
|
||||
# OPENAI_API_KEY=sk-...
|
||||
|
||||
# OpenRouter (optional)
|
||||
# OPENROUTER_API_KEY=sk-or-...
|
||||
|
||||
# Nous Portal (optional)
|
||||
# NOUS_API_KEY=...
|
||||
|
||||
# Server configuration
|
||||
HERMES_HOST=0.0.0.0
|
||||
HERMES_PORT=8000
|
||||
EOF
|
||||
fi
|
||||
msg_ok "Created Environment File"
|
||||
|
||||
msg_info "Creating Config File"
|
||||
if [[ -f "/opt/hermes-agent/cli-config.yaml.example" ]]; then
|
||||
cp /opt/hermes-agent/cli-config.yaml.example /root/.hermes/config.yaml
|
||||
fi
|
||||
msg_ok "Created Config File"
|
||||
|
||||
msg_info "Creating SOUL.md Persona File"
|
||||
cat <<'EOF' >/root/.hermes/SOUL.md
|
||||
# Hermes Agent Persona
|
||||
|
||||
<!--
|
||||
This file defines the agent's personality and tone.
|
||||
The agent will embody whatever you write here.
|
||||
Edit this to customize how Hermes communicates with you.
|
||||
|
||||
Examples:
|
||||
- "You are a warm, playful assistant who uses kaomoji occasionally."
|
||||
- "You are a concise technical expert. No fluff, just facts."
|
||||
- "You speak like a friendly coworker who happens to know everything."
|
||||
|
||||
This file is loaded fresh each message -- no restart needed.
|
||||
Delete the contents (or this file) to use the default personality.
|
||||
-->
|
||||
EOF
|
||||
msg_ok "Created SOUL.md"
|
||||
|
||||
msg_info "Creating Symlink for Hermes Command"
|
||||
mkdir -p /root/.local/bin
|
||||
ln -sf /opt/hermes-agent/.venv/bin/hermes /root/.local/bin/hermes
|
||||
msg_ok "Created Symlink"
|
||||
|
||||
msg_info "Syncing Bundled Skills"
|
||||
if [[ -d "/opt/hermes-agent/skills" ]]; then
|
||||
$STD /opt/hermes-agent/.venv/bin/python /opt/hermes-agent/tools/skills_sync.py 2>/dev/null || \
|
||||
cp -r /opt/hermes-agent/skills/* /root/.hermes/skills/ 2>/dev/null || true
|
||||
fi
|
||||
msg_ok "Synced Skills"
|
||||
|
||||
msg_info "Installing Node.js Dependencies (for browser tools)"
|
||||
if [[ -f "/opt/hermes-agent/package.json" ]]; then
|
||||
cd /opt/hermes-agent
|
||||
$STD npm install --silent 2>/dev/null || true
|
||||
msg_info "Installing Playwright Browser"
|
||||
$STD npx --yes playwright install chromium 2>/dev/null || true
|
||||
fi
|
||||
|
||||
if [[ -f "/opt/hermes-agent/scripts/whatsapp-bridge/package.json" ]]; then
|
||||
cd /opt/hermes-agent/scripts/whatsapp-bridge
|
||||
$STD npm install --silent 2>/dev/null || true
|
||||
fi
|
||||
msg_ok "Installed Node.js Dependencies"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/hermes-agent.service
|
||||
[Unit]
|
||||
Description=Hermes Agent - Self-improving AI Agent
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/hermes-agent
|
||||
Environment=PATH=/root/.local/bin:/usr/local/bin:/usr/bin:/bin
|
||||
EnvironmentFile=/root/.hermes/.env
|
||||
ExecStart=/opt/hermes-agent/.venv/bin/hermes gateway
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now hermes-agent
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
Reference in New Issue
Block a user