Install Guide · Team Operations · Agent Loop Runbook

openHermit 安装与团队运维指南

这份页面只写安装指南和团队运维指南,给人和 Agent Loop 直接照着执行。它不是源码说明,也不展示源码目录。

安装入口npm 全局安装后运行 openhermit。
默认控制台http://127.0.0.1:5680/teams
团队运维看板、消息、定时 Loop、Agent 状态。
飞书隔离每个团队独立 LARK_CLI_PROFILE。

1. 快速安装

npm install -g @yancyyu/openhermit
openhermit

启动后打开 http://127.0.0.1:5680,默认进入 /teams

openhermit              # 启动
open-hermit             # 等同于 openhermit
hermit                  # 等同于 openhermit
openhermit --port 8080  # 指定端口
openhermit --version    # 查看版本
openhermit update       # 检查并更新
首次启动会创建 ~/.hermit/ 目录和 cc-connect 配置。Agent 只能确认文件是否存在,不要打印 token、secret 或 cookie。

2. 本地开发启动

git clone https://github.com/yancyuu/Hermit.git
cd Hermit
pnpm install
pnpm dev

开发地址通常是 http://localhost:5174。项目开发命令使用 pnpm

3. 创建第一个团队

  1. 打开 /teams
  2. 点击「新建团队」。
  3. 填写团队名,例如 frontend、backend、qa、ops。
  4. 选择 harness,例如 claudecode、codex、gemini、qoder。
  5. 绑定 cc-connect project。
  6. 保存后进入团队看板,创建任务或发送消息。
团队推荐职责推荐 Agent
frontendUI、交互、前端缺陷Claude Code / Qoder
backendAPI、数据、服务逻辑Claude Code / Codex
qa测试、回归、验收Gemini / Codex
opsCI、部署、运行状态、排障Claude Code

4. 团队运维目录

openHermit 自己的团队状态默认放在:

~/.hermit/teams/<team-slug>/
  team.json
  messages/group.jsonl
  tasks/board.json

数字员工长期工作区建议按下面组织:

/Users/distill/teams/
  .memory/rules/
  .memory/decisions/
  .memory/needs-review/
  .claude/skills/
  .claude/workflows/
  <team-folder>/
    .env
    CLAUDE.md
    00_index/conflict-review.md
    01_business-docs/
    03_data/
    07_memory/
    99_temp/
位置用途不要放
CLAUDE.md团队身份、边界、执行规则token、secret
07_memory/经过确认的长期事实原始日志、临时输出
needs-review/冲突事实、待审批提案正式事实
skills/可复用操作能力业务密钥
99_temp/临时材料长期规则

5. Agent Loop 运维流程

  1. 确认当前服务的 team。
  2. 读取 team 的 CLAUDE.md 和必要 07_memory/
  3. 查询团队任务、消息和最近状态。
  4. 判断输入来自看板、跨团队消息、外部渠道、定时任务还是人工 DM。
  5. 认领任务并更新状态。
  6. 执行最小安全步骤。
  7. 把证据、结果、失败原因写回任务。
  8. 重复动作升级为 skill、workflow 或 cron。
  9. 事实冲突写入 needs-review,停止自动推进。
received -> in_progress -> completed -> approved
                    └── failed / blocked / needs-review

6. Feishu/Lark CLI 团队隔离

每个团队必须有独立 profile。推荐通过 ~/.local/bin/lark-cli wrapper 注入 profile。

Agent 在团队目录调用 lark-cli
  -> PATH 命中 ~/.local/bin/lark-cli
  -> wrapper 向上寻找最近 .env
  -> 读取 LARK_CLI_PROFILE
  -> 调用真实 lark-cli --profile <team-profile>
LARK_CLI_PROFILE=<team-folder-name>
LARK_CLI_BRAND=feishu
LARK_APP_ID=<app_id>
LARK_APP_SECRET=<app_secret>

执行飞书操作前检查:

pwd
command -v lark-cli
lark-cli config show
lark-cli profile list
App secret 绝不能打印、提交、写日志、写文档或写 memory。

7. Pages 与 CI 排障

线上页面必须包含:

openHermit 安装与团队运维指南
Feishu/Lark CLI 团队隔离

8. 安全边界

# openHermit 安装与团队运维指南

这是一份给人和 Agent Loop 共同阅读的操作手册。目标不是展示源码,也不是营销介绍,而是说明如何安装 openHermit、如何创建团队、如何让 Agent Loop 按规则运维团队,以及出现问题时如何排障。

## 1. openHermit 是什么

openHermit 是一个本地运行的 AI 团队指挥台。它通过 cc-connect 管理 Claude Code、Codex、Gemini、Qoder 等 Agent 运行时,并把团队、任务、消息、定时循环、外部渠道统一到一个 Web 控制台中。

核心定位:

- 你负责定义目标、审批结果和处理例外。
- openHermit 负责团队看板、消息路由、任务状态和运行时管理。
- Agent Loop 负责持续检查任务、执行工作、回写证据和报告异常。

默认地址与目录:

- Web 控制台:`http://127.0.0.1:5680`
- 默认页面:`/teams`
- 本地状态目录:`~/.hermit/`
- cc-connect Management API:`9820`
- cc-connect Bridge:`9810`

## 2. 安装指南

### 2.1 普通用户安装

```bash
npm install -g @yancyyu/openhermit
openhermit
```

启动后打开:

```text
http://127.0.0.1:5680
```

常用命令:

```bash
openhermit              # 启动 openHermit
open-hermit             # 等同于 openhermit
hermit                  # 等同于 openhermit
openhermit --port 8080  # 指定端口
openhermit --version    # 查看版本
openhermit update       # 检查并更新
```

首次启动会自动准备本地配置。Agent 排障时只需要知道配置位置,不要打印里面的 token 或 secret:

```text
~/.hermit/
  cc-connect/
    config.toml
  teams/
  logs/
```

### 2.2 本地开发安装

```bash
git clone https://github.com/yancyuu/Hermit.git
cd Hermit
pnpm install
pnpm dev
```

开发模式默认打开:

```text
http://localhost:5174
```

开发和 CI 约定:

- 使用 `pnpm`,不要用 npm/yarn 做项目开发命令。
- 运行长日志命令时只保留尾部输出,例如 `pnpm typecheck 2>&1 | tail -20`。
- 不要把 `~/.hermit/cc-connect/config.toml`、token、secret、cookie 写入日志、文档或 memory。

## 3. 创建第一个团队

1. 打开 `/teams`。
2. 点击「新建团队」。
3. 填写团队名,例如 `backend`、`frontend`、`qa`。
4. 选择 harness,例如 `claudecode`、`codex`、`gemini`、`qoder`。
5. 绑定 cc-connect project。
6. 保存团队。
7. 在团队看板里创建任务,或通过外部渠道发送任务。
8. Agent Loop 认领任务、执行、回写结果。

推荐团队划分:

| 团队 | 推荐 harness | 负责内容 |
| --- | --- | --- |
| frontend | Claude Code / Qoder | UI、交互、前端缺陷 |
| backend | Claude Code / Codex | API、数据、服务逻辑 |
| qa | Gemini / Codex | 测试、回归、验收 |
| research | Gemini / Kimi | 调研、文档、竞品分析 |
| ops | Claude Code | CI、部署、运行状态、排障 |

## 4. 团队数据和运维目录

openHermit 自己的团队状态默认在:

```text
~/.hermit/teams/<team-slug>/
  team.json          # 团队配置
  messages/group.jsonl
  tasks/board.json
```

给数字员工长期运行的工作区建议这样组织:

```text
/Users/distill/teams/
  .memory/
    rules/
    decisions/
    needs-review/
  .claude/
    skills/
    workflows/
  <team-folder>/
    .env
    CLAUDE.md
    00_index/
      conflict-review.md
    01_business-docs/
    03_data/
    07_memory/
    99_temp/
    .claude/
      skills/
```

放置规则:

| 位置 | 放什么 | 禁止放什么 |
| --- | --- | --- |
| `<team>/CLAUDE.md` | 团队身份、边界、执行规则 | token、secret |
| `<team>/07_memory/` | 经过确认的团队长期事实 | 原始导出、临时日志 |
| `.memory/needs-review/` | 冲突事实、待审批提案 | 已确认事实 |
| `.claude/skills/` | 可复用操作能力 | 业务密钥 |
| `.claude/workflows/` | 稳定多步骤流程 | 临时笔记 |
| `99_temp/` | 临时材料 | 长期规则 |

## 5. Agent Loop 推荐工作流

Agent Loop 每轮执行时按这个顺序走:

1. 确认自己服务哪个 team。
2. 读取 team 的 `CLAUDE.md` 和必要的 `07_memory/`。
3. 查询 openHermit 团队状态、任务看板和最近消息。
4. 判断输入来源:看板任务、跨团队消息、外部渠道、定时任务、人工 DM。
5. 如果任务还没被明确启动,不要直接执行破坏性动作。
6. 认领或更新任务状态。
7. 执行最小安全步骤。
8. 保存证据:命令、结果、链接、截图或失败原因。
9. 回写任务评论或状态。
10. 如果动作会重复发生,把它升级为 skill、workflow 或 cron。
11. 如果发现事实冲突,写入 `needs-review` 并停止自动推进。

任务状态建议:

```text
received -> in_progress -> completed -> approved
                    └── failed / blocked / needs-review
```

## 6. 常用运维 Loop

### 6.1 团队健康检查

- 列出全部团队。
- 检查是否有离线、卡住、失败的 Agent。
- 检查最近消息和任务状态。
- 检查外部渠道绑定是否仍然有效。
- 输出报告:团队、症状、证据、建议动作。

### 6.2 任务派发检查

- 确认 source team 和 target team。
- 判断是普通消息还是正式任务派发。
- 正式派发前确认 Redis task bus 已配置。
- 目标团队未启动任务前,不要把消息当成已接受。
- 记录从 `received` 到 `approved` 的全过程。

### 6.3 记忆治理

- 稳定业务事实写到 `<team>/07_memory/`。
- 跨团队规则先写到 `.memory/needs-review/`,审批后再提升。
- 原始导出只放 data/report 路径,memory 只写指针。
- secret 永远不写进 memory、docs、messages 或日志。

### 6.4 CI / Pages 检查

- 每次提交后检查 GitHub Actions。
- 如果 `Deploy Agent Runbook to GitHub Pages` 失败,优先修 Pages workflow 或页面构建脚本。
- 如果普通 app CI 失败,但 Pages 成功且线上页面正确,不要把它误判为 page 问题。
- 验证线上页面必须包含:`openHermit 安装与团队运维指南` 和 `Feishu/Lark CLI 团队隔离`。

## 7. Feishu/Lark CLI 团队隔离

每个团队都应该有自己的 CLI profile。推荐使用 PATH 级 wrapper,而不是让 Agent 直接调用真实 `lark-cli`。

调用链:

```text
Agent 在团队目录中调用 lark-cli
  -> PATH 命中 ~/.local/bin/lark-cli wrapper
  -> wrapper 从当前目录向上寻找最近的 .env
  -> wrapper 读取 LARK_CLI_PROFILE
  -> wrapper 调用真实 lark-cli 并自动附加 --profile <team-profile>
```

团队 `.env` 模板:

```bash
LARK_CLI_PROFILE=<team-folder-name>
LARK_CLI_BRAND=feishu
LARK_APP_ID=<app_id>
LARK_APP_SECRET=<app_secret>

# 如果团队使用 FEISHU 命名,也可以:
# FEISHU_APP_ID=<app_id>
# FEISHU_APP_SECRET=<app_secret>
```

安全规则:

- `LARK_CLI_PROFILE` 可以打印。
- app id 按内部策略处理。
- app secret 绝不能打印、提交、写日志、写文档、写 memory。

执行任何飞书操作前先检查:

```bash
pwd
command -v lark-cli
lark-cli config show
lark-cli profile list
```

期望:

- `command -v lark-cli` 指向 `~/.local/bin/lark-cli`。
- `lark-cli config show` 显示当前团队 profile。
- 用户授权页显示当前团队 app 名称。

## 8. Feishu/Lark 排障表

| 症状 | 检查 | 修复 |
| --- | --- | --- |
| profile 错了 | `pwd`、最近 `.env`、`lark-cli config show` | cd 到正确团队目录,或显式传 `--profile` |
| Agent 子进程用了错误 app | `command -v lark-cli` | 确保 PATH 先命中 `~/.local/bin/lark-cli` |
| 授权页显示错应用 | cwd、`.env`、`LARK_APP_ID` | 修正目录和 profile 后重新生成授权 URL |
| permission denied | scope、身份、bot 权限 | 先补 bot scope;必须用户语义时再用 user auth |
| 多团队串号 | profile 和 token 共享 | 分 profile,强隔离时分 OS user 或 runtime |
| secret 泄露 | docs/logs/history | 立刻轮换 secret,并清理泄露材料 |

## 9. 安全边界

Agent 必须遵守:

- 不打印 token、secret、cookie、private key、password。
- 不把工具原始输出直接写入长期 memory。
- 不把目标态 Task Bus 当成已交付能力。
- 不把一条渠道消息当成正式任务已接受。
- 不静默绕过 Lark profile wrapper。
- 不把团队业务事实写进全局 memory,除非 owner 批准。
- 不确定时写入 `needs-review`,不要自作主张升级为事实。