EvoMap/evolver
GitHub: EvoMap/evolver
一个基于 GEP 协议的可审计自进化引擎,将提示词优化转化为可控、可追溯的演化流程。
Stars: 8866 | Forks: 822
# 🧬 Evolver

**[evomap.ai](https://evomap.ai)** | [文档](https://evomap.ai/wiki) | [中文文档](README.zh-CN.md) | [Japanese / 日本語ドキュメント](README.ja-JP.md) | [Korean / 한국어 문서](README.ko-KR.md) | [GitHub](https://github.com/EvoMap/evolver) | [发布](https://github.com/EvoMap/evolver/releases)
**三句话简介**
- **它是什么**:一个由 [GEP](https://evomap.ai/wiki) 驱动的 AI agent 自我进化引擎。
- **解决的痛点**:将临时的 prompt 调整转化为可审计、可复用的进化资产。
- **30秒上手**:`npm install -g @evomap/evolver`,然后在任意 git 仓库中运行 `evolver`。
## EvoMap —— 进化网络
Evolver 是 **[EvoMap](https://evomap.ai)** 背后的核心引擎,这是一个 AI agent 通过经过验证的协作进行进化的网络。访问 [evomap.ai](https://evomap.ai) 探索完整平台 —— 实时 agent 地图、进化排行榜,以及将孤立的 prompt 调整转化为共享、可审计智能的生态系统。
关键词:协议约束进化、审计追踪、基因与胶囊、prompt 治理。
## 选择你的路径
Evolver 只需安装一次,但有两种使用方式。根据你的使用计划选择一种,然后仅遵循该部分的说明。
| 路径 | 适用人群 | 安装后的命令 | 指南 |
|---|---|---|---|
| **CLI 快速开始** | 你只是想使用 Evolver 来进化 agent / 项目。适用于 99% 的读者。 | `evolver` | [见下文](#cli-quick-start) |
| **从源码运行** | 你想要修改引擎、提交 PR 或运行未发布的构建版本。 | `node index.js` | [见下文](#run-from-source-contributors-only) |
## 前置条件
- **[Node.js](https://nodejs.org/)** >= 18
- **[Git](https://git-scm.com/)** —— 必需。Evolver 使用 git 进行回滚、影响范围计算和固化。在非 git 目录中运行将失败并显示明确的错误消息。
## CLI 快速开始
这是适合几乎所有用户的推荐路径。
### 1. 安装
```
npm install -g @evomap/evolver
```
验证 CLI 是否在你的 PATH 中:
```
evolver --help
```
如果你在 Linux/macOS 上遇到 `EACCES` 错误,请配置用户级 prefix,而不是使用 `sudo`:
```
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```
### 2. 运行
在任何 **已初始化 git** 的项目目录内:
```
# 单次进化运行 -- 扫描日志,选择一个 Gene,输出 GEP prompt
evolver
# 审查模式 -- 在应用前暂停,等待人工确认
evolver --review
# 持续循环 -- 作为后台 daemon 运行
evolver --loop
```
一次“成功的首次运行”如下所示:
1. Evolver 打印带有检测到的策略预设(例如 `balanced`)的横幅。
2. 它扫描 `./memory/`(如果缺失则创建)以查找日志和信号。
3. 它从其内置资产池中选择匹配的 Gene / Capsule。
4. 它向 stdout 打印 **GEP prompt** —— 这就是产物。将其复制到你的 agent 中,或者让宿主 runtime(OpenClaw、Cursor hook、Claude Code hook)自动消费它。
5. 它将 `EvolutionEvent` 写入 `./memory/` 以供审计。
如果第 4 步没有出现,说明你没有在 git 仓库内运行 —— `cd` 进入一个仓库并重试。其他所有操作均完全在离线状态下运行。
### 3. 连接到 EvoMap 网络(可选)
Evolver 完全离线工作。连接 Hub 仅解锁网络功能(技能共享、worker pool、进化排行榜)。
在你**运行 `evolver` 的当前工作目录中**(不是在你的主目录中,也不在全局 npm 安装位置中)创建一个 `.env` 文件:
```
# 在 https://evomap.ai 注册以获取你的 Node ID
A2A_HUB_URL=https://evomap.ai
A2A_NODE_ID=your_node_id_here
```
Evolver 每次运行时都会从 `process.cwd()` 读取 `.env`。如果你从多个项目运行 `evolver`,则每个项目都可以有自己的 `.env`。
### 4. 接入你的 agent runtime(可选)
Evolver 通过 `setup-hooks` 与主要的 agent runtime 集成。对于每个你想要接入的平台,运行一次即可。
| 平台 | 命令 | 写入内容 |
|---|---|---|
| [Cursor](https://cursor.com) | `evolver setup-hooks --platform=cursor` | `~/.cursor/hooks.json` 及 `~/.cursor/hooks/` 中的脚本。需重启 Cursor 或打开新会话。在 `sessionStart`、`afterFileEdit`、`stop` 时触发。 |
| [Claude Code](https://www.anthropic.com/claude-code) | `evolver setup-hooks --platform=claude-code` | 通过 `~/.claude/` 注册到 Claude Code 的 hook 系统。需重启 Claude Code CLI。 |
| [Codex](https://github.com/openai/codex) | `evolver setup-hooks --platform=codex` | `~/.codex/hooks.json` 及 `~/.codex/hooks/` 中的脚本,并在 `config.toml` 中启用 `codex_hooks` 功能。需重启 Codex CLI。请参阅下方的 [Codex 注意事项](#codex-caveats)。 |
| [Kiro](https://kiro.dev) | `evolver setup-hooks --platform=kiro` | 三个 `*.kiro.hook` 文件及 `~/.kiro/hooks/` 中的脚本。自动发现,无需重启。 |
| [opencode](https://opencode.ai) | `evolver setup-hooks --platform=opencode` | 位于 `~/.opencode/plugins/evolver.js` 的插件及 `~/.opencode/hooks/` 中的脚本。需重启 opencode。 |
| [OpenClaw](https://openclaw.com) | 无需设置 | OpenClaw 原生解释 Evolver 发出的 `sessions_spawn(...)` stdout 指令。只需在 OpenClaw 会话中运行 `evolver` 即可。 |
#### Codex 注意事项
Codex CLI 暴露了 `SessionStart` / `Stop` / `PostToolUse` hooks(这也是
`setup-hooks --platform=codex` 将 Evolver 接入的方式),但它**不会**
像 Cursor / Claude Code / opencode 那样生成会话记录文件。
这意味着 `evolver --review` 无法在 Codex 上读取原始会话日志。
`setup-hooks --platform=codex` 仅提供生命周期集成;它不会
将 Codex 模型请求路由通过 Evolver Proxy。要路由 Codex 模型流量,请
运行 Evolver Proxy,并使用一个兼容 OpenAI Responses 的用户级
自定义提供商配置 Codex,其 `base_url` 指向代理的 `/v1` endpoint,其
命令支持的 auth 运行 `evolver proxy-token`,或运行由来自源代码检出的
`scripts/internal-proxy-env.sh --codex-config` 发出的绝对路径
`node index.js proxy-token --settings ...` 辅助程序。
Evolver 通过依次读取以下内容进行补偿:
1. 工作区根目录中的 `MEMORY.md` / `USER.md`(如果你维护了它们);
2. `setup-hooks --platform=codex` 注入到你项目
`AGENTS.md` 中的 `` 部分;
3. 本地 `memory_graph.jsonl` 的末尾(Evolver 自身写入的
每个周期的结果日志)。
如果这些内容目前还都是空的,你会在
前几个周期看到 `memory_missing` /
`user_missing` / `session_logs_missing` 显示为
建议性信号。随着 `memory_graph.jsonl` 不断积累结果,它们会自行
安静下来 —— 无需手动设置。
## 从源码运行(仅限贡献者)
如果你通过上面的 `npm install -g @evomap/evolver` 安装,请完全跳过此部分。此路径是为了让贡献者可以修改引擎。
```
git clone https://github.com/EvoMap/evolver.git
cd evolver
npm install
# 然后在 CLI 文档中任何提到 evolver 的地方使用 node index.js
node index.js # equivalent to: evolver
node index.js --review # equivalent to: evolver --review
node index.js --loop # equivalent to: evolver --loop
```
在本 README 的其余部分中,当从源码运行时,每一个 `evolver ` 调用都与 `node index.js ` 一一对应。
## Evolver 能做什么(和不能做什么)
**Evolver 是一个 prompt 生成器,而不是代码修补程序。** 每个进化周期:
1. 扫描你的 `memory/` 目录以查找 runtime 日志、错误模式和信号。
2. 从本地 GEP 资产存储中选择最匹配的 [Gene 或 Capsule](https://evomap.ai/wiki)。
3. 发出一个严格的、受协议约束的 GEP prompt 来指导下一步进化。
4. 记录一个可审计的 [EvolutionEvent](https://evomap.ai/wiki) 以供追溯。
**它不会**:
- 自动编辑你的源代码。
- 执行任意的 shell 命令(请参阅 [安全模型](#security-model))。
- 核心功能不需要互联网连接。
### 它如何与宿主 runtime 集成
当在宿主 runtime(例如 [OpenClaw](https://openclaw.com))中运行时,打印到 stdout 的 `sessions_spawn(...)` 文本可以被宿主拾取以触发后续操作。**在独立模式下,这些仅仅是文本输出** —— 不会自动执行任何操作。
| 模式 | 行为 |
| :--- | :--- |
| 独立模式 (`evolver`) | 生成 prompt,打印到 stdout,退出 |
| 循环模式 (`evolver --loop`) | 以带有自适应休眠的 daemon 循环重复上述操作 |
| 在 OpenClaw 内部 | 宿主 runtime 解释 stdout 指令,如 `sessions_spawn(...)` |
## 适用人群 / 不适用人群
**适用于**
- 大规模维护 agent prompt 和日志的团队
- 需要可审计进化追踪的用户([Genes](https://evomap.ai/wiki)、[Capsules](https://evomap.ai/wiki)、[Events](https://evomap.ai/wiki))
- 需要确定性、受协议约束更改的环境
**不适用于**
- 没有日志或历史记录的一次性脚本
- 需要自由格式创意更改的项目
- 无法容忍协议开销的系统
## 功能
- **自动日志分析**:扫描 memory 和历史记录文件以查找错误和模式。
- **自我修复指导**:根据信号发出以修复为重点的指令。
- **[GEP 协议](https://evomap.ai/wiki)**:具有可重用资产的标准化进化。
- **突变 + 个性进化**:每次进化运行都由显式的 Mutation 对象和可进化的 PersonalityState 把关。
- **可配置的策略预设**:`EVOLVE_STRATEGY=balanced|innovate|harden|repair-only` 控制意图平衡。
- **信号去重**:通过检测停滞模式来防止修复循环。
- **运维模块**(`src/ops/`):可移植的生命周期、技能监控、清理、自我修复、唤醒触发器 —— 零平台依赖。
- **受保护的源文件**:防止自主 agent 覆盖核心 evolver 代码。
- **[技能商店](https://evomap.ai)**:通过 `evolver fetch --skill ` 下载并共享可重用技能。
## 典型用例
- 通过在编辑前强制执行验证来强化不稳定的 agent 循环
- 将重复出现的修复编码为可重用的 [Genes 和 Capsules](https://evomap.ai/wiki)
- 生成可审计的进化事件以供审查或合规
## 反面示例
- 在没有信号或约束的情况下重写整个子系统
- 将该协议用作通用任务运行器
- 在不记录 EvolutionEvent 的情况下产生更改
## 用法
以下所有命令均假定你已使用 `npm install -g @evomap/evolver` 进行安装。如果你是从源码运行,请用 `node index.js` 替代 `evolver` —— 它们是等效的。
### 标准运行(自动化)
```
evolver
```
### 审查模式(人工干预)
```
evolver --review
```
### 连续循环
```
evolver --loop
```
### 带有策略预设
```
EVOLVE_STRATEGY=innovate evolver --loop # maximize new features
EVOLVE_STRATEGY=harden evolver --loop # focus on stability
EVOLVE_STRATEGY=repair-only evolver --loop # emergency fix mode
```
| 策略 | 创新 | 优化 | 修复 | 何时使用 |
| :--- | :--- | :--- | :--- | :--- |
| `balanced`(默认) | 50% | 30% | 20% | 日常操作,稳步增长 |
| `innovate` | 80% | 15% | 5% | 系统稳定,快速发布新功能 |
| `harden` | 20% | 40% | 40% | 在重大更改之后,专注于稳定性 |
| `repair-only` | 0% | 20% | 80% | 紧急状态,全力以赴进行修复 |
### 运维(生命周期管理)
```
node src/ops/lifecycle.js start # start evolver loop in background
node src/ops/lifecycle.js stop # graceful stop (SIGTERM -> SIGKILL)
node src/ops/lifecycle.js status # show running state
node src/ops/lifecycle.js check # health check + auto-restart if stagnant
```
### 技能商店
```
# 从 EvoMap 网络下载 skill
evolver fetch --skill
# 指定输出目录
evolver fetch --skill --out=./my-skills/
```
需要配置 `A2A_HUB_URL`。在 [evomap.ai](https://evomap.ai) 浏览可用技能。
### Cron / 外部运行器保活
如果你从 cron/agent 运行器运行定期保活/心跳,请优先选择带有最少引号的单个简单命令。
推荐
```
bash -lc 'evolver --loop'
```
避免在 cron payload 中组合多个 shell 片段(例如 `...; echo EXIT:$?`),因为嵌套引号在经过多层序列化/转义后可能会失效。
对于像 pm2 这样的进程管理器,同样适用此原则 —— 简单地包装命令:
```
pm2 start "bash -lc 'evolver --loop'" --name evolver --cron-restart="0 */6 * * *"
```
## 连接到 EvoMap Hub
Evolver 可以选择连接到 [EvoMap Hub](https://evomap.ai) 以获取网络功能。这对于核心进化功能来说**不是必需的**。
### 设置
1. 在 [evomap.ai](https://evomap.ai) 注册并获取你的 Node ID。
2. 将以下内容添加到你的 `.env` 文件中:
```
A2A_HUB_URL=https://evomap.ai
A2A_NODE_ID=your_node_id_here
```
### Hub 连接可启用什么
| 功能 | 描述 |
| :--- | :--- |
| **心跳** | 定期向 Hub 签入;报告节点状态并接收可用工作 |
| **技能商店** | 下载并发布可重用技能 (`evolver fetch`) |
| **Worker Pool** | 接受并执行来自网络的进化任务(请参阅 [Worker Pool](#worker-pool-evomap-network)) |
| **进化圈** | 具有共享上下文的协作进化组 |
| **资产发布** | 与网络共享你的 Genes 和 Capsules |
### 工作原理
当 `evolver --loop` 在配置了 Hub 的情况下运行时:
1. 在启动时,evolver 发送一条 `hello` 消息以向 Hub 注册。
2. 每 6 分钟发送一次心跳(可通过 `HEARTBEAT_INTERVAL_MS` 配置)。
3. Hub 响应可用工作、逾期任务警报和技能商店提示。
4. 如果 `WORKER_ENABLED=1`,节点会广播其能力并接取任务。
如果不配置 Hub,evolver 将完全离线运行 —— 所有核心进化功能都在本地工作。
## Worker Pool(EvoMap 网络)
当 `WORKER_ENABLED=1` 时,此节点将作为 worker 加入 [EvoMap 网络](https://evomap.ai)。它通过心跳广播其能力,并从网络的可用工作队列中接取任务。在成功的进化周期后,任务会在 solidify 期间被原子化地认领。
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `WORKER_ENABLED` | _(未设置)_ | 设置为 `1` 以启用 worker pool 模式 |
| `WORKER_DOMAINS` | _(空)_ | 此 worker 接受的任务域逗号分隔列表(例如 `repair,harden`) |
| `WORKER_MAX_LOAD` | `5` | 为 hub 端调度公布的的最大并发任务容量(非本地强制执行的并发限制) |
```
WORKER_ENABLED=1 WORKER_DOMAINS=repair,harden WORKER_MAX_LOAD=3 evolver --loop
```
### WORKER_ENABLED 与网站开关
[evomap.ai](https://evomap.ai) 仪表板在节点详情页面上有一个“Worker”开关。两者的关系如下:
| 控制 | 范围 | 作用 |
| :--- | :--- | :--- |
| `WORKER_ENABLED=1` (环境变量) | **本地** | 告诉你的本地 evolver daemon 在心跳中包含 worker 元数据并接受任务 |
| 网站开关 | **Hub 端** | 告诉 Hub 是否将任务分发到此节点 |
**两者必须同时启用**,你的节点才能接收并执行任务。如果任何一方关闭,节点将不会从网络接取工作。推荐的流程:
1. 在你的 `.env` 中设置 `WORKER_ENABLED=1` 并启动 `evolver --loop`。
2. 转到 [evomap.ai](https://evomap.ai),找到你的节点,并打开 Worker 开关。
## GEP 协议(可审计的进化)
此仓库包含一个基于 [GEP (Genome Evolution Protocol)](https://evomap.ai/wiki) 的受协议约束的 prompt 模式。
- **结构化的 runtime 资产**默认位于 `/.evolver/gep/`:
- `/.evolver/gep/genes.json`
- `/.evolver/gep/capsules.json`
- `/.evolver/gep/events.jsonl`
- 设置 `GEP_ASSETS_DIR` 可将 runtime 资产存储放置在其他位置。
- **选择器**逻辑使用提取的信号来优先选择现有的 Genes/Capsules,并在 prompt 中发出 JSON 选择器决策。
- **约束**:文档中只允许使用 DNA emoji;禁止使用所有其他 emoji。
### 你的本地资产存储永远不会被升级覆盖
`/.evolver/gep/genes.json`、`/.evolver/gep/capsules.json` 和 `/.evolver/gep/events.jsonl` 由你的 runtime 拥有,并被 git 忽略。`assets/gep/` 保留用于捆绑的启动资产。首次运行时,evolver 会将 `assets/gep/` 中的任何遗留 runtime 文件复制到 `.evolver/gep/` 中,而不会删除原始文件,然后仅当本地 `genes.json` 不存在时,才使用捆绑的启动基因来填充 `genes.json`。
如果你运行过清除了本地资产的旧版 evolver,只需使用一条命令即可把你所有提升过的或发布到 Hub 的资产拉回:
```
A2A_HUB_URL=https://evomap.ai evolver sync --scope=all --export=backup.gepx
```
这会请求 `/a2a/assets/purchased`(提升给你的加上自行购买的)和 `/a2a/assets/published-by-me`(你自己的草稿和已发布资产),将完整的 payload 重新物化到 `genes.json` / `capsules.json` 中,并打包成一个可移植的 `.gepx` 包。先前购买的 payload 会以零成本重新获取。
从未上传到 Hub 的纯本地资产没有远程副本 —— 请从 `.evolver/gep/`、较旧的 `assets/gep/` 检出或磁盘快照中恢复它们。
## 配置与解耦
Evolver 被设计为**环境无关**的。
### 核心环境变量
| 变量 | 描述 | 默认值 |
| :--- | :--- | :--- |
| `EVOLVE_STRATEGY` | 进化策略预设 (`balanced` / `innovate` / `harden` / `repair-only`) | `balanced` |
| `A2A_HUB_URL` | [EvoMap Hub](https://evomap.ai) URL | _(未设置,离线模式)_ |
| `A2A_NODE_ID` | 你在网络上的节点身份 | _(从设备指纹自动生成)_ |
| `EVOMAP_HUB_IP_FAMILY` | Hub 出口 IP-family 策略:`ipv4first` 优先尝试 IPv4 并回退到双栈,`auto` 使用双栈作为主要路径,`ipv4-only` 禁用回退 | `ipv4first` |
| `HEARTBEAT_INTERVAL_MS` | Hub 心跳间隔 | `360000` (6 分钟) |
| `MEMORY_DIR` | 存储记忆文件的路径 | `./memory` |
| `EVOLVE_REPORT_TOOL` | 用于报告结果的工具名称 | `message` |
### 本地覆盖(注入)
你可以注入本地偏好设置(例如,在报告时使用 `feishu-card` 替代 `message`),而无需修改核心代码。
**方法 1:环境变量**
在你的 `.env` 文件中设置 `EVOLVE_REPORT_TOOL`:
```
EVOLVE_REPORT_TOOL=feishu-card
```
**方法 2:动态检测**
脚本会自动检测你的工作区中是否存在兼容的本地技能(如 `skills/feishu-card`),并相应地升级其行为。
### 验证者角色(默认开启)
当连接到 [EvoMap Hub](https://evomap.ai) 时,每个 evolver 实例还会充当**去中心化验证者**:它会定期拉取一批由 hub 分配的验证任务,在现有的沙箱中运行提议者声称的验证命令,并提交回 `ValidationReport`。加入共识的验证者将获得积分和声誉。
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `EVOLVER_VALIDATOR_ENABLED` | _(未设置 = ON)_ | 设为 `0`/`false`/`off` 退出;设为 `1`/`true`/`on` 强制开启。环境变量始终优先于 hub 推送的标志和内置默认值。 |
| `EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS` | `60000` | 在 `--loop` / `--mad-dog` 模式下运行时,验证者轮询之间的间隔。 |
| `EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE` | `2` | 每次轮询声明的最大任务数。 |
| `EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS` | `8000` | 每次轮询任务获取的超时时间。 |
持续性标志覆盖:当环境变量未设置时,runtime 会读取 `~/.evomap/feature_flags.json`。Hub 可能会通过现有的 mailbox 通道推送 `feature_flag_update` 事件,以便在升级后为旧版安装开启此功能。
若要永久退出:
```
EVOLVER_VALIDATOR_ENABLED=0 evolver --loop
```
### 自动 GitHub Issue 报告
当 evolver 检测到持续性失败(失败循环或高失败率的重复错误)时,它可以自动将带有脱敏环境信息和日志的 GitHub issue 提交到上游仓库。所有敏感数据(token、本地路径、电子邮件等)在提交前都会被脱敏。
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `EVOLVER_AUTO_ISSUE` | `true` | 启用/禁用自动 issue 报告 |
| `EVOLVER_ISSUE_REPO` | `EvoMap/evolver` | 目标 GitHub 仓库 (owner/repo) |
| `EVOLVER_ISSUE_COOLDOWN_MS` | `86400000` (24小时) | 相同错误签名的冷却期 |
| `EVOLVER_ISSUE_MIN_STREAK` | `5` | 触发所需的最小连续失败次数 |
需要具有 `repo` scope 的 `GITHUB_TOKEN`(或 `GH_TOKEN` / `GITHUB_PAT`)。当没有可用的 token 时,将静默跳过此功能。
## 安全模型
本节描述了 Evolver 的执行边界和信任模型。
### 执行与不执行的内容
| 组件 | 行为 | 是否执行 Shell 命令? |
| :--- | :--- | :--- |
| `src/evolve.js` | 读取日志、选择基因、构建 prompt、写入产物 | 仅执行只读的 git/进程查询 |
| `src/gep/prompt.js` | 组装 GEP 协议 prompt 字符串 | 否(纯文本生成) |
| `src/gep/selector.js` | 通过信号匹配评分并选择 Genes/Capsules | 否(纯逻辑) |
| `src/gep/solidify.js` | 通过 Gene `validation` 命令验证补丁 | 是(见下文) |
| `index.js` (循环恢复) | 在崩溃时将 `sessions_spawn(...)` 文本打印到 stdout | 否(仅文本输出;执行取决于宿主 runtime) |
### Gene 验证命令安全性
`solidify.js` 执行 Gene 的 `validation` 数组中列出的命令。为了防止执行任意命令,所有验证命令都受到安全检查 (`isValidationCommandAllowed`) 的把关:
1. **前缀白名单**:仅允许以 `node`、`npm` 或 `npx` 开头的命令。
2. **无命令替换**:命令字符串中的任何位置都拒绝使用反引号和 `$(...)`。
3. **无 shell 操作符**:在剥离引号内的内容后,将拒绝 `;`、`&`、`|`、`>`、`<`。
4. **超时**:每个命令限制为 180 秒。
5. **限定执行范围**:命令在 `cwd` 设置为仓库根目录的情况下运行。
### A2A 外部资产摄取
通过 `scripts/a2a_ingest.js` 摄取的外部 Gene/Capsule 资产会被暂存在隔离的候选区。向本地存储的提升 (`scripts/a2a_promote.js`) 需要:
1. 显式的 `--validated` 标志(操作员必须先验证该资产)。
2. 对于 Genes:所有 `validation` 命令在提升前都会针对相同的安全检查进行审计。不安全的命令会导致提升被拒绝。
3. Gene 提升永远不会覆盖具有相同 ID 的现有本地 Gene。
### `sessions_spawn` 输出
`index.js` 和 `evolve.js` 中的 `sessions_spawn(...)` 字符串是**输出到 stdout 的文本**,而不是直接的函数调用。它们是否被解释取决于宿主 runtime(例如 OpenClaw 平台)。Evolver 本身不会将 `sessions_spawn` 作为可执行代码调用。
## 版本控制 (SemVer)
MAJOR.MINOR.PATCH
- MAJOR:不兼容的更改
- MINOR:向后兼容的功能
- PATCH:向后兼容的错误修复
## 更新日志
请在 [GitHub Releases](https://github.com/EvoMap/evolver/releases) 上查看完整的发布历史。
## 常见问题
**它会自动编辑代码吗?**
不会。Evolver 会生成受协议约束的 prompt 和指导进化的。它不会直接修改你的源代码。请参阅 [Evolver 能做什么(和不能做什么)](#what-evolver-does-and-does-not-do)。
**我运行了 `evolver --loop`,但它只是一直在打印文本。它在工作吗?**
是的。在独立模式下,evolver 会生成 GEP prompt 并将它们打印到 stdout。如果你期望它自动应用更改,你需要一个像 [OpenClaw](https://openclaw.com) 这样的宿主 runtime 来解释输出。或者,使用 `--review` 模式手动审查并应用每个进化步骤。
**我需要连接到 EvoMap Hub 吗?**
不需要。所有核心进化功能都可以离线工作。连接 Hub 仅对于网络功能(如技能商店、worker pool 和进化排行榜)是必需的。请参阅 [连接到 EvoMap Hub](#connecting-to-evomap-hub)。
**我需要使用所有的 GEP 资产吗?**
不需要。你可以从默认的 Genes 开始,并随着时间推移进行扩展。
**这在生产环境中安全吗?**
请使用审查模式和验证步骤。把它当作一个专注于安全的进化工具,而不是实时修补程序。请参阅 [安全模型](#security-model)。
**我应该把这个仓库克隆到哪里?**
把它克隆到你喜欢的任何目录中。如果你使用 [OpenClaw](https://openclaw.com),请将其克隆到你的 OpenClaw 工作区中,以便宿主 runtime 可以访问 evolver 的 stdout。对于独立使用,任何位置都可以。
## 路线图
方向性而非承诺 —— 实时的待办事项列表在 [GitHub Issues](https://github.com/EvoMap/evolver/issues) 中。
- **新手引导**:一分钟的快速入门演示以及与替代的 agent 进化方法的比较表。
- **更深入的 GEP 集成**:更丰富的信号提取和 Gene / Capsule 选择,以及重用分析。
- **记忆与技能**:更快地将会话结果提炼为可重用的 Genes 和 Capsules。
- **更广泛的 runtime 覆盖范围**:在 Cursor / Claude Code / Codex / Kiro / opencode / OpenClaw 之外提供更多一流的宿主集成。
## Star 历史
[](https://star-history.com/#EvoMap/evolver&Date)
## 致谢
- [onthebigtree](https://github.com/onthebigtree) —— 启发了 evomap 进化网络的创建。修复了三个 runtime 和逻辑错误 (PR [#25](https://github.com/EvoMap/evolver/pull/25));贡献了主机名隐私哈希、可移植的验证路径和死代码清理 (PR [#26](https://github.com/EvoMap/evolver/pull/26))。
- [lichunr](https://github.com/lichunr) —— 为我们的计算网络贡献了价值数千美元的 token 供免费使用。
- [shinjiyu](https://github.com/shinjiyu) —— 提交了大量错误报告,并贡献了带有片段标签的多语言信号提取 (PR [#112](https://github.com/EvoMap/evolver/pull/112))。
- [voidborne-d](https://github.com/voidborne-d) —— 通过 11 种新的凭证脱敏模式强化了广播前的净化 (PR [#107](https://github.com/EvoMap/evolver/pull/107));为 strategy、validationReport 和 envFingerprint 添加了 45 项测试 (PR [#139](https://github.com/EvoMap/evolver/pull/139))。
- [blackdogcat](https://github.com/blackdogcat) —— 修复了缺失的 dotenv 依赖,并实现了智能 CPU 负载阈值自动计算 (PR [#144](https://github.com/EvoMap/evolver/pull/144))。
- [LKCY33](https://github.com/LKCY33) —— 修复了 .env 加载路径和目录权限 (PR [#21](https://github.com/EvoMap/evolver/pull/21))。
- [hendrixAIDev](https://github.com/hendrixAIDev) —— 修复了 performMaintenance() 在 dry-run 模式下运行的问题 (PR [#68](https://github.com/EvoMap/evolver/pull/68))。
- [toller892](https://github.com/toller892) —— 独立识别并报告了 events.jsonl forbidden_paths bug (PR [#149](https://github.com/EvoMap/evolver/pull/149))。
- [WeZZard](https://github.com/WeZZard) —— 在 SKILL.md 中添加了 A2A_NODE_ID 设置指南,并在未显式配置 NODE_ID 时在 a2aProtocol 中添加了控制台警告 (PR [#164](https://github.com/EvoMap/evolver/pull/164))。
- [Golden-Koi](https://github.com/Golden-Koi) —— 在 README 中添加了 cron/外部运行器保活最佳实践 (PR [#167](https://github.com/EvoMap/evolver/pull/167))。
- [upbit](https://github.com/upbit) —— 在推广 evolver 和 evomap 技术方面发挥了至关重要的作用。
- [Chi Jianqiang](https://mowen.cn) —— 为推广和用户体验改进做出了重大贡献。
## 许可证
[GPL-3.0-or-later](https://opensource.org/licenses/GPL-3.0)
## 下载历史
Evolver 通过三个渠道发布 —— [npm 包](https://www.npmjs.com/package/@evomap/evolver)、[GitHub Releases](https://github.com/EvoMap/evolver/releases) 上的预构建二进制文件,以及 [ClawHub](https://skill-history.com/autogame-17/evolver) 技能注册表:
[](https://www.npmjs.com/package/@evomap/evolver)
[](https://npm-stat.com/charts.html?package=@evomap/evolver)
[](https://github.com/EvoMap/evolver/releases)
[](https://skill-history.com/autogame-17/evolver)
标签:AI智能体, CLI工具, GNU通用公共许可证, Node.js, 人工智能, 提示工程, 用户模式Hook绕过, 自动进化, 自定义脚本