Skill: dongyu23/hermes-installer (version 1.1.7)

--- name: hermes-installer description: Hermes Agent 安装配置完整指南。当用户要求安装 Hermes Agent、部署 Hermes、配置模型提供商、配置飞书/Telegram/Discord 网关时使用此 Skill。触发词：安装 Hermes、部署 Hermes Agent、配置 Hermes、配置 GLM、配置 Kimi、配置 OpenRouter、配置阿里云百炼、配置腾讯云、配置火山引擎、配置阶跃星辰、Hermes 更新、Hermes 飞书配置。 metadata: openclaw: requires: env: - OPENAI_API_KEY - OPENAI_BASE_URL bins: - git - python - pip - docker --- # Hermes Agent 安装配置指南 ## 系统支持 - **Linux/macOS**：使用 `.sh` 脚本 - **Windows**：以下三种方式任选其一： 1. **Git Bash**：安装 Git 后自带，可以直接运行 `.sh` 脚本 2. **WSL**：Windows Linux 子系统 3. **手动执行**：不运行脚本，直接在 PowerShell 中执行对应命令 --- ## CLI 与消息平台 Hermes 有两个入口： ### 1. 终端界面（CLI） 启动交互式终端界面： ```bash hermes ``` ### 2. 消息平台（Gateway） 运行网关，通过消息平台对话： ```bash hermes gateway start ``` **支持的平台**：Telegram、Discord、Slack、WhatsApp、Signal、Email --- ### 常用命令对照表 | 功能 | CLI 命令 | 消息平台命令 | |------|----------|--------------| | 开始聊天 | `hermes run` | 向机器人发送消息 | | 设置网关 | `hermes gateway setup` | - | | 启动网关 | `hermes gateway start` | - | | 新对话 | `/new` 或 `/reset` | `/new` 或 `/reset` | | 改变模型 | `/model [provider:model]` | `/model [provider:model]` | | 设定人格 | `/personality [name]` | `/personality [name]` | | 重试/撤销 | `/retry` 或 `/undo` | `/retry` 或 `/undo` | | 压缩上下文 | `/compress` | `/compress` | | 查看使用 | `/usage` 或 `/insights` | `/usage` 或 `/insights` | | 浏览技能 | `/skills` 或 `/<skill-name>` | `/skills` 或 `/<skill-name>` | | 中断 | Ctrl+C 或发送新消息 | `/stop` 或发送新消息 | | 平台状态 | - | `/status` 或 `/sethome` | --- ## 从 OpenClaw 迁移 如果你是从 OpenClaw 过来的，Hermes 可以自动导入你的设置、记忆、技能和 API 密钥。 ### 首次设置时 运行 `hermes setup`，设置向导会自动检测 `~/.openclaw` 并在配置开始前提供迁移建议。 ### 安装后任何时间 ```bash hermes claw migrate # 交互式迁移（完整配置） hermes claw migrate --dry-run # 预览将要迁移的内容 hermes claw migrate --preset user-data # 不包含密钥的迁移 hermes claw migrate --overwrite # 覆盖已有冲突 ``` ## 快速安装 ### 安装前确认 在执行安装前，**必须向用户确认以下信息**： | 确认项 | 默认值 | 说明 | |--------|--------|------| | **安装位置** | `~/.hermes/hermes-agent` | Hermes Agent 程序目录 | | **配置目录** | `~/.hermes` | 配置文件和日志目录 | | **Python 版本** | 3.11 | 虚拟环境 Python 版本 | **确认话术：** > 将在以下位置安装 Hermes Agent： > - 程序目录：`~/.hermes/hermes-agent` > - 配置目录：`~/.hermes` > > 请选择安装方式： > 1. 命令行部署（推荐，需要 Python 3.11+） > 2. Docker 部署（需要 Docker） > > 请回复数字或方式名称，确认安装？(y/n) ### 安装步骤 **方式一：命令行部署** ```bash # 1. 克隆仓库 git clone https://github.com/NousResearch/hermes-agent.git ~/.hermes/hermes-agent cd ~/.hermes/hermes-agent # 2. 安装 uv（使用 pip，更安全） pip install uv # 3. 创建虚拟环境 uv venv venv --python 3.11 source venv/bin/activate uv pip install -e ".[all]" ``` **方式二：Docker 部署** 详见 [docker-deploy.md](./docker-deploy.md) git clone https://github.com/NousResearch/hermes-agent.git ~/.hermes/hermes-agent cd ~/.hermes/hermes-agent # 2. 安装 uv（使用 pip，更安全） pip install uv # 3. 创建虚拟环境 uv venv venv --python 3.11 source venv/bin/activate uv pip install -e ".[all]" ``` > 提示：使用 pip 安装 uv 不需要执行远程脚本，更安全。如有需要，也可以使用 uv 的预编译二进制：https://github.com/astral-sh/uv/releases ## 配置文件 - 配置文件：`~/.hermes/config.yaml` - 环境变量：`~/.hermes/.env` --- ## 脚本文件列表 | 脚本 | 系统 | 说明 | |------|------|------| | `update-restart.sh` | Linux/macOS | 更新并重启网关 | | `update-restart.ps1` | Windows | 更新并重启网关 | | `uninstall.sh` | Linux/macOS | 卸载 Hermes Agent | | `uninstall.ps1` | Windows | 卸载 Hermes Agent | | `doctor.sh` | Linux/macOS | 健康检查 | | `doctor.ps1` | Windows | 健康检查 | --- ## 更新与重启 ### 手动更新 ```bash cd ~/.hermes/hermes-agent source venv/bin/activate hermes update hermes gateway stop hermes gateway run ``` ### 使用脚本 **Linux/macOS:** ```bash bash scripts/update-restart.sh ``` **Windows PowerShell:** ```powershell .\scripts\update-restart.ps1 ``` --- ## 卸载 ### Linux/macOS ```bash bash scripts/uninstall.sh # 完全卸载 bash scripts/uninstall.sh --keep-config # 保留配置 ``` ### Windows PowerShell ```powershell .\scripts\uninstall.ps1 # 完全卸载 .\scripts\uninstall.ps1 -KeepConfig # 保留配置 ``` --- ## 健康检查 一键诊断 API 连接、网关状态、配置问题： **Linux/macOS:** ```bash bash scripts/doctor.sh ``` **Windows PowerShell:** ```powershell .\scripts\doctor.ps1 ``` **检查项：** - ✅ 安装目录是否存在 - ✅ 虚拟环境是否正常 - ✅ 配置文件是否存在 - ✅ 环境变量是否设置 - ✅ 网关运行状态 - ✅ API 端点连通性 - ✅ 错误日志检测 --- ## 按需加载模块 | 模块 | 内容 | 何时加载 | |------|------|---------| | `api-config.md` | 模型提供商 API 配置 | 用户要求配置 API/模型提供商 | | `gateway-config.md` | 网关配置（飞书/Telegram/Discord） | 用户要求配置网关/通知渠道 | **使用方式：** 当用户需要配置 API 或网关时，读取对应的模块文件。 --- ## 常用命令 | 命令 | 说明 | |------|------| | `hermes` | 启动交互式 CLI | | `hermes --version` | 查看版本 | | `hermes doctor` | 诊断问题 | | `hermes config show` | 查看配置 | | `hermes config edit` | 编辑配置 | | `hermes model` | 选择模型 | | `hermes update` | 更新版本 | | `hermes gateway status` | 网关状态 | | `hermes gateway start/stop` | 启停网关 | --- ## Docker 部署 ```bash cd ~/.hermes/hermes-agent docker build -t hermes-agent . docker run -d -v ~/.hermes:/opt/data hermes-agent ``` --- ## 相关链接 - 官方文档：https://hermes-agent.nousresearch.com/docs/ - GitHub：https://github.com/NousResearch/hermes-agent - Discord：https://discord.gg/NousResearch

path: api-config.md
content: # 模型提供商 API 配置

用户提供 API Key 和模型名称后，按以下模板配置：

---

## OpenRouter（推荐，聚合 200+ 模型）

**config.yaml:**
```yaml
model:
  provider: openrouter
  default: MODEL_NAME
```

**.env:**
```bash
OPENROUTER_API_KEY=YOUR_API_KEY
```

**可用模型：**
- `anthropic/claude-sonnet-4`
- `anthropic/claude-opus-4`
- `openai/gpt-4o`
- `google/gemini-pro-1.5`
- `meta-llama/llama-3.1-70b-instruct`

**文档：** https://openrouter.ai/docs

---

## 智谱 GLM Coding Plan（推荐用于 Coding 场景）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://open.bigmodel.cn/api/coding/paas/v4
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://open.bigmodel.cn/api/coding/paas/v4
```

**可用模型：**
- `glm-5`
- `glm-4-plus`
- `glm-4-air`
- `glm-4-flash`
- `glm-4.7`（支持思考模式）

**重要提示：**
- **Coding Plan 端点**：`https://open.bigmodel.cn/api/coding/paas/v4`（消耗 Coding Plan 额度）
- **通用端点**：`https://open.bigmodel.cn/api/paas/v4/`（产生额外费用）

**文档：** https://open.bigmodel.cn/dev/api

---

## z.ai（GLM 国际版）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.z.ai/api/paas/v4/
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.z.ai/api/paas/v4/
```

**可用模型：**
- `glm-5`
- `glm-4-plus`
- `glm-4-air`
- `glm-4-flash`

**文档：** https://api.z.ai

---

## Kimi Coding Plan（推荐用于 Coding 场景）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.kimi.com/coding/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.kimi.com/coding/v1
```

**可用模型：**
- `kimi-k2.5`（最新版，支持视觉和思考）

**重要提示：**
- **Coding Plan 端点**：`https://api.kimi.com/coding/v1`（消耗 Coding Plan 额度）
- **通用端点**：`https://api.moonshot.cn/v1`（产生额外费用）

**文档：** https://platform.kimi.com/docs/api/chat

---

## Kimi / Moonshot（通用端点）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.moonshot.cn/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.moonshot.cn/v1
```

**可用模型：**
- `kimi-k2.5`
- `kimi-k2-thinking`
- `kimi-k2-0905-preview`
- `moonshot-v1-8k`
- `moonshot-v1-32k`
- `moonshot-v1-128k`

**文档：** https://platform.kimi.com/docs/api/chat

---

## 阿里云百炼 Coding Plan（推荐用于 Coding 场景）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://coding.dashscope.aliyuncs.com/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=sk-sp-xxxxx  # Coding Plan 专属 API Key
OPENAI_BASE_URL=https://coding.dashscope.aliyuncs.com/v1
```

**重要提示：**
- **API Key 格式**：`sk-sp-xxxxx`（Coding Plan 专属）
- **Coding Plan 端点**：`https://coding.dashscope.aliyuncs.com/v1`
- **通用端点**：`https://dashscope.aliyuncs.com/compatible-mode/v1`

**控制台：** https://bailian.console.aliyun.com/cn-beijing/?tab=model#/efm/coding_plan

---

## 阿里云百炼（通用端点）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://dashscope.aliyuncs.com/compatible-mode/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=sk-xxxxx
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
```

**可用模型：**
- `qwen-turbo`
- `qwen-plus`
- `qwen-max`
- `qwen-max-longcontext`
- `qwen-vl-plus`
- `qwen-vl-max`

**国际端点：** `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`

---

## 腾讯云 Coding Plan

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.lkeap.cloud.tencent.com/coding/v3
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.lkeap.cloud.tencent.com/coding/v3
```

**重要提示：**
- Coding Plan 端点不含混元模型

---

## 腾讯云混元（通用端点）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.hunyuan.cloud.tencent.com/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.hunyuan.cloud.tencent.com/v1
```

**可用模型：**
- `hunyuan-turbos-latest`
- `hunyuan-lite`
- `hunyuan-standard`
- `hunyuan-pro`
- `hunyuan-vision`

---

## 火山引擎 Coding Plan

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://ark.cn-beijing.volces.com/api/coding/v3
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://ark.cn-beijing.volces.com/api/coding/v3
```

**可用模型：**
- `doubao-seed-2.0-code`
- `doubao-seed-2.0-pro`
- `doubao-seed-2.0-lite`
- `minimax-m2.5`
- `glm-4.7`
- `kimi-k2.5`

---

## 阶跃星辰 Coding Plan（推荐用于 Coding 场景）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.stepfun.com/step_plan/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.stepfun.com/step_plan/v1
```

**可用模型：**
- `step-1-8k`
- `step-1-32k`
- `step-1-128k`
- `step-1v-8k`（视觉模型）

**重要提示：**
- **Coding Plan 端点**：`https://api.stepfun.com/step_plan/v1`（消耗 Coding Plan 额度）
- **通用端点**：`https://api.stepfun.com/v1`（产生额外费用）

---

## 阶跃星辰 Step（通用端点）

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: https://api.stepfun.com/v1
  default: MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=https://api.stepfun.com/v1
```

**可用模型：**
- `step-1-8k`
- `step-1-32k`
- `step-1-128k`
- `step-1v-8k`

---

## 自定义 OpenAI 兼容端点

**config.yaml:**
```yaml
model:
  provider: custom
  base_url: YOUR_ENDPOINT_URL
  default: YOUR_MODEL_NAME
```

**.env:**
```bash
OPENAI_API_KEY=YOUR_API_KEY
OPENAI_BASE_URL=YOUR_ENDPOINT_URL
```

---

## Coding Plan 端点汇总

| 提供商 | Coding Plan 端点 | API Key 格式 |
|--------|-----------------|--------------|
| 智谱 GLM | `https://open.bigmodel.cn/api/coding/paas/v4` | 标准 |
| Kimi | `https://api.kimi.com/coding/v1` | 标准 |
| 阿里云百炼 | `https://coding.dashscope.aliyuncs.com/v1` | `sk-sp-xxxxx` |
| 火山引擎 | `https://ark.cn-beijing.volces.com/api/coding/v3` | 标准 |
| 腾讯云 | `https://api.lkeap.cloud.tencent.com/coding/v3` | 标准（不含混元） |
| 阶跃星辰 | `https://api.stepfun.com/step_plan/v1` | 标准 |


path: docker-deploy.md
content: # Docker 部署指南

## 安装

```bash
# 1. 克隆仓库
git clone https://github.com/NousResearch/hermes-agent.git ~/.hermes/hermes-agent
cd ~/.hermes/hermes-agent

# 2. 构建镜像
docker build -t hermes-agent .

# 3. 运行容器
docker run -d -v ~/.hermes:/opt/data hermes-agent
```

---

## 升级

```bash
# 1. 进入映射目录
cd ~/.hermes/hermes-agent

# 2. 拉取最新代码
git pull origin main

# 3. 重新构建镜像
docker build -t hermes-agent .

# 4. 停止旧容器并重新运行
docker stop hermes-container 2>/dev/null || true
docker rm hermes-container 2>/dev/null || true
docker run -d --name hermes-container -v ~/.hermes:/opt/data hermes-agent
```

---

## 卸载

```bash
# 1. 停止并删除容器
docker stop hermes-container
docker rm hermes-container

# 2. 删除镜像
docker rmi hermes-agent

# 3. 删除配置目录（可选）
# rm -rf ~/.hermes
```

---

## 配置持久化

- 配置目录映射：`~/.hermes` → `/opt/data`
- 在宿主机上编辑 `~/.hermes/config.yaml` 和 `~/.hermes/.env`
- 容器重启后配置保持不变


path: gateway-config.md
content: # 网关配置（飞书/Telegram/Discord）

---

## 飞书网关配置

### 1. 创建飞书应用

1. 访问 [飞书开放平台](https://open.feishu.cn/app)
2. 创建企业自建应用
3. 记录 App ID 和 App Secret

### 2. 配置应用权限

| 权限名称 | 权限标识 |
|---------|---------|
| 获取用户信息 | `contact:user.base:readonly` |
| 接收消息 | `im:message` |
| 发送消息 | `im:message:send_as_bot` |
| 获取群信息 | `im:chat:readonly` |

### 3. 配置事件订阅

- 请求网址：`https://your-server.com/webhook/feishu`
- 订阅事件：`im.message.receive_v1`

### 4. 安装依赖

```bash
uv pip install lark-oapi aiohttp websockets
```

### 5. 配置环境变量

```bash
# ~/.hermes/.env
FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=xxx
FEISHU_ENABLED=true
GATEWAY_ALLOWED_USERS=ou_xxx
```

### 6. 启动网关

```bash
hermes gateway run
```

### 7. 配对用户

```bash
hermes pairing approve feishu PAIRING_CODE
```

---

## Telegram 网关配置

### 1. 创建 Telegram Bot

1. 在 Telegram 中搜索 `@BotFather`
2. 发送 `/newbot`
3. 按提示设置名称和用户名
4. 记录 Bot Token

### 2. 配置环境变量

```bash
# ~/.hermes/.env
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_ENABLED=true
```

### 3. 配对用户

```bash
hermes pairing approve telegram PAIRING_CODE
```

---

## Discord 网关配置

### 1. 创建 Discord Bot

1. 访问 [Discord Developer Portal](https://discord.com/developers/applications)
2. 创建应用 → Bot → Add Bot
3. 记录 Bot Token
4. 生成邀请链接（Scopes: bot, Permissions: Send/Read Messages）

### 2. 配置环境变量

```bash
# ~/.hermes/.env
DISCORD_BOT_TOKEN=xxx
DISCORD_ENABLED=true
```

### 3. 配对用户

```bash
hermes pairing approve discord PAIRING_CODE
```

---

## 多网关同时运行

```bash
# ~/.hermes/.env
FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=xxx
FEISHU_ENABLED=true

TELEGRAM_BOT_TOKEN=xxx
TELEGRAM_ENABLED=true

DISCORD_BOT_TOKEN=xxx
DISCORD_ENABLED=true

GATEWAY_ALLOWED_USERS=ou_xxx,ou_yyy
```

---

## 用户白名单

```bash
# 多个用户用逗号分隔
GATEWAY_ALLOWED_USERS=ou_xxx,ou_yyy,ou_zzz
```

---

## 网关管理命令

| 命令 | 说明 |
|------|------|
| `hermes gateway status` | 查看网关状态 |
| `hermes gateway start/stop` | 启停网关 |
| `hermes pairing list` | 查看已配对用户 |
| `hermes pairing approve feishu CODE` | 批准飞书用户 |
| `hermes pairing approve telegram CODE` | 批准 Telegram 用户 |
| `hermes pairing approve discord CODE` | 批准 Discord 用户 |

---

## 故障排查

### 飞书连接失败

```bash
hermes gateway status
cat ~/.hermes/logs/agent.log
```

### 用户被拒绝

```bash
hermes config show | grep -A5 allowed
hermes pairing approve feishu CODE
```


path: scripts/doctor.sh
content: #!/bin/bash
# Hermes Agent 健康检查脚本 (Linux/macOS)
# 用法: bash doctor.sh

set -e

HERMES_DIR="$HOME/.hermes"
HERMES_AGENT_DIR="$HERMES_DIR/hermes-agent"
ENV_FILE="$HERMES_DIR/.env"
CONFIG_FILE="$HERMES_DIR/config.yaml"

echo "╔════════════════════════════════════════╗"
echo "║     Hermes Agent 健康检查              ║"
echo "╚════════════════════════════════════════╝"
echo ""

ERRORS=0
WARNINGS=0

# 1. 检查安装目录
echo "📁 检查安装目录..."
if [ -d "$HERMES_AGENT_DIR" ]; then
    echo "  ✅ 安装目录存在: $HERMES_AGENT_DIR"
else
    echo "  ❌ 安装目录不存在: $HERMES_AGENT_DIR"
    ERRORS=$((ERRORS + 1))
fi

# 2. 检查虚拟环境
echo ""
echo "🐍 检查虚拟环境..."
if [ -d "$HERMES_AGENT_DIR/venv" ]; then
    echo "  ✅ 虚拟环境存在"
    if [ -f "$HERMES_AGENT_DIR/venv/bin/activate" ]; then
        echo "  ✅ 激活脚本存在"
    else
        echo "  ❌ 激活脚本不存在"
        ERRORS=$((ERRORS + 1))
    fi
else
    echo "  ❌ 虚拟环境不存在"
    ERRORS=$((ERRORS + 1))
fi

# 3. 检查配置文件
echo ""
echo "📄 检查配置文件..."
if [ -f "$CONFIG_FILE" ]; then
    echo "  ✅ config.yaml 存在"
else
    echo "  ⚠️  config.yaml 不存在"
    WARNINGS=$((WARNINGS + 1))
fi

if [ -f "$ENV_FILE" ]; then
    echo "  ✅ .env 文件存在"
    
    # 检查必要的环境变量
    echo ""
    echo "🔐 检查环境变量..."
    
    if grep -q "OPENAI_API_KEY=" "$ENV_FILE" && [ -n "$(grep 'OPENAI_API_KEY=' "$ENV_FILE" | cut -d'=' -f2)" ]; then
        echo "  ✅ OPENAI_API_KEY 已设置"
    else
        echo "  ⚠️  OPENAI_API_KEY 未设置"
        WARNINGS=$((WARNINGS + 1))
    fi
    
    if grep -q "OPENAI_BASE_URL=" "$ENV_FILE" && [ -n "$(grep 'OPENAI_BASE_URL=' "$ENV_FILE" | cut -d'=' -f2)" ]; then
        BASE_URL=$(grep 'OPENAI_BASE_URL=' "$ENV_FILE" | cut -d'=' -f2)
        echo "  ✅ OPENAI_BASE_URL 已设置: $BASE_URL"
    else
        echo "  ⚠️  OPENAI_BASE_URL 未设置"
        WARNINGS=$((WARNINGS + 1))
    fi
else
    echo "  ⚠️  .env 文件不存在"
    WARNINGS=$((WARNINGS + 1))
fi

# 4. 检查网关状态
echo ""
echo "🌐 检查网关状态..."
cd "$HERMES_AGENT_DIR" 2>/dev/null || true
if [ -d "$HERMES_AGENT_DIR/venv" ]; then
    source "$HERMES_AGENT_DIR/venv/bin/activate" 2>/dev/null || true
    GATEWAY_STATUS=$(hermes gateway status 2>/dev/null || echo "未知")
    echo "  状态: $GATEWAY_STATUS"
else
    echo "  ⚠️  无法检查（虚拟环境不存在）"
    WARNINGS=$((WARNINGS + 1))
fi

# 5. 测试 API 连接
echo ""
echo "🔌 测试 API 连接..."
if [ -f "$ENV_FILE" ]; then
    [REDACTED_SECRET] 'OPENAI_API_KEY=' "$ENV_FILE" | cut -d'=' -f2 | tr -d '"' | tr -d "'")
    BASE_URL=$(grep 'OPENAI_BASE_URL=' "$ENV_FILE" | cut -d'=' -f2 | tr -d '"' | tr -d "'")
    
    if [ -n "$API_KEY" ] && [ -n "$BASE_URL" ]; then
        # 提取 base_url 的域名部分
        API_ENDPOINT="$BASE_URL/chat/completions"
        
        RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
            -X POST "$API_ENDPOINT" \
            -H "Authorization: Bearer $API_KEY" \
            -H "Content-Type: application/json" \
            -d '{"model": "test", "messages": [{"role": "user", "content": "hi"}]}' \
            --connect-timeout 10 2>/dev/null || echo "000")
        
        if [ "$RESPONSE" = "200" ] || [ "$RESPONSE" = "400" ] || [ "$RESPONSE" = "401" ]; then
            echo "  ✅ API 端点可达 (HTTP $RESPONSE)"
        elif [ "$RESPONSE" = "000" ]; then
            echo "  ❌ API 端点无法连接"
            ERRORS=$((ERRORS + 1))
        else
            echo "  ⚠️  API 返回异常状态码: HTTP $RESPONSE"
            WARNINGS=$((WARNINGS + 1))
        fi
    else
        echo "  ⚠️  API Key 或 Base URL 未配置"
        WARNINGS=$((WARNINGS + 1))
    fi
else
    echo "  ⚠️  .env 文件不存在，跳过 API 测试"
fi

# 6. 检查日志
echo ""
echo "📋 检查最近日志..."
LOG_FILE="$HERMES_DIR/logs/agent.log"
if [ -f "$LOG_FILE" ]; then
    ERROR_COUNT=$(grep -c -i "error" "$LOG_FILE" 2>/dev/null || echo "0")
    if [ "$ERROR_COUNT" -gt 0 ]; then
        echo "  ⚠️  发现 $ERROR_COUNT 条错误日志"
        echo ""
        echo "  最近错误:"
        grep -i "error" "$LOG_FILE" | tail -3 | sed 's/^/    /'
        WARNINGS=$((WARNINGS + 1))
    else
        echo "  ✅ 未发现错误日志"
    fi
else
    echo "  ℹ️  日志文件不存在"
fi

# 汇总
echo ""
echo "╔════════════════════════════════════════╗"
echo "║              检查结果汇总              ║"
echo "╠════════════════════════════════════════╣"
echo "║  ❌ 错误: $ERRORS                            ║"
echo "║  ⚠️  警告: $WARNINGS                            ║"
echo "╚════════════════════════════════════════╝"
echo ""

if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
    echo "✅ Hermes Agent 状态良好！"
    exit 0
elif [ $ERRORS -eq 0 ]; then
    echo "⚠️  Hermes Agent 基本正常，但有 $WARNINGS 个警告"
    exit 0
else
    echo "❌ Hermes Agent 存在 $ERRORS 个错误，请检查！"
    exit 1
fi


path: scripts/uninstall.sh
content: #!/bin/bash
# Hermes Agent 卸载脚本 (Linux/macOS)
# 用法: bash uninstall.sh [--keep-config]

set -e

HERMES_DIR="$HOME/.hermes"
KEEP_CONFIG=false

# 解析参数
if [ "$1" = "--keep-config" ]; then
    KEEP_CONFIG=true
fi

echo "=== Hermes Agent 卸载 ==="
echo ""

# 检查是否存在
if [ ! -d "$HERMES_DIR" ]; then
    echo "❌ Hermes Agent 未安装，无需卸载"
    exit 0
fi

# 停止网关
echo "🛑 停止网关..."
cd "$HERMES_DIR/hermes-agent" 2>/dev/null && source venv/bin/activate 2>/dev/null && hermes gateway stop 2>/dev/null || true

# 确认卸载
if [ "$KEEP_CONFIG" = true ]; then
    echo "⚠️  将删除程序文件，但保留配置文件"
    echo ""
    read -p "确认卸载? (y/N): " confirm
    if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
        echo "❌ 已取消"
        exit 0
    fi
    
    # 保留配置，只删除程序
    echo "🗑️ 删除程序文件..."
    rm -rf "$HERMES_DIR/hermes-agent"
    rm -rf "$HERMES_DIR/venv"
    echo "✅ 卸载完成！配置文件保留在 $HERMES_DIR"
else
    echo "⚠️  将完全删除 Hermes Agent 及所有配置"
    echo "   配置文件: $HERMES_DIR/config.yaml"
    echo "   环境变量: $HERMES_DIR/.env"
    echo ""
    read -p "确认完全卸载? (y/N): " confirm
    if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
        echo "❌ 已取消"
        exit 0
    fi
    
    # 完全删除
    echo "🗑️ 删除所有文件..."
    rm -rf "$HERMES_DIR"
    echo "✅ 完全卸载完成！"
fi

echo ""
echo "💡 如需重新安装，请运行:"
echo "   git clone https://github.com/NousResearch/hermes-agent.git ~/.hermes/hermes-agent"


path: scripts/update-restart.sh
content: #!/bin/bash
# Hermes Agent 更新并重启网关脚本 (Linux/macOS)
# 用法: bash update-restart.sh

set -e

HERMES_DIR="$HOME/.hermes/hermes-agent"

echo "=== Hermes Agent 更新并重启 ==="
echo ""

# 检查目录是否存在
if [ ! -d "$HERMES_DIR" ]; then
    echo "❌ 错误: Hermes Agent 未安装在 $HERMES_DIR"
    exit 1
fi

cd "$HERMES_DIR"

# 激活虚拟环境
echo "📦 激活虚拟环境..."
source venv/bin/activate

# 停止网关
echo "🛑 停止网关..."
hermes gateway stop 2>/dev/null || true

# 检查更新
echo "🔍 检查更新..."
hermes update

# 启动网关
echo "🚀 启动网关..."
hermes gateway run &

# 等待启动
sleep 3

# 检查状态
echo ""
echo "📊 网关状态:"
hermes gateway status

echo ""
echo "✅ 更新并重启完成！"


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)