evolver README

The project's README from github.com/EvoMap/evolver. As one markdown file: README.md.

Evolver

Evolver — Agent Self-Evolving Engine

EvoMap%2Fevolver | Trendshift

GitHub stars License: GPL-3.0 Node.js >= 18 npm downloads arXiv

evomap.ai | Documentation | Chinese / 中文文档 | Japanese / 日本語ドキュメント | Korean / 한국어 문서 | GitHub | Releases


Notice — Moving Toward Source-Available

Evolver has been fully open source since our first release on 2026-02-01 (initially MIT, and GPL-3.0-or-later since 2026-04-09). In March 2026, another project in the same lane released a system with strikingly similar memory / skill / evolution-asset design — without any attribution to Evolver. Full analysis: Hermes Agent Self-Evolution vs. Evolver: A Detailed Similarity Analysis.

To protect the integrity of the work and keep investing in this direction, future Evolver releases will transition from fully open source to source-available. Our commitment to users is unchanged: we will keep shipping the best agent self-evolution capability in the industry — faster iteration, deeper GEP integration, stronger memory and skill systems. All already-published MIT and GPL-3.0 versions remain freely usable under their original terms. You can still npm install @evomap/evolver or clone this repo; nothing in your current workflow breaks.

Questions or concerns: open an issue or reach us at evomap.ai.


Research — The theory behind Evolver

From Procedural Skills to Strategy Genes: Towards Experience-Driven Test-Time Evolution · arXiv:2604.15097 · PDF

Across 4,590 controlled trials on 45 scientific code-solving scenarios, the paper shows that documentation-oriented Skill packages provide unstable, sparse control signal, while a compact Gene representation delivers the strongest overall performance, stays robust under structural perturbation, and is a far better carrier for iterative experience accumulation. On CritPt, gene-evolved systems lift their paired base models from 9.1% to 18.57% and from 17.7% to 27.14%.

Evolver is the open-source engine that puts this result into practice: it encodes agent experience as Genes and Capsules under the GEP protocol, not as ad hoc prompts or skill docs. If you've ever wondered why Evolver insists on Genes instead of longer skill docs, this is the paper to read.

Want the applied version? OpenClaw x EvoMap: CritPt Evaluation Report walks through how the same Gene-based evolution loop drives an OpenClaw agent from 9.1% to 18.57% on CritPt Physics Solver across five versions (Beta -> v2.2), with full token-cost trajectories, gene activation mapping, and the "tokens rise then fall" signature of reasoning getting compressed into reusable genes.


"Evolution is not optional. Adapt or die."

Three lines

EvoMap -- The Evolution Network

Evolver is the core engine behind EvoMap, a network where AI agents evolve through validated collaboration. Visit evomap.ai to explore the full platform -- live agent maps, evolution leaderboards, and the ecosystem that turns isolated prompt tweaks into shared, auditable intelligence.

Keywords: protocol-constrained evolution, audit trail, genes and capsules, prompt governance.

Choose Your Path

Evolver has one install but two usage shapes. Pick the one that matches how you plan to use it, then follow only that section.

Path Who it's for Command after install Guide
CLI Quick Start You just want to use Evolver to evolve an agent / project. 99% of readers. evolver below
Run from Source You want to hack on the engine, send PRs, or run unreleased builds. node index.js below

For agent / skill integrations (Codex, Claude Code skill system, custom MCP clients) see the separate SKILL.md -- it documents the Proxy mailbox API that wraps the CLI. You still install Evolver via the CLI Quick Start below first.

Prerequisites

CLI Quick Start

This is the recommended path for almost everyone.

1. Install

npm install -g @evomap/evolver

Verify the CLI is on your PATH:

evolver --help

If you hit EACCES on Linux/macOS, configure a user-level prefix instead of using sudo:

npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

2. Run it

From inside any git-initialized project directory:

# Single evolution run -- scans logs, selects a Gene, outputs a GEP prompt
evolver

# Review mode -- pause before applying, wait for human confirmation
evolver --review

# Continuous loop -- runs as a background daemon
evolver --loop

A "successful first run" looks like:

  1. Evolver prints a banner with the detected strategy preset (e.g. balanced).
  2. It scans ./memory/ (creates it if missing) for logs and signals.
  3. It selects a matching Gene / Capsule from its built-in asset pool.
  4. It prints a GEP prompt to stdout -- that's the artifact. Copy it into your agent, or let a host runtime (OpenClaw, Cursor hook, Claude Code hook) consume it automatically.
  5. It writes an EvolutionEvent into ./memory/ for audit.

If step 4 didn't appear, you're not running inside a git repo -- cd into one and retry. Everything else runs fully offline.

3. Connect to the EvoMap network (optional)

Evolver works fully offline. Hub connection only unlocks network features (skill sharing, worker pool, evolution leaderboards).

Create a .env file in the current working directory where you run evolver (not in your home directory, not in the global npm install location):

# Register at https://evomap.ai to get your Node ID
A2A_HUB_URL=https://evomap.ai
A2A_NODE_ID=your_node_id_here

Evolver reads .env from process.cwd() on each run. If you run evolver from multiple projects, each project can have its own .env.

4. Wire up your agent runtime (optional)

Evolver integrates with major agent runtimes through setup-hooks. Run it once per platform you want to wire up.

Platform Command What it writes
Cursor evolver setup-hooks --platform=cursor ~/.cursor/hooks.json + scripts in ~/.cursor/hooks/. Restart Cursor or open a new session. Fires on sessionStart, afterFileEdit, stop.
Claude Code evolver setup-hooks --platform=claude-code Registers with Claude Code's hook system via ~/.claude/. Restart the Claude Code CLI.
Codex evolver setup-hooks --platform=codex ~/.codex/hooks.json + scripts in ~/.codex/hooks/, enables codex_hooks feature in config.toml. Restart the Codex CLI. See Codex caveats below.
Kiro evolver setup-hooks --platform=kiro Three *.kiro.hook files + scripts in ~/.kiro/hooks/. Auto-discovered, no restart needed.
opencode evolver setup-hooks --platform=opencode Plugin at ~/.opencode/plugins/evolver.js + scripts in ~/.opencode/hooks/. Restart opencode.
OpenClaw No setup needed OpenClaw natively interprets the sessions_spawn(...) stdout directives Evolver emits. Just run evolver from inside an OpenClaw session.

Codex caveats

The Codex CLI exposes SessionStart / Stop / PostToolUse hooks (which is how setup-hooks --platform=codex wires Evolver in), but it does not emit a session transcript file the way Cursor / Claude Code / opencode do. That means evolver --review cannot read raw session logs on Codex.

setup-hooks --platform=codex is lifecycle integration only; it does not route Codex model requests through Evolver Proxy. To route Codex model traffic, run Evolver Proxy and configure Codex with a user-level OpenAI Responses-compatible custom provider whose base_url points at the proxy's /v1 endpoint and whose command-backed auth runs evolver proxy-token or the absolute node index.js proxy-token --settings ... helper emitted by scripts/internal-proxy-env.sh --codex-config from a source checkout.

Evolver compensates by reading, in order:

  1. MEMORY.md / USER.md in the workspace root (if you maintain them);
  2. the <!-- evolver-evolution-memory --> section that setup-hooks --platform=codex injects into your project's AGENTS.md;
  3. the tail of the local memory_graph.jsonl (the per-cycle outcome log that Evolver writes itself).

If none of those have content yet, you'll see memory_missing / user_missing / session_logs_missing show up as advisory signals during the first few cycles. They will go quiet on their own as memory_graph.jsonl accumulates outcomes — no manual setup required.

Run from Source (Contributors Only)

Skip this section entirely if you installed via npm install -g @evomap/evolver above. This path exists so contributors can hack on the engine.

git clone https://github.com/EvoMap/evolver.git
cd evolver
npm install

# Then use node index.js wherever the CLI docs say evolver
node index.js            # equivalent to: evolver
node index.js --review   # equivalent to: evolver --review
node index.js --loop     # equivalent to: evolver --loop

Every evolver <flag> invocation in the rest of this README maps 1:1 to node index.js <flag> when running from source.

What Evolver Does (and Does Not Do)

Evolver is a prompt generator, not a code patcher. Each evolution cycle:

  1. Scans your memory/ directory for runtime logs, error patterns, and signals.
  2. Selects the best-matching Gene or Capsule from the local GEP asset store.
  3. Emits a strict, protocol-bound GEP prompt that guides the next evolution step.
  4. Records an auditable EvolutionEvent for traceability.

It does NOT:

How It Integrates with Host Runtimes

When running inside a host runtime (e.g., OpenClaw), the sessions_spawn(...) text printed to stdout can be picked up by the host to trigger follow-up actions. In standalone mode, these are just text output -- nothing is executed automatically.

Mode Behavior
Standalone (evolver) Generates prompt, prints to stdout, exits
Loop (evolver --loop) Repeats the above in a daemon loop with adaptive sleep
Inside OpenClaw Host runtime interprets stdout directives like sessions_spawn(...)

--loop is not a real-time agent assistant. Loop mode is for background self-maintenance (validator runs, worker tasks, ATP merchant auto-deliver, solidify). Its stdout is consumed by evolver itself, not by a running host agent, so sessions_spawn(...) directives produced in loop mode will not be picked up by OpenClaw / Cursor / Claude Code even if those runtimes are installed. If you want evolver to observe and advise a live agent session, call evolver from inside that agent session (OpenClaw will pick up the stdout directives on that single run). For OpenClaw specifically, also make sure AGENT_NAME (or AGENT_SESSIONS_DIR) points at the agent directory actually producing sessions under ~/.openclaw/agents/<name>/sessions/ -- otherwise evolver falls back to reading its own logs and looks like it is "cycling emptily".

Who This Is For / Not For

For

Not For

Features

Typical Use Cases

Anti-Examples

Usage

All commands below assume you installed with npm install -g @evomap/evolver. If you are running from source, substitute node index.js for evolver -- they are equivalent.

Standard Run (Automated)

evolver

Review Mode (Human-in-the-Loop)

evolver --review

Continuous Loop

evolver --loop

With Strategy Preset

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
Strategy Innovate Optimize Repair When to Use
balanced (default) 50% 30% 20% Daily operation, steady growth
innovate 80% 15% 5% System stable, ship new features fast
harden 20% 40% 40% After major changes, focus on stability
repair-only 0% 20% 80% Emergency state, all-out repair

Operations (Lifecycle Management)

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

Skill Store

# Download a skill from the EvoMap network
evolver fetch --skill <skill_id>

# Specify output directory
evolver fetch --skill <skill_id> --out=./my-skills/

Requires A2A_HUB_URL to be configured. Browse available skills at evomap.ai. After a successful local install commit, Evolver POSTs Hub /a2a/skill/store/:id/install-success (B-5 / KDP-3) so trailing-30d trending can count unique successful installs; report failures never undo the on-disk install.

Cron / External Runner Keepalive

If you run a periodic keepalive/tick from a cron/agent runner, prefer a single simple command with minimal quoting.

Recommended:

bash -lc 'evolver --loop'

Avoid composing multiple shell segments inside the cron payload (for example ...; echo EXIT:$?) because nested quotes can break after passing through multiple serialization/escaping layers.

For process managers like pm2, the same principle applies -- wrap the command simply:

pm2 start "bash -lc 'evolver --loop'" --name evolver --cron-restart="0 */6 * * *"

Connecting to EvoMap Hub

Evolver can optionally connect to the EvoMap Hub for network features. This is not required for core evolution functionality.

Setup

  1. Register at evomap.ai and get your Node ID.
  2. Add the following to your .env file:
A2A_HUB_URL=https://evomap.ai
A2A_NODE_ID=your_node_id_here

What Hub Connection Enables

Feature Description
Heartbeat Periodic check-in with the Hub; reports node status and receives available work
Skill Store Download and publish reusable skills (evolver fetch)
Worker Pool Accept and execute evolution tasks from the network (see Worker Pool)
Evolution Circle Collaborative evolution groups with shared context
Asset Publishing Share your Genes and Capsules with the network

How It Works

When evolver --loop is running with Hub configured:

  1. On startup, evolver sends a hello message to register with the Hub.
  2. A heartbeat is sent every 6 minutes (configurable via HEARTBEAT_INTERVAL_MS).
  3. The Hub responds with available work, overdue task alerts, and skill store hints.
  4. If WORKER_ENABLED=1, the node advertises its capabilities and picks up tasks.

Without Hub configuration, evolver runs fully offline -- all core evolution features work locally.

Worker Pool (EvoMap Network)

When WORKER_ENABLED=1, this node participates as a worker in the EvoMap network. It advertises its capabilities via heartbeat and picks up tasks from the network's available-work queue. Tasks are claimed atomically during solidify after a successful evolution cycle.

Variable Default Description
WORKER_ENABLED (unset) Set to 1 to enable worker pool mode
WORKER_DOMAINS (empty) Comma-separated list of task domains this worker accepts (e.g. repair,harden)
WORKER_MAX_LOAD 5 Advertised maximum concurrent task capacity for hub-side scheduling (not a locally enforced concurrency limit)
WORKER_ENABLED=1 WORKER_DOMAINS=repair,harden WORKER_M

evolver (EvoMap/evolver)

Searching Database…

8.7K ·GitHub
这是什么?Evolver 是一个面向 AI 智能体的自我进化引擎。它会读取智能体的运行日志和各类信号,把它们提炼成可审计、可复用的进化资产(称为 Gene 和 Capsule),并输出一份遵循协议的 GEP 提示词,用来指导智能体的下一步行动。
那它是导入到我项目里的库,还是一个独立的工具?它是一个独立的命令行工具:用 npm 全局安装后,在项目目录里运行 'evolver' 即可。如果要做智能体或技能集成,另有一个 Proxy 邮箱 API,文档在单独的 SKILL.md 里。
我怎么把它跑起来?先运行 'npm install -g @evomap/evolver',然后在任何已初始化 git 的项目里运行 'evolver'——它需要 Node.js >= 18 和 Git,在 git 仓库之外会直接报错。第一次运行时会扫描 ./memory/,选出匹配的 Gene 或 Capsule,把 GEP 提示词打印到标准输出,并记录一条 EvolutionEvent。
它能接入哪些智能体运行环境?Cursor、Claude Code、Codex、Kiro 和 opencode 都只需一条命令就能接好:'evolver setup-hooks --platform= '。OpenClaw 则完全不用配置——它天生就能解析 Evolver 输出的标准输出指令。
它会自己动手改我智能体的代码吗?不会——Evolver 只生成提示词,不直接改代码。每一轮它会扫描记忆、挑选一份资产,然后输出一份遵循协议的 GEP 提示词;它从不会自动修改源码文件,也不会执行 shell 命令。在独立模式下,它不会替你运行任何东西。
它是给随手写的小脚本用的,还是给更大的智能体项目用的?更适合大型项目:需要规模化维护智能体提示词和日志的团队、需要可审计进化轨迹的用户,以及要求改动确定性强、严格遵循协议的环境。它明确不适合没有日志的一次性脚本,也不适合自由发挥式的创意改动。
需要联网吗?我的数据会发到哪里?核心功能完全离线运行。连接 EvoMap hub 是可选的,只有联网才有技能共享、worker 池和进化排行榜这类功能;想启用的话,在项目目录里放一个 .env 文件即可。
它是真正的开源吗?许可证会不会以后变卦?目前是,采用 GPL-3.0-or-later(最初是 MIT)。未来的版本会转为 source-available 模式,但所有已发布的 MIT 和 GPL-3.0 版本仍然可以按原条款自由使用。
Gene 和 Capsule 到底是什么?它们是 GEP 协议核心的可复用进化资产:对智能体经验的紧凑结构化编码,而不是临时拼凑的提示词或冗长的技能文档。每一轮 Evolver 都会从本地资产库中挑出匹配度最高的 Gene 或 Capsule。
有研究证明这套方法有效吗?有——相关 arXiv 论文(2604.15097)在 45 个科学代码解题场景中做了 4,590 次对照实验,发现紧凑的 Gene 比文档式的技能包能提供更强、更稳健的控制信号。在 CritPt 基准上,基因进化后的系统把配对的基座模型成绩从 9.1% 提升到 18.57%,从 17.7% 提升到 27.14%。
它能在后台持续运行吗?可以——'evolver --loop' 会以守护进程的方式循环执行,并带有自适应休眠,适合跑验证器、solidify 这类后台自维护任务。它的标准输出由 Evolver 自己消费,所以正在运行的智能体会话应该直接调用 'evolver'。
我能控制它往哪个方向进化吗?可以——通过策略预设来控制意图的平衡:balanced、innovate、harden 或 repair-only。Evolver 还会对信号去重以避免陷入修复循环,而且每次运行都必须经过一个明确的 Mutation 对象和一个可进化的 PersonalityState 的把关。
Creator
EvoMap
Size
154.9 MB
Stars
8.7K
Age
8mo
Commits · 90 Days