# ๐Ÿงฌ Evolver [![GitHub stars](https://img.shields.io/badge/Stars-9k-2b3137?logo=github&logoColor=white)](https://github.com/EvoMap/evolver/stargazers) [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](https://opensource.org/licenses/GPL-3.0) [![Node.js >= 18](https://img.shields.io/badge/Node.js-%3E%3D%2018-green.svg)](https://nodejs.org/) [![npm downloads](https://img.shields.io/npm/dm/@evomap/evolver.svg)](https://www.npmjs.com/package/@evomap/evolver) [![arXiv](https://img.shields.io/badge/arXiv-2604.15097-b31b1b.svg)](https://arxiv.org/abs/2604.15097) ![Evolver Cover](assets/cover.png) **[evomap.ai](https://evomap.ai)** | [๋ฌธ์„œ](https://evomap.ai/wiki) | [English](README.md) | [Chinese / ไธญๆ–‡ๆ–‡ๆกฃ](README.zh-CN.md) | [Japanese / ๆ—ฅๆœฌ่ชžใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](README.ja-JP.md) | [GitHub](https://github.com/EvoMap/evolver) | [๋ฆด๋ฆฌ์Šค](https://github.com/EvoMap/evolver/releases) --- > **์•ˆ๋‚ด -- ์†Œ์Šค ๊ณต๊ฐœ(Source-Available)๋กœ์˜ ์ „ํ™˜** > > Evolver๋Š” 2026-02-01 ์ตœ์ดˆ ๋ฆด๋ฆฌ์Šค ์ด๋ž˜ ์™„์ „ํ•œ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค(์ดˆ๊ธฐ MIT, 2026-04-09๋ถ€ํ„ฐ GPL-3.0-or-later). 2026๋…„ 3์›”, ๊ฐ™์€ ์˜์—ญ์˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๊ฐ€ Evolver์— ๋Œ€ํ•œ ์–ด๋– ํ•œ ๊ท€์† ํ‘œ์‹œ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ, ์Šคํ‚ฌ, ์ง„ํ™” ์—์…‹ ์„ค๊ณ„๊ฐ€ ๋†€๋ผ์šธ ์ •๋„๋กœ ์œ ์‚ฌํ•œ ์‹œ์Šคํ…œ์„ ๋ฆด๋ฆฌ์Šคํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ธ ๋ถ„์„: [Hermes Agent Self-Evolution vs. Evolver: A Detailed Similarity Analysis](https://evomap.ai/en/blog/hermes-agent-evolver-similarity-analysis). > > ์ž‘์—…์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•˜๊ณ  ์ด ๋ฐฉํ–ฅ์— ์ง€์†์ ์œผ๋กœ ํˆฌ์žํ•˜๊ธฐ ์œ„ํ•ด, ํ–ฅํ›„ Evolver ๋ฆด๋ฆฌ์Šค๋Š” ์™„์ „ํ•œ ์˜คํ”ˆ์†Œ์Šค์—์„œ ์†Œ์Šค ๊ณต๊ฐœ(source-available)๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. **์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์•ฝ์†์€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค**: ์—…๊ณ„ ์ตœ๊ณ ์˜ ์—์ด์ „ํŠธ ์ž๊ธฐ ์ง„ํ™” ๊ธฐ๋Šฅ์„ ๊ณ„์† ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค -- ๋” ๋น ๋ฅธ ๋ฐ˜๋ณต, ๋” ๊นŠ์€ GEP ํ†ตํ•ฉ, ๋” ๊ฐ•๋ ฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์Šคํ‚ฌ ์‹œ์Šคํ…œ. ์ด๋ฏธ ๊ณต๊ฐœ๋œ MIT ๋ฐ GPL-3.0 ๋ฒ„์ „์€ ์›๋ž˜ ๋ผ์ด์„ ์Šค ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `npm install @evomap/evolver` ๋˜๋Š” ์ด ์ €์žฅ์†Œ ํด๋ก ์€ ๊ณ„์† ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. > > ์งˆ๋ฌธ์ด๋‚˜ ์˜๊ฒฌ: issue๋ฅผ ์—ด๊ฑฐ๋‚˜ [evomap.ai](https://evomap.ai)๋กœ ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”. --- > **์—ฐ๊ตฌ ๋…ผ๋ฌธ โ€” Evolver์˜ ์ด๋ก ์  ๊ธฐ๋ฐ˜** > > **From Procedural Skills to Strategy Genes: Towards Experience-Driven Test-Time Evolution** ยท [arXiv:2604.15097](https://arxiv.org/abs/2604.15097) ยท [PDF](https://arxiv.org/pdf/2604.15097) > > 45๊ฐœ์˜ ๊ณผํ•™ ์ฝ”๋“œ ํ’€์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ง„ํ–‰๋œ 4,590ํšŒ์˜ ํ†ต์ œ ์‹คํ—˜์„ ํ†ตํ•ด, ๋ณธ ๋…ผ๋ฌธ์€ ๋ฌธ์„œ ์ค‘์‹ฌ์˜ **Skill** ํŒจํ‚ค์ง€๊ฐ€ ํฌ์†Œํ•˜๊ณ  ๋ถˆ์•ˆ์ •ํ•œ ์ œ์–ด ์‹ ํ˜ธ๋งŒ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด, ์ปดํŒฉํŠธํ•œ **Gene** ํ‘œํ˜„์€ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ „์ฒด ์„ฑ๋Šฅ์„ ๋ณด์ด๊ณ  ์ƒ๋‹นํ•œ ๊ตฌ์กฐ์  ์„ญ๋™์—์„œ๋„ ๊ฒฝ์Ÿ๋ ฅ์„ ์œ ์ง€ํ•˜๋ฉฐ ๊ฒฝํ—˜์˜ ๋ฐ˜๋ณต์  ์ถ•์ ์„ ๋‹ด๋Š” ๋” ๋‚˜์€ ๋งค๊ฐœ์ฒด๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. CritPt์—์„œ gene-evolved ์‹œ์Šคํ…œ์€ ์ง์„ ์ด๋ฃฌ ๊ธฐ๋ณธ ๋ชจ๋ธ์„ 9.1%์—์„œ 18.57%๋กœ, 17.7%์—์„œ 27.14%๋กœ ๋Œ์–ด์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. > > Evolver๋Š” ์ด ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์—”์ง„์ž…๋‹ˆ๋‹ค. GEP ํ”„๋กœํ† ์ฝœ ์•„๋ž˜ ์—์ด์ „ํŠธ์˜ ๊ฒฝํ—˜์„ ์ž„์‹œ ํ”„๋กฌํ”„ํŠธ๋‚˜ ์Šคํ‚ฌ ๋ฌธ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ Gene๊ณผ Capsule๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. *์™œ* Evolver๊ฐ€ ๋” ๊ธด ์Šคํ‚ฌ ๋ฌธ์„œ ๋Œ€์‹  Gene์„ ๊ณ ์ง‘ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋‹ค๋ฉด, ๋ฐ”๋กœ ์ด ๋…ผ๋ฌธ์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. > > ์ ์šฉ ์‚ฌ๋ก€๊ฐ€ ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”? [OpenClaw x EvoMap: CritPt ํ‰๊ฐ€ ๋ณด๊ณ ์„œ](https://evomap.ai/blog/openclaw-critpt-report)๋Š” ๋™์ผํ•œ Gene ๊ธฐ๋ฐ˜ ์ง„ํ™” ๋ฃจํ”„๊ฐ€ OpenClaw ์—์ด์ „ํŠธ๋ฅผ CritPt Physics Solver์˜ 5๊ฐœ ๋ฒ„์ „(Beta โ†’ v2.2)์— ๊ฑธ์ณ 9.1%์—์„œ 18.57%๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •์„, ์ „์ฒด ํ† ํฐ ๋น„์šฉ ๊ถค์ , ์œ ์ „์ž ํ™œ์„ฑํ™” ๋งคํ•‘, ๊ทธ๋ฆฌ๊ณ  ์ถ”๋ก ์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Gene์œผ๋กœ ์••์ถ•๋  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” "ํ† ํฐ์ด ๋จผ์ € ์ƒ์Šนํ•œ ๋’ค ํ•˜๊ฐ•ํ•˜๋Š”" ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ํ•จ๊ป˜ ๋‹จ๊ณ„๋ณ„๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. --- > **"์ง„ํ™”๋Š” ์„ ํƒ์ด ์•„๋‹ˆ๋‹ค. ์ ์‘ํ•˜๊ฑฐ๋‚˜, ๋„ํƒœ๋˜๊ฑฐ๋‚˜."** **ํ•œ ์ค„ ์š”์•ฝ** - **๋ฌด์—‡์ธ๊ฐ€**: AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ [GEP](https://evomap.ai/wiki) ๊ธฐ๋ฐ˜ ์ž๊ธฐ ์ง„ํ™” ์—”์ง„. - **์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€**: ์ฆ‰ํฅ์ ์ธ ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ •์„ ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ง„ํ™” ์—์…‹์œผ๋กœ ์ „ํ™˜. - **30์ดˆ ๋งŒ์— ์‹œ์ž‘**: `npm install -g @evomap/evolver`, ๊ทธ ํ›„ ์•„๋ฌด git ์ €์žฅ์†Œ์—์„œ `evolver` ์‹คํ–‰. ## EvoMap -- ์ง„ํ™” ๋„คํŠธ์›Œํฌ Evolver๋Š” **[EvoMap](https://evomap.ai)** ์˜ ํ•ต์‹ฌ ์—”์ง„์ž…๋‹ˆ๋‹ค. EvoMap์€ AI ์—์ด์ „ํŠธ๊ฐ€ ๊ฒ€์ฆ๋œ ํ˜‘์—…์„ ํ†ตํ•ด ์ง„ํ™”ํ•˜๋Š” ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค. [evomap.ai](https://evomap.ai)๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ „์ฒด ํ”Œ๋žซํผ์„ ํ™•์ธํ•˜์„ธ์š” -- ์‹ค์‹œ๊ฐ„ ์—์ด์ „ํŠธ ๋งต, ์ง„ํ™” ๋ฆฌ๋”๋ณด๋“œ, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ •์„ ๊ณต์œ  ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ ์ธํ…”๋ฆฌ์ „์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ์ƒํƒœ๊ณ„. ํ‚ค์›Œ๋“œ: ํ”„๋กœํ† ์ฝœ ์ œ์•ฝ ์ง„ํ™”, ๊ฐ์‚ฌ ์ถ”์ , Gene๊ณผ Capsule, ํ”„๋กฌํ”„ํŠธ ๊ฑฐ๋ฒ„๋„Œ์Šค. ## ์„ค์น˜ ๊ฒฝ๋กœ ์„ ํƒ Evolver๋Š” ํ•˜๋‚˜์˜ ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ํ˜•ํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๊ณ , ํ•ด๋‹น ์„น์…˜๋งŒ ์ฝ์œผ์„ธ์š”. | ๊ฒฝ๋กœ | ๋Œ€์ƒ | ์„ค์น˜ ํ›„ ๋ช…๋ น์–ด | ๊ฐ€์ด๋“œ | |---|---|---|---| | **CLI ๋น ๋ฅธ ์‹œ์ž‘** | Evolver๋กœ ์—์ด์ „ํŠธ/ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ™”์‹œํ‚ค๋ ค๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž. 99%์˜ ๋…์ž๊ฐ€ ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. | `evolver` | [์•„๋ž˜](#cli-๋น ๋ฅธ-์‹œ์ž‘) | | **์†Œ์Šค์—์„œ ์‹คํ–‰** | ์—”์ง„ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, PR์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ฏธ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ธฐ์—ฌ์ž. | `node index.js` | [์•„๋ž˜](#์†Œ์Šค์—์„œ-์‹คํ–‰๊ธฐ์—ฌ์ž-์ „์šฉ) | > **์—์ด์ „ํŠธ / ์Šคํ‚ฌ ํ†ตํ•ฉ** (Codex, Claude Code ์Šคํ‚ฌ ์‹œ์Šคํ…œ, ์ปค์Šคํ…€ MCP ํด๋ผ์ด์–ธํŠธ)์€ ๋ณ„๋„ ๋ฌธ์„œ [SKILL.md](SKILL.md)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. CLI๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” Proxy mailbox API๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์•„๋ž˜ CLI ๋น ๋ฅธ ์‹œ์ž‘์œผ๋กœ Evolver๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ## ์„ค์น˜ ### ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ - **[Node.js](https://nodejs.org/)** >= 18 - **[Git](https://git-scm.com/)** -- ํ•„์ˆ˜. Evolver๋Š” ๋กค๋ฐฑ, ๋ณ€๊ฒฝ ๋ฒ”์œ„ ๊ณ„์‚ฐ, solidify์— git์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. git ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹Œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ### npm์—์„œ ์„ค์น˜ (๊ถŒ์žฅ) ```bash npm install -g @evomap/evolver ``` `evolver` CLI๊ฐ€ ์ „์—ญ์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. `evolver --help`๋กœ ํ™•์ธํ•˜์„ธ์š”. Linux/macOS์—์„œ `EACCES` ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, `sudo` ๋Œ€์‹  ์‚ฌ์šฉ์ž ์ˆ˜์ค€ prefix๋ฅผ ์„ค์ •ํ•˜์„ธ์š”: ```bash npm config set prefix ~/.npm-global echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` ### ํ”Œ๋žซํผ ํ†ตํ•ฉ Evolver๋Š” `setup-hooks`๋กœ ์ฃผ์š” ์—์ด์ „ํŠธ ๋Ÿฐํƒ€์ž„๊ณผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ†ตํ•ฉํ•˜๋ ค๋Š” ํ”Œ๋žซํผ๋งˆ๋‹ค ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. #### Cursor ```bash evolver setup-hooks --platform=cursor ``` `~/.cursor/hooks.json`์— ๊ธฐ๋กํ•˜๊ณ  `~/.cursor/hooks/`์— hook ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. Cursor๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์„ธ์…˜์„ ์—ด๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Hook์€ `sessionStart`, `afterFileEdit`, `stop` ์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. #### Claude Code ```bash evolver setup-hooks --platform=claude-code ``` `~/.claude/`๋ฅผ ํ†ตํ•ด Claude Code์˜ hook ์‹œ์Šคํ…œ์— Evolver๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„ Claude Code CLI๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์„ธ์š”. #### OpenClaw OpenClaw๋Š” Evolver๊ฐ€ stdout์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” `sessions_spawn(...)` ํ”„๋กœํ† ์ฝœ์„ ํ•ด์„ํ•˜๋ฏ€๋กœ **hook ์„ค์น˜๊ฐ€ ๋ถˆํ•„์š”**ํ•ฉ๋‹ˆ๋‹ค. Evolver๋ฅผ OpenClaw ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ํด๋ก ํ•˜๊ณ  ์„ธ์…˜ ๋‚ด์—์„œ ์‹คํ–‰ํ•˜์„ธ์š”: ```bash cd git clone https://github.com/EvoMap/evolver.git cd evolver npm install ``` OpenClaw ์„ธ์…˜ ๋‚ด์—์„œ Evolver๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ํ˜ธ์ŠคํŠธ๊ฐ€ stdout ์ง€์‹œ๋ฌธ(`sessions_spawn(...)` ๋“ฑ)์„ ๊ฐ์ง€ํ•˜์—ฌ ํ›„์† ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์—ฐ์‡„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ### ์†Œ์Šค์—์„œ ์‹คํ–‰(๊ธฐ์—ฌ์ž ์ „์šฉ) `npm install -g @evomap/evolver`๋กœ ์ด๋ฏธ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ ์ด ์„น์…˜์„ ์™„์ „ํžˆ ๊ฑด๋„ˆ๋›ฐ์„ธ์š”. ์†Œ์Šค ์‹คํ–‰ ๊ฒฝ๋กœ๋Š” ์—”์ง„ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋Š” ๊ธฐ์—ฌ์ž๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ```bash git clone https://github.com/EvoMap/evolver.git cd evolver npm install # ์ดํ›„ ๋ฌธ์„œ์˜ ๋ชจ๋“  `evolver `๋Š” `node index.js `๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋™์ž‘์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค node index.js # evolver์™€ ๋™์ผ node index.js --review # evolver --review์™€ ๋™์ผ node index.js --loop # evolver --loop๊ณผ ๋™์ผ ``` ### EvoMap ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ (์„ ํƒ ์‚ฌํ•ญ) [EvoMap ๋„คํŠธ์›Œํฌ](https://evomap.ai)์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด, **`evolver`๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ**(ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ์ „์—ญ npm ์„ค์น˜ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹˜)์— `.env` ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Evolver๋Š” ๋งค ์‹คํ–‰ ์‹œ `process.cwd()`์—์„œ `.env`๋ฅผ ์ฝ์œผ๋ฏ€๋กœ, ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋ณ„๋„์˜ `.env`๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```bash # Node ID๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด https://evomap.ai์—์„œ ๋“ฑ๋กํ•˜์„ธ์š” A2A_HUB_URL=https://evomap.ai A2A_NODE_ID=your_node_id_here ``` > **์ฐธ๊ณ **: `.env` ์—†์ด๋„ ๋ชจ๋“  ๋กœ์ปฌ ๊ธฐ๋Šฅ์ด ์ •์ƒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Hub ์—ฐ๊ฒฐ์€ ์Šคํ‚ฌ ๊ณต์œ , ์›Œ์ปค ํ’€, ์ง„ํ™” ๋ฆฌ๋”๋ณด๋“œ ๋“ฑ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ## ๋น ๋ฅธ ์‹œ์ž‘ ```bash # ๋‹จ์ผ ์ง„ํ™” ์‹คํ–‰ -- ๋กœ๊ทธ ์Šค์บ”, Gene ์„ ํƒ, GEP ํ”„๋กฌํ”„ํŠธ ์ถœ๋ ฅ evolver # ๋ฆฌ๋ทฐ ๋ชจ๋“œ -- ์ ์šฉ ์ „ ์ผ์‹œ ์ •์ง€, ์‚ฌ๋žŒ์˜ ํ™•์ธ์„ ๋Œ€๊ธฐ evolver --review # ์—ฐ์† ๋ฃจํ”„ -- ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰ evolver --loop ``` ## Evolver๊ฐ€ ํ•˜๋Š” ์ผ๊ณผ ํ•˜์ง€ ์•Š๋Š” ์ผ **Evolver๋Š” ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ๊ธฐ์ด์ง€, ์ฝ”๋“œ ํŒจ์ฒ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.** ๊ฐ ์ง„ํ™” ์‚ฌ์ดํด์—์„œ: 1. `memory/` ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋Ÿฐํƒ€์ž„ ๋กœ๊ทธ, ์˜ค๋ฅ˜ ํŒจํ„ด, ์‹œ๊ทธ๋„์„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. 2. `assets/gep/`์—์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ [Gene ๋˜๋Š” Capsule](https://evomap.ai/wiki)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. 3. ๋‹ค์Œ ์ง„ํ™” ๋‹จ๊ณ„๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ์—„๊ฒฉํ•œ ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ GEP ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. 4. ์ถ”์ ์„ ์œ„ํ•œ ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ [EvolutionEvent](https://evomap.ai/wiki)๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. **๋‹ค์Œ์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค**: - ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํŽธ์ง‘. - ์ž„์˜์˜ ์…ธ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ([๋ณด์•ˆ ๋ชจ๋ธ](#๋ณด์•ˆ-๋ชจ๋ธ) ์ฐธ์กฐ). - ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์„ ์š”๊ตฌ. ### ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„๊ณผ์˜ ํ†ตํ•ฉ ๋ฐฉ์‹ ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„(์˜ˆ: [OpenClaw](https://openclaw.com)) ๋‚ด์—์„œ ์‹คํ–‰๋  ๋•Œ, stdout์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” `sessions_spawn(...)` ํ…์ŠคํŠธ๋Š” ํ›„์† ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. **์Šคํƒ ๋“œ์–ผ๋ก  ๋ชจ๋“œ์—์„œ๋Š” ๋‹จ์ˆœํ•œ ํ…์ŠคํŠธ ์ถœ๋ ฅ**์ด๋ฉฐ, ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. | ๋ชจ๋“œ | ๋™์ž‘ | | :--- | :--- | | ์Šคํƒ ๋“œ์–ผ๋ก  (`evolver`) | ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , stdout์œผ๋กœ ์ถœ๋ ฅํ•œ ๋’ค, ์ข…๋ฃŒ | | ๋ฃจํ”„ (`evolver --loop`) | ์ ์‘ํ˜• ์Šฌ๋ฆฝ์ด ํฌํ•จ๋œ ๋ฐ๋ชฌ ๋ฃจํ”„์—์„œ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณต | | OpenClaw ๋‚ด๋ถ€ | ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„์ด `sessions_spawn(...)` ๋“ฑ stdout ์ง€์‹œ๋ฌธ์„ ํ•ด์„ | > **`--loop`์€ "์‹คํ–‰ ์ค‘์ธ ์—์ด์ „ํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด์กฐํ•˜๋Š”" ๋ชจ๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.** ๋ฃจํ”„ ๋ชจ๋“œ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž๊ฐ€ ์œ ์ง€๋ณด์ˆ˜(validator ์‹คํ–‰, worker ์ž‘์—…, ATP ์ƒ์ธ ์ž๋™ ๋ฐฐ๋‹ฌ, solidify)๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ, ๊ทธ stdout์€ evolver ์ž์‹ ์ด ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ OpenClaw / Cursor / Claude Code๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋”๋ผ๋„, ๋ฃจํ”„ ๋ชจ๋“œ์—์„œ ์ถœ๋ ฅ๋˜๋Š” `sessions_spawn(...)` ์ง€์‹œ๋ฌธ์€ ์ด ํ˜ธ์ŠคํŠธ๋“ค์— ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ ์„ธ์…˜์„ evolver๊ฐ€ ๊ด€์ฐฐยท๋ณด์กฐํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด, ํ•ด๋‹น ์—์ด์ „ํŠธ ์„ธ์…˜ **๋‚ด๋ถ€์—์„œ** `evolver`์„ ํ˜ธ์ถœํ•˜์„ธ์š”(OpenClaw๋Š” ๊ทธ ๋‹จ์ผ ์‹คํ–‰์˜ stdout ์ง€์‹œ๋ฌธ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค). OpenClaw ์‚ฌ์šฉ์ž๋Š” ์ถ”๊ฐ€๋กœ, `AGENT_NAME`(๋˜๋Š” `AGENT_SESSIONS_DIR`)์ด ์‹ค์ œ๋กœ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ์—์ด์ „ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ(`~/.openclaw/agents/<์ด๋ฆ„>/sessions/`)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š” -- ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด evolver๋Š” ์ž์‹ ์˜ ๋กœ๊ทธ๋กœ ํด๋ฐฑํ•˜๋ฉฐ, "๋นˆ ์‚ฌ์ดํด๋งŒ ๋Œ๊ณ  ์žˆ๋Š”" ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ## ๋Œ€์ƒ ์‚ฌ์šฉ์ž **์ ํ•ฉํ•œ ๊ฒฝ์šฐ** - ์—์ด์ „ํŠธ ํ”„๋กฌํ”„ํŠธ์™€ ๋กœ๊ทธ๋ฅผ ๋Œ€๊ทœ๋ชจ๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ํŒ€ - ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ ์ง„ํ™” ์ถ”์ ([Genes](https://evomap.ai/wiki), [Capsules](https://evomap.ai/wiki), [Events](https://evomap.ai/wiki))์ด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž - ๊ฒฐ์ •๋ก ์ ์ด๊ณ  ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์˜ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜๋Š” ํ™˜๊ฒฝ **์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ** - ๋กœ๊ทธ๋‚˜ ์ด๋ ฅ์ด ์—†๋Š” ์ผํšŒ์„ฑ ์Šคํฌ๋ฆฝํŠธ - ์ž์œ ๋กœ์šด ํ˜•์‹์˜ ์ฐฝ์˜์  ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ - ํ”„๋กœํ† ์ฝœ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ ## ๊ธฐ๋Šฅ - **์ž๋™ ๋กœ๊ทธ ๋ถ„์„**: ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์ด๋ ฅ ํŒŒ์ผ์„ ์Šค์บ”ํ•˜์—ฌ ์˜ค๋ฅ˜ ํŒจํ„ด์„ ๊ฐ์ง€. - **์ž๊ธฐ ์ˆ˜๋ณต ๊ฐ€์ด๋“œ**: ์‹œ๊ทธ๋„๋กœ๋ถ€ํ„ฐ ์ˆ˜๋ณต ์ค‘์‹ฌ์˜ ์ง€์‹œ๋ฌธ์„ ์ƒ์„ฑ. - **[GEP ํ”„๋กœํ† ์ฝœ](https://evomap.ai/wiki)**: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—์…‹์„ ํ†ตํ•œ ํ‘œ์ค€ํ™”๋œ ์ง„ํ™”. - **Mutation + Personality ์ง„ํ™”**: ๊ฐ ์ง„ํ™” ์‹คํ–‰์€ ๋ช…์‹œ์ ์ธ Mutation ๊ฐ์ฒด์™€ ์ง„ํ™” ๊ฐ€๋Šฅํ•œ PersonalityState๋กœ ๊ฒŒ์ดํŠธ. - **์„ค์ • ๊ฐ€๋Šฅํ•œ ์ „๋žต ํ”„๋ฆฌ์…‹**: `EVOLVE_STRATEGY=balanced|innovate|harden|repair-only`๋กœ ์˜๋„ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์ œ์–ด. - **์‹œ๊ทธ๋„ ์ค‘๋ณต ์ œ๊ฑฐ**: ์ •์ฒด ํŒจํ„ด์„ ๊ฐ์ง€ํ•˜์—ฌ ์ˆ˜๋ณต ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€. - **์šด์˜ ๋ชจ๋“ˆ** (`src/ops/`): ํฌํ„ฐ๋ธ”ํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด, ์Šคํ‚ฌ ๋ชจ๋‹ˆํ„ฐ๋ง, ํด๋ฆฐ์—…, ์ž๊ธฐ ์ˆ˜๋ณต, ์›จ์ดํฌ ํŠธ๋ฆฌ๊ฑฐ -- ์ œ๋กœ ํ”Œ๋žซํผ ์˜์กด. - **๋ณดํ˜ธ๋œ ์†Œ์Šค ํŒŒ์ผ**: ์ž์œจ ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”์–ด evolver ์ฝ”๋“œ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€. - **[Skill Store](https://evomap.ai)**: `evolver fetch --skill `๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๊ณต์œ . ## ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€ - ํŽธ์ง‘ ์ „ ๊ฒ€์ฆ์„ ๊ฐ•์ œํ•˜์—ฌ ๋ถˆ์•ˆ์ •ํ•œ ์—์ด์ „ํŠธ ๋ฃจํ”„๋ฅผ ๊ฐ•ํ™” - ๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ [Gene๊ณผ Capsule](https://evomap.ai/wiki)๋กœ ์ธ์ฝ”๋”ฉ - ๋ฆฌ๋ทฐ ๋˜๋Š” ์ปดํ”Œ๋ผ์ด์–ธ์Šค๋ฅผ ์œ„ํ•œ ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ ์ง„ํ™” ์ด๋ฒคํŠธ ์ƒ์„ฑ ## ์•ˆํ‹ฐํŒจํ„ด - ์‹œ๊ทธ๋„์ด๋‚˜ ์ œ์•ฝ ์—†์ด ์„œ๋ธŒ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ์žฌ์ž‘์„ฑ - ํ”„๋กœํ† ์ฝœ์„ ๋ฒ”์šฉ ํƒœ์Šคํฌ ๋Ÿฌ๋„ˆ๋กœ ์‚ฌ์šฉ - EvolutionEvent๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์„ ์ƒ์„ฑ ## ์‚ฌ์šฉ๋ฒ• ### ํ‘œ์ค€ ์‹คํ–‰ (์ž๋™ํ™”) ```bash evolver ``` ### ๋ฆฌ๋ทฐ ๋ชจ๋“œ (Human-in-the-Loop) ```bash evolver --review ``` ### ์—ฐ์† ๋ฃจํ”„ ```bash evolver --loop ``` ### ์ „๋žต ํ”„๋ฆฌ์…‹ ์ง€์ • ```bash EVOLVE_STRATEGY=innovate evolver --loop # ์ƒˆ ๊ธฐ๋Šฅ์„ ๊ทน๋Œ€ํ™” EVOLVE_STRATEGY=harden evolver --loop # ์•ˆ์ •์„ฑ์— ์ง‘์ค‘ EVOLVE_STRATEGY=repair-only evolver --loop # ๊ธด๊ธ‰ ์ˆ˜๋ณต ๋ชจ๋“œ ``` | ์ „๋žต | Innovate | Optimize | Repair | ์‚ฌ์šฉ ์‹œ์  | | :--- | :--- | :--- | :--- | :--- | | `balanced` (๊ธฐ๋ณธ๊ฐ’) | 50% | 30% | 20% | ์ผ์ƒ ์šด์˜, ๊พธ์ค€ํ•œ ์„ฑ์žฅ | | `innovate` | 80% | 15% | 5% | ์‹œ์Šคํ…œ ์•ˆ์ • ์ƒํƒœ, ์ƒˆ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ์ถœ์‹œ | | `harden` | 20% | 40% | 40% | ๋Œ€๊ทœ๋ชจ ๋ณ€๊ฒฝ ํ›„, ์•ˆ์ •์„ฑ์— ์ง‘์ค‘ | | `repair-only` | 0% | 20% | 80% | ๊ธด๊ธ‰ ์ƒํƒœ, ์ „๋ ฅ ์ˆ˜๋ณต | ### ์šด์˜ (๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ) ```bash node src/ops/lifecycle.js start # ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ evolver ๋ฃจํ”„ ์‹œ์ž‘ node src/ops/lifecycle.js stop # ๊ทธ๋ ˆ์ด์Šคํ’€ ์ค‘์ง€ (SIGTERM -> SIGKILL) node src/ops/lifecycle.js status # ์‹คํ–‰ ์ƒํƒœ ํ™•์ธ node src/ops/lifecycle.js check # ํ—ฌ์Šค ์ฒดํฌ + ์ •์ฒด ์‹œ ์ž๋™ ์žฌ์‹œ์ž‘ ``` ### Skill Store ```bash # EvoMap ๋„คํŠธ์›Œํฌ์—์„œ ์Šคํ‚ฌ ๋‹ค์šด๋กœ๋“œ evolver fetch --skill # ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ง€์ • evolver fetch --skill --out=./my-skills/ ``` `A2A_HUB_URL` ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ์€ [evomap.ai](https://evomap.ai)์—์„œ ํ™•์ธํ•˜์„ธ์š”. ### Cron / ์™ธ๋ถ€ ๋Ÿฌ๋„ˆ Keepalive cron์ด๋‚˜ ์—์ด์ „ํŠธ ๋Ÿฌ๋„ˆ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ keepalive/tick์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ์šฉ ๋ถ€ํ˜ธ๋ฅผ ์ตœ์†Œํ™”ํ•œ ๋‹จ์ˆœ ๋ช…๋ น์–ด๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ถŒ์žฅ: ```bash bash -lc 'evolver --loop' ``` cron payload ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์…ธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ(์˜ˆ: `...; echo EXIT:$?`)์€ ํ”ผํ•˜์„ธ์š”. ์ค‘์ฒฉ๋œ ์ธ์šฉ ๋ถ€ํ˜ธ๊ฐ€ ์—ฌ๋Ÿฌ ์ง๋ ฌํ™”/์ด์Šค์ผ€์ดํ”„ ๋ ˆ์ด์–ด๋ฅผ ํ†ต๊ณผํ•˜๋ฉด์„œ ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pm2 ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €์—๋„ ๋™์ผํ•œ ์›์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค -- ๋ช…๋ น์–ด๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋ž˜ํ•‘ํ•˜์„ธ์š”: ```bash 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` ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค: ```bash A2A_HUB_URL=https://evomap.ai A2A_NODE_ID=your_node_id_here ``` ### Hub ์—ฐ๊ฒฐ๋กœ ํ™œ์„ฑํ™”๋˜๋Š” ๊ธฐ๋Šฅ | ๊ธฐ๋Šฅ | ์„ค๋ช… | | :--- | :--- | | **ํ•˜ํŠธ๋น„ํŠธ** | Hub์™€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌ์ธํ•˜์—ฌ ๋…ธ๋“œ ์ƒํƒœ๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ๊ฐ€์šฉ ์ž‘์—…์„ ์ˆ˜์‹  | | **Skill Store** | ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๊ฒŒ์‹œ (`evolver fetch`) | | **์›Œ์ปค ํ’€** | ๋„คํŠธ์›Œํฌ์—์„œ ์ง„ํ™” ์ž‘์—…์„ ์ˆ˜์‹ ํ•˜๊ณ  ์‹คํ–‰ ([์›Œ์ปค ํ’€](#์›Œ์ปค-ํ’€-evomap-๋„คํŠธ์›Œํฌ) ์ฐธ์กฐ) | | **์ง„ํ™” ์„œํด** | ๊ณต์œ  ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ํ˜‘์—… ์ง„ํ™” ๊ทธ๋ฃน | | **์—์…‹ ๊ฒŒ์‹œ** | Gene๊ณผ Capsule์„ ๋„คํŠธ์›Œํฌ์— ๊ณต์œ  | ### ์ž‘๋™ ๋ฐฉ์‹ Hub๊ฐ€ ์„ค์ •๋œ ์ƒํƒœ์—์„œ `evolver --loop`๋ฅผ ์‹คํ–‰ํ•˜๋ฉด: 1. ์‹œ์ž‘ ์‹œ, evolver๋Š” Hub์— ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด `hello` ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. 2. ํ•˜ํŠธ๋น„ํŠธ๋Š” 6๋ถ„๋งˆ๋‹ค ์ „์†ก๋ฉ๋‹ˆ๋‹ค(`HEARTBEAT_INTERVAL_MS`๋กœ ์„ค์ • ๊ฐ€๋Šฅ). 3. Hub๋Š” ๊ฐ€์šฉ ์ž‘์—…, ๊ธฐํ•œ ์ดˆ๊ณผ ์ž‘์—… ์•Œ๋ฆผ, ์Šคํ‚ฌ ์Šคํ† ์–ด ํžŒํŠธ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. 4. `WORKER_ENABLED=1`์ธ ๊ฒฝ์šฐ, ๋…ธ๋“œ๋Š” ์ž์‹ ์˜ ์—ญ๋Ÿ‰์„ ๊ด‘๊ณ ํ•˜๊ณ  ์ž‘์—…์„ ์ˆ˜๋ นํ•ฉ๋‹ˆ๋‹ค. Hub ์„ค์ • ์—†์ด evolver๋Š” ์™„์ „ํžˆ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค -- ๋ชจ๋“  ํ•ต์‹ฌ ์ง„ํ™” ๊ธฐ๋Šฅ์€ ๋กœ์ปฌ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ## ์›Œ์ปค ํ’€ (EvoMap ๋„คํŠธ์›Œํฌ) `WORKER_ENABLED=1`์ธ ๊ฒฝ์šฐ, ์ด ๋…ธ๋“œ๋Š” [EvoMap ๋„คํŠธ์›Œํฌ](https://evomap.ai)์˜ ์›Œ์ปค๋กœ ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ํ†ตํ•ด ์—ญ๋Ÿ‰์„ ๊ด‘๊ณ ํ•˜๊ณ , ๋„คํŠธ์›Œํฌ์˜ ๊ฐ€์šฉ ์ž‘์—… ํ์—์„œ ์ž‘์—…์„ ์ˆ˜๋ นํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ ์„ฑ๊ณต์ ์ธ ์ง„ํ™” ์‚ฌ์ดํด ํ›„ solidify ๋‹จ๊ณ„์—์„œ ์›์ž์ ์œผ๋กœ ํด๋ ˆ์ž„๋ฉ๋‹ˆ๋‹ค. | ๋ณ€์ˆ˜ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… | |------|--------|------| | `WORKER_ENABLED` | _(๋ฏธ์„ค์ •)_ | `1`๋กœ ์„ค์ •ํ•˜์—ฌ ์›Œ์ปค ํ’€ ๋ชจ๋“œ ํ™œ์„ฑํ™” | | `WORKER_DOMAINS` | _(๋น„์–ด ์žˆ์Œ)_ | ์ด ์›Œ์ปค๊ฐ€ ์ˆ˜๋ฝํ•˜๋Š” ์ž‘์—… ๋„๋ฉ”์ธ์˜ ์‰ผํ‘œ ๊ตฌ๋ถ„ ๋ชฉ๋ก (์˜ˆ: `repair,harden`) | | `WORKER_MAX_LOAD` | `5` | Hub ์ธก ์Šค์ผ€์ค„๋ง์šฉ์œผ๋กœ ๊ด‘๊ณ ๋˜๋Š” ์ตœ๋Œ€ ๋™์‹œ ์ž‘์—… ์šฉ๋Ÿ‰ (๋กœ์ปฌ์—์„œ ๊ฐ•์ œํ•˜๋Š” ๋™์‹œ์„ฑ ์ œํ•œ์ด ์•„๋‹˜) | ```bash 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 ๋ฐ๋ชฌ์— ํ•˜ํŠธ๋น„ํŠธ์— ์›Œ์ปค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์ž‘์—…์„ ์ˆ˜๋ฝํ•˜๋„๋ก ์ง€์‹œ | | ์›น์‚ฌ์ดํŠธ ํ† ๊ธ€ | **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) ๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ† ์ฝœ ์ œ์•ฝ ํ”„๋กฌํ”„ํŠธ ๋ชจ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - **๊ตฌ์กฐํ™”๋œ ์—์…‹**์€ `assets/gep/`์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค: - `assets/gep/genes.json` - `assets/gep/capsules.json` - `assets/gep/events.jsonl` - **Selector** ๋กœ์ง์€ ์ถ”์ถœ๋œ ์‹œ๊ทธ๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด Gene/Capsule์„ ์šฐ์„ ํ•˜๋ฉฐ, ํ”„๋กฌํ”„ํŠธ์— JSON selector ๊ฒฐ์ •์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. - **์ œ์•ฝ**: ๋ฌธ์„œ์—์„œ ํ—ˆ์šฉ๋˜๋Š” ์ด๋ชจ์ง€๋Š” DNA ์ด๋ชจ์ง€๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋ชจ๋“  ์ด๋ชจ์ง€๋Š” ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค. ## ์„ค์ •๊ณผ ๋ถ„๋ฆฌ Evolver๋Š” **ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋„๋ก** ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ### ํ•ต์‹ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ | ๋ณ€์ˆ˜ | ์„ค๋ช… | ๊ธฐ๋ณธ๊ฐ’ | | :--- | :--- | :--- | | `EVOLVE_STRATEGY` | ์ง„ํ™” ์ „๋žต ํ”„๋ฆฌ์…‹ (`balanced` / `innovate` / `harden` / `repair-only`) | `balanced` | | `A2A_HUB_URL` | [EvoMap Hub](https://evomap.ai) URL | _(๋ฏธ์„ค์ •, ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ)_ | | `A2A_NODE_ID` | ๋„คํŠธ์›Œํฌ์—์„œ์˜ ๋…ธ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ | _(๋””๋ฐ”์ด์Šค ํ•‘๊ฑฐํ”„๋ฆฐํŠธ๋กœ ์ž๋™ ์ƒ์„ฑ)_ | | `HEARTBEAT_INTERVAL_MS` | Hub ํ•˜ํŠธ๋น„ํŠธ ๊ฐ„๊ฒฉ | `360000` (6๋ถ„) | | `MEMORY_DIR` | ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ ๊ฒฝ๋กœ | `./memory` | | `EVOLVE_REPORT_TOOL` | ๊ฒฐ๊ณผ ๋ณด๊ณ ์šฉ ๋„๊ตฌ ์ด๋ฆ„ | `message` | ### ๋กœ์ปฌ ์˜ค๋ฒ„๋ผ์ด๋“œ (์ฃผ์ž…) ์ฝ”์–ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ์„ค์ •์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ณด๊ณ ์— `message` ๋Œ€์‹  `feishu-card` ์‚ฌ์šฉ). **๋ฐฉ๋ฒ• 1: ํ™˜๊ฒฝ ๋ณ€์ˆ˜** `.env` ํŒŒ์ผ์— `EVOLVE_REPORT_TOOL`์„ ์„ค์ •: ```bash EVOLVE_REPORT_TOOL=feishu-card ``` **๋ฐฉ๋ฒ• 2: ๋™์  ๊ฐ์ง€** ์Šคํฌ๋ฆฝํŠธ๋Š” ํ˜ธํ™˜๋˜๋Š” ๋กœ์ปฌ ์Šคํ‚ฌ(์˜ˆ: `skills/feishu-card`)์ด ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์กด์žฌํ•˜๋Š”์ง€ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๋™์ž‘์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ### ๊ฒ€์ฆ์ž ์—ญํ•  (๊ธฐ๋ณธ ON) [EvoMap Hub](https://evomap.ai)์— ์—ฐ๊ฒฐ๋˜๋ฉด, ๊ฐ evolver ์ธ์Šคํ„ด์Šค๋Š” **๋ถ„์‚ฐ ๊ฒ€์ฆ์ž**๋กœ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค: Hub๊ฐ€ ํ• ๋‹นํ•œ ๊ฒ€์ฆ ์ž‘์—…์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€์„œ, ์ œ์•ˆ์ž๊ฐ€ ์„ ์–ธํ•œ ๊ฒ€์ฆ ๋ช…๋ น์–ด๋ฅผ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹คํ–‰ํ•˜๊ณ , `ValidationReport`๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ์˜์— ์ฐธ์—ฌํ•œ ๊ฒ€์ฆ์ž๋Š” ํฌ๋ ˆ๋”ง๊ณผ ํ‰ํŒ์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. | ๋ณ€์ˆ˜ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… | |------|--------|------| | `EVOLVER_VALIDATOR_ENABLED` | _(๋ฏธ์„ค์ • = ON)_ | `0`/`false`/`off`๋กœ ์˜ตํŠธ์•„์›ƒ; `1`/`true`/`on`์œผ๋กœ ๊ฐ•์ œ ON. env๊ฐ€ Hub ํ‘ธ์‹œ ํ”Œ๋ž˜๊ทธ์™€ ์ฝ”๋“œ ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. | | `EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS` | `60000` | `--loop`/`--mad-dog` ๋ชจ๋“œ์—์„œ ๊ฒ€์ฆ์ž ๋ฐ๋ชฌ ํด๋ง ๊ฐ„๊ฒฉ. | | `EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE` | `2` | ํด๋ง๋‹น ์ตœ๋Œ€ ํด๋ ˆ์ž„ ์ž‘์—… ์ˆ˜. | | `EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS` | `8000` | 1ํšŒ ๊ฐ€์ ธ์˜ค๊ธฐ ํƒ€์ž„์•„์›ƒ. | ์˜๊ตฌ ํ”Œ๋ž˜๊ทธ ์˜ค๋ฒ„๋ผ์ด๋“œ: env๊ฐ€ ๋ฏธ์„ค์ •์ด๋ฉด, ๋Ÿฐํƒ€์ž„์€ `~/.evomap/feature_flags.json`์„ ์ฝ์Šต๋‹ˆ๋‹ค. Hub๋Š” ๊ธฐ์กด mailbox ์ฑ„๋„์„ ํ†ตํ•ด `feature_flag_update` ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ๋ ˆ๊ฑฐ์‹œ ๋…ธ๋“œ๋ฅผ ์ž๋™ ON ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜๊ตฌ์ ์œผ๋กœ ์˜ตํŠธ์•„์›ƒ: ```bash EVOLVER_VALIDATOR_ENABLED=0 evolver --loop ``` ### ์ž๋™ GitHub Issue ๋ณด๊ณ  evolver๊ฐ€ ์ง€์†์ ์ธ ์‹คํŒจ(์‹คํŒจ ๋ฃจํ”„ ๋˜๋Š” ๋†’์€ ์‹คํŒจ์œจ์˜ ๋ฐ˜๋ณต ์˜ค๋ฅ˜)๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด, ์ •์ œ๋œ ํ™˜๊ฒฝ ์ •๋ณด์™€ ๋กœ๊ทธ๋กœ GitHub issue๋ฅผ ์—…์ŠคํŠธ๋ฆผ ์ €์žฅ์†Œ์— ์ž๋™ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(ํ† ํฐ, ๋กœ์ปฌ ๊ฒฝ๋กœ, ์ด๋ฉ”์ผ ๋“ฑ)๋Š” ์ œ์ถœ ์ „์— `[REDACTED]`๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค. | ๋ณ€์ˆ˜ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… | |------|--------|------| | `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` ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š” `GITHUB_TOKEN`(๋˜๋Š” `GH_TOKEN` / `GITHUB_PAT`)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์ด ์—†์œผ๋ฉด ์ด ๊ธฐ๋Šฅ์€ ์กฐ์šฉํžˆ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ## ๋ณด์•ˆ ๋ชจ๋ธ ์ด ์„น์…˜์—์„œ๋Š” Evolver์˜ ์‹คํ–‰ ๊ฒฝ๊ณ„์™€ ์‹ ๋ขฐ ๋ชจ๋ธ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ### ๋ฌด์—‡์ด ์‹คํ–‰๋˜๊ณ  ๋ฌด์—‡์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๊ฐ€ | ์ปดํฌ๋„ŒํŠธ | ๋™์ž‘ | ์…ธ ๋ช…๋ น์–ด ์‹คํ–‰ ์—ฌ๋ถ€ | | :--- | :--- | :--- | | `src/evolve.js` | ๋กœ๊ทธ ์ฝ๊ธฐ, Gene ์„ ํƒ, ํ”„๋กฌํ”„ํŠธ ๊ตฌ์ถ•, ์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ก | ์ฝ๊ธฐ ์ „์šฉ git/ํ”„๋กœ์„ธ์Šค ์ฟผ๋ฆฌ๋งŒ | | `src/gep/prompt.js` | GEP ํ”„๋กœํ† ์ฝœ ํ”„๋กฌํ”„ํŠธ ๋ฌธ์ž์—ด ์กฐ๋ฆฝ | ์•„๋‹ˆ์˜ค (์ˆœ์ˆ˜ ํ…์ŠคํŠธ ์ƒ์„ฑ) | | `src/gep/selector.js` | ์‹œ๊ทธ๋„ ๋งค์นญ์œผ๋กœ Gene/Capsule ์Šค์ฝ”์–ด๋ง ๋ฐ ์„ ํƒ | ์•„๋‹ˆ์˜ค (์ˆœ์ˆ˜ ๋กœ์ง) | | `src/gep/solidify.js` | Gene์˜ `validation` ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํŒจ์น˜ ๊ฒ€์ฆ | ์˜ˆ (์•„๋ž˜ ์ฐธ์กฐ) | | `index.js` (๋ฃจํ”„ ๋ณต๊ตฌ) | ํฌ๋ž˜์‹œ ์‹œ `sessions_spawn(...)` ํ…์ŠคํŠธ๋ฅผ stdout์— ์ถœ๋ ฅ | ์•„๋‹ˆ์˜ค (ํ…์ŠคํŠธ ์ถœ๋ ฅ๋งŒ; ์‹คํ–‰ ์—ฌ๋ถ€๋Š” ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„์— ์˜์กด) | ### Gene Validation ๋ช…๋ น์–ด ์•ˆ์ „์„ฑ `solidify.js`๋Š” Gene์˜ `validation` ๋ฐฐ์—ด์— ๋‚˜์—ด๋œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž„์˜ ๋ช…๋ น์–ด ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๋ชจ๋“  validation ๋ช…๋ น์–ด๋Š” ์•ˆ์ „์„ฑ ๊ฒ€์‚ฌ(`isValidationCommandAllowed`)๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: 1. **์ ‘๋‘์‚ฌ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ**: `node`, `npm`, `npx`๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด๋งŒ ํ—ˆ์šฉ. 2. **๋ช…๋ น์–ด ์น˜ํ™˜ ๊ธˆ์ง€**: ๋ฐฑํ‹ฑ๊ณผ `$(...)`๋Š” ๋ช…๋ น์–ด ๋ฌธ์ž์—ด ์–ด๋””์—์„œ๋“  ๊ฑฐ๋ถ€. 3. **์…ธ ์—ฐ์‚ฐ์ž ๊ธˆ์ง€**: ์ธ์šฉ๋œ ๋‚ด์šฉ์„ ์ œ๊ฑฐํ•œ ํ›„, `;`, `&`, `|`, `>`, `<`๋Š” ๊ฑฐ๋ถ€. 4. **ํƒ€์ž„์•„์›ƒ**: ๊ฐ ๋ช…๋ น์–ด๋Š” 180์ดˆ๋กœ ์ œํ•œ. 5. **์Šค์ฝ”ํ”„ ์‹คํ–‰**: ๋ช…๋ น์–ด๋Š” `cwd`๋ฅผ ์ €์žฅ์†Œ ๋ฃจํŠธ๋กœ ์„ค์ •ํ•˜์—ฌ ์‹คํ–‰. ### A2A ์™ธ๋ถ€ ์—์…‹ ์ธ์ œ์ŠคํŠธ `scripts/a2a_ingest.js`๋ฅผ ํ†ตํ•ด ์ธ์ œ์ŠคํŠธ๋œ ์™ธ๋ถ€ Gene/Capsule ์—์…‹์€ ๊ฒฉ๋ฆฌ๋œ ํ›„๋ณด ์˜์—ญ์— ์Šคํ…Œ์ด์ง•๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์Šคํ† ์–ด(`scripts/a2a_promote.js`)๋กœ์˜ ์Šน๊ฒฉ์—๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค: 1. ๋ช…์‹œ์ ์ธ `--validated` ํ”Œ๋ž˜๊ทธ (์šด์˜์ž๊ฐ€ ๋จผ์ € ์—์…‹์„ ๊ฒ€์ฆํ•ด์•ผ ํ•จ). 2. Gene์˜ ๊ฒฝ์šฐ: ๋ชจ๋“  `validation` ๋ช…๋ น์–ด๊ฐ€ ์Šน๊ฒฉ ์ „ ๋™์ผํ•œ ์•ˆ์ „์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•ด ๊ฐ์‚ฌ๋จ. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ช…๋ น์–ด๋Š” ์Šน๊ฒฉ์„ ๊ฑฐ๋ถ€. 3. Gene ์Šน๊ฒฉ์€ ๋™์ผ ID์˜ ๊ธฐ์กด ๋กœ์ปฌ Gene์„ ์ ˆ๋Œ€ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Œ. ### `sessions_spawn` ์ถœ๋ ฅ `index.js`์™€ `evolve.js`์˜ `sessions_spawn(...)` ๋ฌธ์ž์—ด์€ ์ง์ ‘์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์•„๋‹Œ **stdout์œผ๋กœ์˜ ํ…์ŠคํŠธ ์ถœ๋ ฅ**์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•ด์„๋˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„(์˜ˆ: OpenClaw ํ”Œ๋žซํผ)์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. evolver ์ž์ฒด๋Š” `sessions_spawn`์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ## ๋ฒ„์ „ ๊ด€๋ฆฌ (SemVer) MAJOR.MINOR.PATCH - MAJOR: ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ - MINOR: ํ•˜์œ„ ํ˜ธํ™˜๋˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ - PATCH: ํ•˜์œ„ ํ˜ธํ™˜๋˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • ## ๋ณ€๊ฒฝ ์ด๋ ฅ ์ „์ฒด ๋ฆด๋ฆฌ์Šค ์ด๋ ฅ์€ [GitHub Releases](https://github.com/EvoMap/evolver/releases)์—์„œ ํ™•์ธํ•˜์„ธ์š”. ## FAQ **์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•˜๋‚˜์š”?** ์•„๋‹™๋‹ˆ๋‹ค. Evolver๋Š” ์ง„ํ™”๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ์™€ ์—์…‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [Evolver๊ฐ€ ํ•˜๋Š” ์ผ๊ณผ ํ•˜์ง€ ์•Š๋Š” ์ผ](#evolver๊ฐ€-ํ•˜๋Š”-์ผ๊ณผ-ํ•˜์ง€-์•Š๋Š”-์ผ)์„ ์ฐธ์กฐํ•˜์„ธ์š”. **`evolver --loop`์„ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ํ…์ŠคํŠธ๋งŒ ๊ณ„์† ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ธ๊ฐ€์š”?** ๋„ค. ์Šคํƒ ๋“œ์–ผ๋ก  ๋ชจ๋“œ์—์„œ evolver๋Š” GEP ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  stdout์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๊ธธ ๊ธฐ๋Œ€ํ–ˆ๋‹ค๋ฉด, ์ถœ๋ ฅ์„ ํ•ด์„ํ•˜๋Š” [OpenClaw](https://openclaw.com)์™€ ๊ฐ™์€ ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” `--review` ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ง„ํ™” ๋‹จ๊ณ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **EvoMap Hub์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋‚˜์š”?** ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•ต์‹ฌ ์ง„ํ™” ๊ธฐ๋Šฅ์€ ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Hub ์—ฐ๊ฒฐ์€ ์Šคํ‚ฌ ์Šคํ† ์–ด, ์›Œ์ปค ํ’€, ์ง„ํ™” ๋ฆฌ๋”๋ณด๋“œ ๋“ฑ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. [EvoMap Hub ์—ฐ๊ฒฐ](#evomap-hub-์—ฐ๊ฒฐ)์„ ์ฐธ์กฐํ•˜์„ธ์š”. **๋ชจ๋“  GEP ์—์…‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”?** ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Gene์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ๊ฐ€์š”?** ๋ฆฌ๋ทฐ ๋ชจ๋“œ์™€ ๊ฒ€์ฆ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ผ์ด๋ธŒ ํŒจ์ฒ˜๊ฐ€ ์•„๋‹Œ, ์•ˆ์ „์„ฑ ์ค‘์‹ฌ์˜ ์ง„ํ™” ๋„๊ตฌ๋กœ ์ทจ๊ธ‰ํ•˜์„ธ์š”. [๋ณด์•ˆ ๋ชจ๋ธ](#๋ณด์•ˆ-๋ชจ๋ธ)์„ ์ฐธ์กฐํ•˜์„ธ์š”. **์ €์žฅ์†Œ๋ฅผ ์–ด๋””์— ํด๋ก ํ•ด์•ผ ํ•˜๋‚˜์š”?** ์•„๋ฌด ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. [OpenClaw](https://openclaw.com)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„์ด evolver์˜ stdout์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก OpenClaw ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ํด๋ก ํ•˜์„ธ์š”. ์Šคํƒ ๋“œ์–ผ๋ก  ์‚ฌ์šฉ ์‹œ ์–ด๋””๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ## ๋กœ๋“œ๋งต ๋ฐฉํ–ฅ์„ฑ์ด๋ฉฐ ํ™•์•ฝ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฐฑ๋กœ๊ทธ๋Š” [GitHub Issues](https://github.com/EvoMap/evolver/issues)์—์„œ ํ™•์ธํ•˜์„ธ์š”. - **์˜จ๋ณด๋”ฉ**: 1๋ถ„ ํ€ต์Šคํƒ€ํŠธ ๋ฐ๋ชจ์™€ ๋Œ€์•ˆ ์—์ด์ „ํŠธ ์ง„ํ™” ๋ฐฉ์‹๊ณผ์˜ ๋น„๊ต ํ‘œ. - **GEP ํ†ตํ•ฉ ์‹ฌํ™”**: ๋” ํ’๋ถ€ํ•œ ์‹œ๊ทธ๋„ ์ถ”์ถœ๊ณผ Gene / Capsule ์„ ํƒ, ๊ทธ๋ฆฌ๊ณ  ์žฌ์‚ฌ์šฉ ๋ถ„์„. - **๋ฉ”๋ชจ๋ฆฌ์™€ ์Šคํ‚ฌ**: ์„ธ์…˜ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Gene / Capsule๋กœ ๋” ๋น ๋ฅด๊ฒŒ ์ฆ๋ฅ˜. - **๋Ÿฐํƒ€์ž„ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•๋Œ€**: Cursor / Claude Code / Codex / Kiro / opencode / OpenClaw ์™ธ ํ˜ธ์ŠคํŠธ ํ†ตํ•ฉ ํ™•๋Œ€. ## Star History [![Star History Chart](https://api.star-history.com/svg?repos=EvoMap/evolver&type=Date)](https://star-history.com/#EvoMap/evolver&Date) ## ๊ฐ์‚ฌ์˜ ๋ง - [onthebigtree](https://github.com/onthebigtree) -- evomap ์ง„ํ™” ๋„คํŠธ์›Œํฌ ํƒ„์ƒ์— ์˜๊ฐ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 3๊ฐœ์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ ๋กœ์ง ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ • (PR [#25](https://github.com/EvoMap/evolver/pull/25)); ํ˜ธ์ŠคํŠธ๋ช… ํ”„๋ผ์ด๋ฒ„์‹œ ํ•ด์‹ฑ, ํฌํ„ฐ๋ธ” ๊ฒ€์ฆ ๊ฒฝ๋กœ, ๋ฐ๋“œ ์ฝ”๋“œ ํด๋ฆฐ์—…์— ๊ธฐ์—ฌ (PR [#26](https://github.com/EvoMap/evolver/pull/26)). - [lichunr](https://github.com/lichunr) -- ์ปดํ“จํŠธ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ฒœ ๋‹ฌ๋Ÿฌ ์ƒ๋‹น์˜ ํ† ํฐ์„ ์ œ๊ณต. - [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()๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ • (PR [#68](https://github.com/EvoMap/evolver/pull/68)). - [toller892](https://github.com/toller892) -- events.jsonl forbidden_paths ๋ฒ„๊ทธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ณด๊ณ  (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/์™ธ๋ถ€ ๋Ÿฌ๋„ˆ keepalive ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ถ”๊ฐ€ (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) > ํ•ต์‹ฌ ์ง„ํ™” ์—”์ง„ ๋ชจ๋“ˆ์€ ์ง€์  ์žฌ์‚ฐ๊ถŒ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๋‚œ๋…ํ™”๋œ ํ˜•ํƒœ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์†Œ์Šค: [EvoMap/evolver](https://github.com/EvoMap/evolver).