Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
2a5d409
Release v1.7.1
Feb 8, 2026
8344e39
Release v1.7.3
Feb 8, 2026
8addbbb
Release v1.8.0
Feb 9, 2026
d0ff332
Release v1.8.1
Feb 9, 2026
ec14047
Release v1.8.2
Feb 9, 2026
f38ba9b
Release v1.8.3
Feb 9, 2026
6a685f3
Release v1.8.4
Feb 9, 2026
35f6c1f
Release v1.8.5
Feb 9, 2026
223c987
Release v1.8.6
Feb 9, 2026
0b726e1
Release v1.9.1
Feb 9, 2026
105cd5b
Release v1.9.2
Feb 10, 2026
27f26cc
Release v1.10.0
Feb 10, 2026
c52b652
Release v1.10.1
Feb 11, 2026
84eabcc
Release v1.10.4
Feb 11, 2026
14581a4
Release v1.10.5
Feb 11, 2026
042fdae
Release v1.10.6
Feb 12, 2026
027062e
Release v1.10.7
Feb 12, 2026
d0c86ea
Release v1.10.8
Feb 13, 2026
03ed73c
Release v1.10.9
Feb 13, 2026
cecc53b
Release v1.10.10
Feb 13, 2026
f807773
Release v1.10.11
Feb 13, 2026
750a465
Release v1.10.12
Feb 13, 2026
814225c
Release v1.10.13
Feb 13, 2026
aaa3b24
Release v1.10.14
Feb 13, 2026
8a7a94b
Release v1.10.15
Feb 13, 2026
480a676
Release v1.11.0
Feb 13, 2026
b17f487
Release v1.11.1
Feb 13, 2026
0a39988
Release v1.12.0
Feb 13, 2026
9fc8dc6
Release v1.12.1
Feb 13, 2026
ea27157
Release v1.12.2
Feb 13, 2026
b4127dc
Release v1.12.3
Feb 14, 2026
351a8e0
Release v1.12.3
Feb 15, 2026
ea0d20e
Release v1.13.0
Feb 15, 2026
81691f6
chore: sync from private dev (acknowledgments, task receiver, solidif…
Feb 18, 2026
8b40d3d
Release v1.13.2
Feb 18, 2026
4379974
Release v1.13.3
Feb 18, 2026
a0127ac
Release v1.14.0
Feb 18, 2026
203e5b8
Release v1.14.0
Feb 19, 2026
51aa843
fix: load .env from current directory instead of parent
LKCY33 Feb 20, 2026
7c6409b
fix: export matchPatternToSignals from selector.js
onthebigtree Feb 20, 2026
682c333
fix: simplify currentSleepMs initialisation in daemon loop
onthebigtree Feb 20, 2026
8824801
fix: respect gene max_files constraint; remove variable shadowing
onthebigtree Feb 20, 2026
9afc8d2
Add unit tests for core GEP modules
voidborne-d Feb 21, 2026
b76cb18
Add clarifying comment on clamp01(Infinity) behavior
voidborne-d Feb 21, 2026
e82d79d
Release v1.15.0
Feb 21, 2026
51a5425
fix: skip performMaintenance() in dry-run mode
hendrixAIDev Feb 21, 2026
d6c80d2
Merge pull request #25 from onthebigtree/fix/bug-fixes-batch
autogame-17 Feb 22, 2026
a7c4b32
Merge pull request #68 from hendrixAIDev/fix/dry-run-maintenance
autogame-17 Feb 22, 2026
1610739
Merge pull request #63 from voidborne-d/add-unit-tests
autogame-17 Feb 22, 2026
616a569
Merge pull request #21 from LKCY33/fix/env-loading-path
autogame-17 Feb 22, 2026
7f53127
Release v1.16.0
Feb 22, 2026
5e20407
Release v1.16.0
Feb 22, 2026
7b15373
Release v1.17.0
Feb 22, 2026
8d78b9a
Release v1.17.1
Feb 22, 2026
8733ef1
Release v1.18.0
Feb 22, 2026
a7f18c0
Release v1.18.1
Feb 23, 2026
c5444b3
Release v1.19.0
Feb 23, 2026
a612f6b
Release v1.19.1
Feb 24, 2026
788f208
Release v1.20.0
Feb 26, 2026
5617546
Release v1.20.1
Feb 26, 2026
1bf5ba9
Release v1.20.3
Feb 27, 2026
c1a4ab4
Release v1.20.3
Feb 28, 2026
1b46e8d
Release v1.20.4
Mar 1, 2026
57c952e
Release v1.21.0
Mar 2, 2026
87c73fb
docs: add PR contributors to acknowledgments
Mar 2, 2026
7d814aa
Release v1.21.1
Mar 2, 2026
c361020
Release v1.21.2
Mar 2, 2026
83250cb
Release v1.21.3
Mar 2, 2026
b97ed47
Release v1.22.0
Mar 3, 2026
b05bf37
Release v1.23.0
Mar 3, 2026
1288495
Release v1.24.0
Mar 4, 2026
7338e83
Release v1.27.0
Mar 5, 2026
1511551
chore(release): v1.27.1
Mar 5, 2026
3881f36
Release v1.27.2
Mar 5, 2026
0b455a9
docs(SKILL.md): add A2A_HUB_URL to config example
WeZZard Mar 5, 2026
9c91501
docs(README): add pm2 keepalive example
Golden-Koi Mar 5, 2026
c8f02ad
Release v1.27.3
Mar 6, 2026
f9fbe9d
fix(solidify): log repoRoot path during hard reset rollback
a88883284 Mar 6, 2026
7175cf9
fix: defer worker task claim to solidify for poll-based agents
autogame-17 Mar 7, 2026
e6068b0
Release v1.27.5
Mar 7, 2026
02c2e5a
chore(release): v1.28.0 -- commitment tracking support
Mar 9, 2026
fa7a011
fix(v1.28.0): commitment deadline edge case and heartbeat meta
Mar 9, 2026
ce84998
fix: avoid loop deadlock when bridge is disabled
codex Mar 10, 2026
7d0ef6b
fix: avoid rollback during loop auto-reject
codex Mar 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ dist-public/
test/tmp/
.docker-test-state/

# Local identity persistence (device + node)
.evomap_device_id
.evomap_node_id
1 change: 0 additions & 1 deletion MEMORY.md

This file was deleted.

156 changes: 96 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

![Capability Evolver Cover](assets/cover.png)

[Chinese Docs](README.zh-CN.md)
**[evomap.ai](https://evomap.ai)** | [Documentation](https://evomap.ai/wiki) | [Chinese Docs](README.zh-CN.md)

---

**"Evolution is not optional. Adapt or die."**

Expand All @@ -11,8 +13,17 @@
- **Pain it solves**: Turns ad hoc prompt tweaks into auditable, reusable evolution assets.
- **Use in 30 seconds**: `node index.js` to generate a GEP-guided evolution prompt.

## EvoMap -- The Evolution Network

Capability Evolver is the core engine behind **[EvoMap](https://evomap.ai)**, a network where AI agents evolve through validated collaboration. Visit [evomap.ai](https://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.

## Prerequisites

- **Node.js** >= 18
- **Git** -- Required. Evolver uses git for rollback, blast radius calculation, and solidify. Running in a non-git directory will fail with a clear error message.

## Try It Now (Minimal)

```bash
Expand Down Expand Up @@ -40,7 +51,11 @@ The **Capability Evolver** inspects runtime history, extracts signals, selects a
- **Auto-Log Analysis**: scans memory and history files for errors and patterns.
- **Self-Repair Guidance**: emits repair-focused directives from signals.
- **GEP Protocol**: standardized evolution with reusable assets.
- **Mutation + Personality Evolution (GEP v1.4)**: each evolution run is gated by an explicit Mutation object and an evolvable PersonalityState.
- **Mutation + Personality Evolution**: each evolution run is gated by an explicit Mutation object and an evolvable PersonalityState.
- **Configurable Strategy Presets**: `EVOLVE_STRATEGY=balanced|innovate|harden|repair-only` controls intent balance.
- **Signal De-duplication**: prevents repair loops by detecting stagnation patterns.
- **Operations Module** (`src/ops/`): portable lifecycle, skill monitoring, cleanup, self-repair, wake triggers -- zero platform dependency.
- **Protected Source Files**: prevents autonomous agents from overwriting core evolver code.
- **One-Command Evolution**: `node index.js` to generate the prompt.

## Typical Use Cases
Expand Down Expand Up @@ -69,7 +84,6 @@ Use review mode and validation steps. Treat it as a safety-focused evolution too
## Roadmap

- Add a one-minute demo workflow
- Add a public changelog
- Add a comparison table vs alternatives

## GEP Protocol (Auditable Evolution)
Expand Down Expand Up @@ -100,6 +114,38 @@ node index.js --review
node index.js --loop
```

### With Strategy Preset
```bash
EVOLVE_STRATEGY=innovate node index.js --loop # maximize new features
EVOLVE_STRATEGY=harden node index.js --loop # focus on stability
EVOLVE_STRATEGY=repair-only node index.js --loop # emergency fix mode
```

### Operations (Lifecycle Management)
```bash
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
```

### 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
bash -lc 'node index.js --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:

```bash
pm2 start "bash -lc 'node index.js --loop'" --name evolver --cron-restart="0 */6 * * *"
```

## Public Release

This repository is the public distribution.
Expand Down Expand Up @@ -137,63 +183,7 @@ MAJOR.MINOR.PATCH

## Changelog

### v1.6.0
- Add innovation/opportunity signal detection: user_feature_request, user_improvement_suggestion, perf_bottleneck, capability_gap, stable_success_plateau, external_opportunity.
- Add innovate Gene (gene_gep_innovate_from_opportunity) for proactive feature development.
- Auto-innovate mutation when opportunity signals are present (no longer requires --drift flag).
- Personality evolution now responds to opportunity signals by increasing creativity.
- Safety: repair still takes priority over innovate when errors are present.

### v1.5.1
- Add containerized vibe testing framework (Docker + node:22-bookworm, OpenClaw-compatible environment).
- 7 end-to-end tests: module load, dry-run solidify, schema compliance, A2A round-trip, full evolve+solidify, loop gating, env fingerprint.
- Add internal daemon loop with suicide guard for memory leak protection.
- One-command test: `npm run test:vibe`.

### v1.5.0
- Add content-addressable asset IDs (SHA-256 canonical hashing) for deduplication, tamper detection, and cross-node consistency.
- Add environment fingerprint capture (node version, platform, arch, evolver version) embedded in EvolutionEvents, Capsules, and ValidationReports.
- Add standardized ValidationReport type with machine-readable schema, full command results, and env fingerprint.
- Add GEP A2A protocol layer with 6 message types (hello/publish/fetch/report/decision/revoke) and pluggable transport interface.
- Add FileTransport as default A2A transport (JSONL outbox/inbox).
- Add asset_id integrity verification on A2A ingest; reject tampered assets.
- Add schema_version field to all GEP asset types (Gene, Capsule, EvolutionEvent, ValidationReport).
- Fix: dry-run mode no longer triggers rollback.
- Merge backport/online-fixes: self-contained crash recovery with recover_loop.js.

### v1.4.4
- Add validation command safety check: Gene validation commands are gated by prefix whitelist (node/npm/npx) and shell operator blocking.
- Add validation audit on A2A Gene promotion: external Genes with unsafe validation commands are rejected before promotion.
- Add Security Model documentation to README.

### v1.4.3
- Release preparation for v1.4.3.

### v1.4.2
- Add loop gating: do not start a new cycle until the previous run is solidified (prevents fast empty cycles).
- Preserve `last_solidify` when writing solidify state (merge instead of overwrite).

### v1.4.1
- Add execute-by-default bridge: after generating the GEP prompt, emit `sessions_spawn(...)` to spawn an executor agent.
- Write prompt artifacts to `memory/` for reliable handoff and auditing.

### v1.4.0
- Add explicit Mutation protocol (repair/optimize/innovate) and require Mutation per evolution run.
- Add evolvable PersonalityState with small PersonalityMutation steps and natural selection statistics.
- Extend EvolutionEvent with `mutation_id` and `personality_state`; record both into Memory Graph events.
- Add `scripts/gep_personality_report.js` to observe personality success rates and convergence.

### v1.3.1
- Release preparation for v1.3.1.

### v1.3.0
- Release preparation for v1.3.0.

### v1.2.0
- Memory Graph v2 and A2A exchange protocol integration.

### v1.1.0
- Public build/publish pipeline, prompt budget enforcement, and structured GEP asset storage.
See the full release history on [GitHub Releases](https://github.com/autogame-17/evolver/releases).

## Security Model

Expand Down Expand Up @@ -247,6 +237,52 @@ EVOLVE_REPORT_TOOL=feishu-card
**Method 2: Dynamic Detection**
The script automatically detects if compatible local skills (like `skills/feishu-card`) exist in your workspace and upgrades its behavior accordingly.

### Auto GitHub Issue Reporting

When the evolver detects persistent failures (failure loop or recurring errors with high failure ratio), it can automatically file a GitHub issue to the upstream repository with sanitized environment info and logs. All sensitive data (tokens, local paths, emails, etc.) is redacted before submission.

| Variable | Default | Description |
|----------|---------|-------------|
| `EVOLVER_AUTO_ISSUE` | `true` | Enable/disable auto issue reporting |
| `EVOLVER_ISSUE_REPO` | `autogame-17/capability-evolver` | Target GitHub repository (owner/repo) |
| `EVOLVER_ISSUE_COOLDOWN_MS` | `86400000` (24h) | Cooldown period for the same error signature |
| `EVOLVER_ISSUE_MIN_STREAK` | `5` | Minimum consecutive failure streak to trigger |

Requires `GITHUB_TOKEN` (or `GH_TOKEN` / `GITHUB_PAT`) with `repo` scope. When no token is available, the feature is silently skipped.

### 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) |

```bash
WORKER_ENABLED=1 WORKER_DOMAINS=repair,harden WORKER_MAX_LOAD=3 node index.js --loop
```

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=autogame-17/evolver&type=Date)](https://star-history.com/#autogame-17/evolver&Date)

## Acknowledgments

- [onthebigtree](https://github.com/onthebigtree) -- Inspired the creation of evomap evolution network. Fixed three runtime and logic bugs (PR #25); contributed hostname privacy hashing, portable validation paths, and dead code cleanup (PR #26).
- [lichunr](https://github.com/lichunr) -- Contributed thousands of dollars in tokens for our compute network to use for free.
- [shinjiyu](https://github.com/shinjiyu) -- Submitted numerous bug reports and contributed multilingual signal extraction with snippet-carrying tags (PR #112).
- [voidborne-d](https://github.com/voidborne-d) -- Hardened pre-broadcast sanitization with 11 new credential redaction patterns (PR #107); added 45 tests for strategy, validationReport, and envFingerprint (PR #139).
- [blackdogcat](https://github.com/blackdogcat) -- Fixed missing dotenv dependency and implemented intelligent CPU load threshold auto-calculation (PR #144).
- [LKCY33](https://github.com/LKCY33) -- Fixed .env loading path and directory permissions (PR #21).
- [hendrixAIDev](https://github.com/hendrixAIDev) -- Fixed performMaintenance() running in dry-run mode (PR #68).
- [toller892](https://github.com/toller892) -- Independently identified and reported the events.jsonl forbidden_paths bug (PR #149).
- [WeZZard](https://github.com/WeZZard) -- Added A2A_NODE_ID setup guide to SKILL.md and a console warning in a2aProtocol when NODE_ID is not explicitly configured (PR #164).
- [Golden-Koi](https://github.com/Golden-Koi) -- Added cron/external runner keepalive best practice to README (PR #167).
- [upbit](https://github.com/upbit) -- Played a vital role in popularizing evolver and evomap technologies.
- [Chi Jianqiang](https://mowen.cn) -- Made significant contributions to promotion and user experience improvements.

## License

MIT
Expand Down
Loading