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
17 changes: 15 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Evolver lets your dsh agent evolve itself. Every success becomes a shortcut for
- **Survival of the fittest.** Every verdict goes back to the EvoMap network with its evidence tier, and the network weighs it by that evidence. Strategies that work get recalled more often; ones proven wrong sink.
- **One agent's mistake, every agent's detour.** What is learned moves between your own sessions and across every agent connected to EvoMap.

Local memory works without an account; once connected, your harness evolves with the whole network. The plugin also adds `evolver_*` tools and `/evolver-*` commands to distill, solidify, review and roll back what was learned.
Local memory works without an account; once connected, your harness evolves with the whole network. Nothing of Evolver but the recalled steps enters the model's context: reports go out at every turn end, the session's verified work is distilled when the session ends, and the `/evolver-*` commands (status, search, distill, sync, review, run, solidify, evolve) run in the plugin, not through the model. Set `skillEnabled: true` in the plugin config to also offer the agent the `capability-evolver` skill, which explains all this; its catalog line then rides every turn.

## Install

Expand Down Expand Up @@ -102,6 +102,19 @@ Network recall needs `@evomap/evolver` 2.0.39 or newer. The evidence on reuse re
reaches the Hub only through a Proxy newer than 2.0.42; an older one drops it, and the Hub
counts those reports as unevidenced.

## Session-end distillation

A turn that ended completed, used tools, passed its last check and reused no injected strategy leaves a
candidate in `~/.evolver/state/distill-pending.json`; a later verified turn replaces it, and a next prompt
that reads as a correction drops it. When the session ends, one call to the session's own model writes a
Gene from a digest of that turn (task, commands, touched paths, checks, final answer — never the whole
history) and sends it to the Proxy's `POST /conversation/distill` with `persist: true`, `publish: false`
and its own token cost as `distill_usage`. Keys and tokens are stripped from the candidate first, paths and
a manual focus included. A candidate stays on disk until it is distilled (three failed tries give it up);
one whose session is over — ended with a failed try, or killed with its dsh process — is claimed by the next
session that starts, one process at a time, while an idle session keeps its own. `/evolver-distill` does the
same at once.

## Reuse reports

Every strategy injected into a turn is reported through the Proxy's
Expand All @@ -113,7 +126,7 @@ weighs each report by its evidence:
| Turn end | the turn ends | `dsh:<session>:<turn>` | `tier` `L1` when the turn ran a test, build, lint or type check, else `none`; `applied`; `check` `{kind, passed, fail_then_pass}` of the last check; `aborted`; `stage: immediate` |
| Correction | the next prompt says the answer did not hold, or approves it | `…:correction` | `tier: L3`, `applied`, `stage: correction` |
| Retention | the next session in the same project finds the turn's edits kept or reverted | `…:retention` | `tier: L2`, `applied`, `stage: retention` |
| `evolver_asset_reuse_result` | the model reports on its own | the model's own | `tier: L5`, `applied`, `stage: immediate` |
| Aborted | the session goes away, or is killed, before the turn ends (a killed session's go out at the next session start, once its dsh process is gone) | `dsh:<session>:<turn>` | `tier: none`, `applied: partial`, `aborted: true`, `stage: immediate` |

- **`applied`** compares the strategy's numbered steps with the turn's shell commands,
touched paths, the code its edits wrote (200,000 characters a turn, kept in memory only)
Expand Down
4 changes: 2 additions & 2 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Evolver 让你的 dsh 智能体自己进化。每一次成功都会变成下一
- **优胜劣汰。** 每份复用结论都带着证据等级回报 EvoMap 网络,网络按证据为它加权。有效的策略越来越常被召回,被证伪的策略逐渐沉下去。
- **一个智能体踩过的坑,整个网络都绕开。** 经验在你的每个会话之间流转,也在所有接入 EvoMap 的智能体之间流转。

不注册账号也能用本地记忆;接入网络后,你的 harness 就和整个网络一起进化。插件还提供 `evolver_*` 工具和 `/evolver-*` 命令,用来提炼、固化、审阅和回滚学到的经验。
不注册账号也能用本地记忆;接入网络后,你的 harness 就和整个网络一起进化。除了召回的步骤,Evolver 不往模型上下文里放任何东西:每个回合结束时上报,会话结束时把验证过的工作沉淀下来;`/evolver-*` 命令(status、search、distill、sync、review、run、solidify、evolve)由插件直接执行,不经过模型。插件配置里设 `skillEnabled: true` 可再给 agent 提供说明这些机制的 `capability-evolver` 技能,代价是技能目录那一行每回合都会进上下文。

## 安装

Expand Down Expand Up @@ -97,7 +97,7 @@ dsh plugin --profile dsh-tui add -w @evomap/dsh-evolver@latest
| 回合结束 | 回合结束时 | `dsh:<会话>:<回合>` | 本回合跑过测试、构建、lint 或类型检查时 `tier` 为 `L1`,否则为 `none`;`applied`;最后一次检查的 `check` `{kind, passed, fail_then_pass}`;`aborted`;`stage: immediate` |
| 追问补报 | 下一条提示词表示结果不对,或表示认可 | `…:correction` | `tier: L3`、`applied`、`stage: correction` |
| 留存回访 | 同一项目的下一个会话发现本回合的改动被保留或被撤销 | `…:retention` | `tier: L2`、`applied`、`stage: retention` |
| `evolver_asset_reuse_result` | 模型自己上报 | 模型自带 | `tier: L5`、`applied`、`stage: immediate` |
| 中止 | 回合结束前会话消失或被强杀(被强杀会话的上报在下次会话开始时发出) | `dsh:<session>:<turn>` | `tier: none`、`applied: partial`、`aborted: true`、`stage: immediate` |

- **`applied`** 把策略的编号步骤与本回合的 shell 命令、涉及的路径、编辑写入的代码(每回合最多 20 万字符,只留在内存里)和最终回答比对:半数以上步骤出现记 `used`,少于半数记 `partial`,一条都没有记 `unused`。回合没留下可比对的内容,或策略没有编号步骤时,按 tier `none` 加 `applied: partial` 上报,两边都不计权重,reason 里写 `applied: unknown`。
- **检查**指运行测试、构建、lint 或类型检查的 `bash` 命令。结果报错或输出里有失败信息都算失败,因为经 `tail` 管道的失败运行退出码仍是 0。判断 `fail_then_pass` 时会先去掉输出管道(`| tail -9`)和重定向(`2>&1`)再比较命令。
Expand Down
19 changes: 0 additions & 19 deletions assets/commands/distill.md

This file was deleted.

12 changes: 4 additions & 8 deletions assets/commands/evolve.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,11 @@ Take a deliberate evolution step for the current task.
1. **Recall.** Look at the evolution memory this plugin injected behind the prompt, or read
the tail of the full engine's memory graph — `~/.evolver/memory/evolution/memory_graph.jsonl`, or the
project's `memory/evolution/memory_graph.jsonl` when it exists. Summarize any recent
outcome — success or failure — relevant to what we're working on. Search the network
too, with `evolver_search_assets`, when the task looks like something others have hit.
outcome — success or failure — relevant to what we're working on.

2. **Reflect.** Given the current diff and task state, say in one or two lines: what
worked, what didn't, and what the durable lesson is.

3. **Record.** Reuse of an injected strategy is reported automatically at every turn end.
If the lesson is worth sharing, distill it with
`evolver_distill_conversation` (see `/evolver-distill`). To run the full engine now,
use `/evolver-run`.

Keep this lightweight — it is an explicit checkpoint, not a ceremony on every turn.
Reuse of an injected strategy is reported at every turn end, and the session's verified work is
distilled when the session ends; `/evolver-distill` distills it now. Keep this lightweight — it is an
explicit checkpoint, not a ceremony on every turn.
15 changes: 0 additions & 15 deletions assets/commands/review.md

This file was deleted.

22 changes: 0 additions & 22 deletions assets/commands/run.md

This file was deleted.

20 changes: 0 additions & 20 deletions assets/commands/search.md

This file was deleted.

17 changes: 0 additions & 17 deletions assets/commands/solidify.md

This file was deleted.

48 changes: 0 additions & 48 deletions assets/commands/status.md

This file was deleted.

15 changes: 0 additions & 15 deletions assets/commands/sync.md

This file was deleted.

Loading
Loading