Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 4 additions & 5 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
},
"metadata": {
"description": "Official Evolver plugin for Cursor — persistent, auditable evolution memory for the agent, powered by the Genome Evolution Protocol (GEP).",
"version": "2.1.0"
"version": "2.2.0"
},
"plugins": [
{
"name": "evolver",
"source": ".",
"description": "Persistent, auditable evolution memory for the agent — recalls what worked, detects improvement signals, records outcomes. Powered by the Genome Evolution Protocol (GEP).",
"version": "2.1.0",
"description": "Prompt-relevant strategy recall, turn-end reuse reports and session-end distillation, from hooks only — nothing in the model's context but the recalled steps.",
"version": "2.2.0",
"author": {
"name": "EvoMap"
},
Expand All @@ -24,8 +24,7 @@
"evolution",
"self-improvement",
"agent-memory",
"gep",
"mcp"
"gep"
]
}
]
Expand Down
48 changes: 3 additions & 45 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "evolver",
"displayName": "Evolver — Self-Evolving Agent Memory",
"description": "Gives the agent a persistent, auditable evolution memory plus a bridge to the EvoMap network. Recalls what worked at session start, detects improvement signals while you edit, records outcomes when a task ends, and exposes the network's genes/capsules as MCP tools — powered by the Genome Evolution Protocol (GEP). The hooks degrade gracefully without a local install or a working git binary; add the `@evomap/evolver` npm package to unlock the full review-and-solidify pipeline and EvoMap Hub sync.",
"version": "2.1.0",
"description": "Recalls one proven strategy from the local Evolver Proxy behind each prompt, reports at every turn end how it was reused (with the checks the turn ran as evidence), and distills the session's latest verified turn into a Gene when the chat closes — all from hooks, with no tools, skill or rules in the model's context. Powered by the Genome Evolution Protocol (GEP); the plugin sets up the `@evomap/evolver` engine itself.",
"version": "2.2.0",
"author": {
"name": "EvoMap",
"email": "team@evomap.ai"
Expand All @@ -18,7 +18,6 @@
"agent-memory",
"gep",
"meta-learning",
"mcp",
"evomap"
],
"category": "developer-tools",
Expand All @@ -27,47 +26,6 @@
"automation",
"self-improvement"
],
"skills": "./skills/",
"commands": "./commands/",
"rules": "./rules/",
"hooks": "./hooks/hooks.json",
"mcpServers": "./mcp.json",
"variables": {
"type": "object",
"properties": {
"EVOMAP_NODE_ID": {
"type": "string",
"title": "EvoMap Node ID — leave blank for automatic setup",
"description": "Leave this blank (recommended). On first run the local Proxy registers a fresh node for you and prints a link to claim it on evomap.ai — you never paste an id or a secret here. Only fill this in to point the install at a node you already run yourself.",
"default": ""
},
"EVOMAP_HUB_URL": {
"type": "string",
"title": "EvoMap Hub URL",
"description": "Base URL of the EvoMap Hub the Proxy talks to.",
"default": "https://evomap.ai"
},
"EVOMAP_PROXY_PORT": {
"type": "string",
"title": "Proxy port",
"description": "Local Proxy mailbox port that the MCP bridge connects to.",
"default": "19820"
},
"EVOLVE_STRATEGY": {
"type": "string",
"title": "Evolution strategy",
"description": "balanced | innovate | harden | repair-only | early-stabilize | steady-state | auto",
"default": "balanced",
"enum": [
"balanced",
"innovate",
"harden",
"repair-only",
"early-stabilize",
"steady-state",
"auto"
]
}
}
}
"hooks": "./hooks/hooks.json"
}
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ jobs:
- name: Check out
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Run tests
run: node --test test/*.test.js
run: node --test test/*.test.mjs
43 changes: 39 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,45 @@ This project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Changed
- MCP bridge is Recipe-first: `evolver_recipe_search` then `evolver_recipe_express`
against Proxy `/recipe/search` and `/recipe/express`. `evolver_search_assets`
remains as Gene/Capsule fallback when no Recipe hits.
## [2.2.0] — 2026-10-26

Aligned with the DeepSeek Harness plugin (dsh-evolver 0.3.0): Evolver stays out of the model context.

### Added
- `beforeSubmitPrompt` recalls one strategy by the prompt text and adds it as `additional_context`, ending with
`Apply them where they fit.`; inline edits (no `composer_mode`) are left alone.
- `preToolUse` / `postToolUse` / `postToolUseFailure` / `afterFileEdit` / `afterAgentResponse` record the turn's
commands, checks (non-zero exit code, else failure output), paths, edits and answer; `stop` reports every
injected strategy with that evidence and the turn's own end (`completed` / `aborted` / `error`) as
`cursor:<conversation>:<turn>`.
- Aborted reports when a chat closes mid-turn, and at the next session start for a chat whose Cursor process is
gone; correction/praise follow-ups, retention reports, a report outbox with retries, and local root-event records.
- Every reuse report says `applied: used` (dsh-evolver #55): the model follows what is injected; the outcome,
the next prompt and kept edits judge whether it helped. `tier` is `L1` whenever a check ran.
- Session-end distillation: a verified turn becomes the chat's candidate (one that reused a strategy too)
(`~/.evolver/state/cursor-distill-pending.json`), dropped by a correction, and is distilled once in a detached
worker by the Cursor agent CLI, headless (`cursor-agent -p --output-format json --mode ask`, empty workspace,
on the chat's model), then sent to `POST /conversation/distill` with `platform: 'cursor'`. Three tries;
leftovers are claimed by the next session start. State writes go through a shared lock; every state file is
prefixed `cursor-`.
- `/evolver-status`, `/evolver-search`, `/evolver-distill`, `/evolver-sync`, `/evolver-review`, `/evolver-run`
and `/evolver-solidify` are answered by the `beforeSubmitPrompt` hook itself, which stops the prompt before any
model sees it; `/evolver-evolve` is the one command left as a prompt.
- `/evolver-status` opens with the tokens reused strategies saved in this chat and in all chats, then lists this
chat's reused assets (turn, name and id, last check, saving) (the savingsCore
reference-reuse estimate, counted only after a passing check and capped at the turn's own tokens from `stop`).
- Everything the plugin keeps in `~/.evolver/state` lives at most 3 days (undelivered reports, unreported
injections, retention checks, chat files, per-chat savings, distillation candidates).
- Evolver is installed and its Proxy started in the background when missing or older than 2.0.44.

### Removed
- The `evolver-proxy` MCP server and its tools, the `evolver` skill, the `evolution-memory` rule and the
commands that told the model to call tools.
- The session-start memory-graph summary and claim nudge, the `afterFileEdit` `[Evolution Signal]` notice, and
the `stop`/`sessionEnd` git-diff outcome written to the local memory graph and posted to the Hub's
`/a2a/evolution/record` (dsh keeps no equivalent; reuse reports and distillation replace it). The hooks no
longer run `git`.
- The **Plugins → Configure** variables, which only fed the MCP server.

## [2.1.0] — 2026-08-18

Expand Down
Loading
Loading