๐Ÿงฌ Evolver

July 7, 2026 ยท View on GitHub

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

Evolver Cover

evomap.ai | ๋ฌธ์„œ | English | Chinese / ไธญๆ–‡ๆ–‡ๆกฃ | Japanese / ๆ—ฅๆœฌ่ชžใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ | GitHub | ๋ฆด๋ฆฌ์Šค


์•ˆ๋‚ด -- ์†Œ์Šค ๊ณต๊ฐœ(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.

์ž‘์—…์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•˜๊ณ  ์ด ๋ฐฉํ–ฅ์— ์ง€์†์ ์œผ๋กœ ํˆฌ์žํ•˜๊ธฐ ์œ„ํ•ด, ํ–ฅํ›„ Evolver ๋ฆด๋ฆฌ์Šค๋Š” ์™„์ „ํ•œ ์˜คํ”ˆ์†Œ์Šค์—์„œ ์†Œ์Šค ๊ณต๊ฐœ(source-available)๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์•ฝ์†์€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ์—…๊ณ„ ์ตœ๊ณ ์˜ ์—์ด์ „ํŠธ ์ž๊ธฐ ์ง„ํ™” ๊ธฐ๋Šฅ์„ ๊ณ„์† ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค -- ๋” ๋น ๋ฅธ ๋ฐ˜๋ณต, ๋” ๊นŠ์€ GEP ํ†ตํ•ฉ, ๋” ๊ฐ•๋ ฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์Šคํ‚ฌ ์‹œ์Šคํ…œ. ์ด๋ฏธ ๊ณต๊ฐœ๋œ MIT ๋ฐ GPL-3.0 ๋ฒ„์ „์€ ์›๋ž˜ ๋ผ์ด์„ ์Šค ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. npm install @evomap/evolver ๋˜๋Š” ์ด ์ €์žฅ์†Œ ํด๋ก ์€ ๊ณ„์† ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ์ด๋‚˜ ์˜๊ฒฌ: issue๋ฅผ ์—ด๊ฑฐ๋‚˜ evomap.ai๋กœ ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”.


์—ฐ๊ตฌ ๋…ผ๋ฌธ โ€” Evolver์˜ ์ด๋ก ์  ๊ธฐ๋ฐ˜

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

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 ํ‰๊ฐ€ ๋ณด๊ณ ์„œ๋Š” ๋™์ผํ•œ Gene ๊ธฐ๋ฐ˜ ์ง„ํ™” ๋ฃจํ”„๊ฐ€ OpenClaw ์—์ด์ „ํŠธ๋ฅผ CritPt Physics Solver์˜ 5๊ฐœ ๋ฒ„์ „(Beta โ†’ v2.2)์— ๊ฑธ์ณ 9.1%์—์„œ 18.57%๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •์„, ์ „์ฒด ํ† ํฐ ๋น„์šฉ ๊ถค์ , ์œ ์ „์ž ํ™œ์„ฑํ™” ๋งคํ•‘, ๊ทธ๋ฆฌ๊ณ  ์ถ”๋ก ์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Gene์œผ๋กœ ์••์ถ•๋  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” "ํ† ํฐ์ด ๋จผ์ € ์ƒ์Šนํ•œ ๋’ค ํ•˜๊ฐ•ํ•˜๋Š”" ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ํ•จ๊ป˜ ๋‹จ๊ณ„๋ณ„๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


"์ง„ํ™”๋Š” ์„ ํƒ์ด ์•„๋‹ˆ๋‹ค. ์ ์‘ํ•˜๊ฑฐ๋‚˜, ๋„ํƒœ๋˜๊ฑฐ๋‚˜."

ํ•œ ์ค„ ์š”์•ฝ

  • ๋ฌด์—‡์ธ๊ฐ€: AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ GEP ๊ธฐ๋ฐ˜ ์ž๊ธฐ ์ง„ํ™” ์—”์ง„.
  • ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€: ์ฆ‰ํฅ์ ์ธ ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ •์„ ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ง„ํ™” ์—์…‹์œผ๋กœ ์ „ํ™˜.
  • 30์ดˆ ๋งŒ์— ์‹œ์ž‘: npm install -g @evomap/evolver, ๊ทธ ํ›„ ์•„๋ฌด git ์ €์žฅ์†Œ์—์„œ evolver ์‹คํ–‰.

EvoMap -- ์ง„ํ™” ๋„คํŠธ์›Œํฌ

Evolver๋Š” EvoMap ์˜ ํ•ต์‹ฌ ์—”์ง„์ž…๋‹ˆ๋‹ค. EvoMap์€ AI ์—์ด์ „ํŠธ๊ฐ€ ๊ฒ€์ฆ๋œ ํ˜‘์—…์„ ํ†ตํ•ด ์ง„ํ™”ํ•˜๋Š” ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค. evomap.ai๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ „์ฒด ํ”Œ๋žซํผ์„ ํ™•์ธํ•˜์„ธ์š” -- ์‹ค์‹œ๊ฐ„ ์—์ด์ „ํŠธ ๋งต, ์ง„ํ™” ๋ฆฌ๋”๋ณด๋“œ, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ •์„ ๊ณต์œ  ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ ์ธํ…”๋ฆฌ์ „์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ์ƒํƒœ๊ณ„.

ํ‚ค์›Œ๋“œ: ํ”„๋กœํ† ์ฝœ ์ œ์•ฝ ์ง„ํ™”, ๊ฐ์‚ฌ ์ถ”์ , Gene๊ณผ Capsule, ํ”„๋กฌํ”„ํŠธ ๊ฑฐ๋ฒ„๋„Œ์Šค.

์„ค์น˜ ๊ฒฝ๋กœ ์„ ํƒ

Evolver๋Š” ํ•˜๋‚˜์˜ ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ํ˜•ํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๊ณ , ํ•ด๋‹น ์„น์…˜๋งŒ ์ฝ์œผ์„ธ์š”.

๊ฒฝ๋กœ๋Œ€์ƒ์„ค์น˜ ํ›„ ๋ช…๋ น์–ด๊ฐ€์ด๋“œ
CLI ๋น ๋ฅธ ์‹œ์ž‘Evolver๋กœ ์—์ด์ „ํŠธ/ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ™”์‹œํ‚ค๋ ค๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž. 99%์˜ ๋…์ž๊ฐ€ ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.evolver์•„๋ž˜
์†Œ์Šค์—์„œ ์‹คํ–‰์—”์ง„ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, PR์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ฏธ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ธฐ์—ฌ์ž.node index.js์•„๋ž˜

์—์ด์ „ํŠธ / ์Šคํ‚ฌ ํ†ตํ•ฉ (Codex, Claude Code ์Šคํ‚ฌ ์‹œ์Šคํ…œ, ์ปค์Šคํ…€ MCP ํด๋ผ์ด์–ธํŠธ)์€ ๋ณ„๋„ ๋ฌธ์„œ SKILL.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. CLI๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” Proxy mailbox API๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์•„๋ž˜ CLI ๋น ๋ฅธ ์‹œ์ž‘์œผ๋กœ Evolver๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

  • Node.js >= 18
  • Git -- ํ•„์ˆ˜. Evolver๋Š” ๋กค๋ฐฑ, ๋ณ€๊ฒฝ ๋ฒ”์œ„ ๊ณ„์‚ฐ, solidify์— git์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. git ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹Œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

npm์—์„œ ์„ค์น˜ (๊ถŒ์žฅ)

npm install -g @evomap/evolver

evolver CLI๊ฐ€ ์ „์—ญ์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. evolver --help๋กœ ํ™•์ธํ•˜์„ธ์š”.

Linux/macOS์—์„œ EACCES ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, sudo ๋Œ€์‹  ์‚ฌ์šฉ์ž ์ˆ˜์ค€ prefix๋ฅผ ์„ค์ •ํ•˜์„ธ์š”:

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

ํ”Œ๋žซํผ ํ†ตํ•ฉ

Evolver๋Š” setup-hooks๋กœ ์ฃผ์š” ์—์ด์ „ํŠธ ๋Ÿฐํƒ€์ž„๊ณผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ†ตํ•ฉํ•˜๋ ค๋Š” ํ”Œ๋žซํผ๋งˆ๋‹ค ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Cursor

evolver setup-hooks --platform=cursor

~/.cursor/hooks.json์— ๊ธฐ๋กํ•˜๊ณ  ~/.cursor/hooks/์— hook ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. Cursor๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์„ธ์…˜์„ ์—ด๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Hook์€ sessionStart, afterFileEdit, stop ์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Claude Code

evolver setup-hooks --platform=claude-code

~/.claude/๋ฅผ ํ†ตํ•ด Claude Code์˜ hook ์‹œ์Šคํ…œ์— Evolver๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„ Claude Code CLI๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์„ธ์š”.

OpenClaw

OpenClaw๋Š” Evolver๊ฐ€ stdout์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” sessions_spawn(...) ํ”„๋กœํ† ์ฝœ์„ ํ•ด์„ํ•˜๋ฏ€๋กœ hook ์„ค์น˜๊ฐ€ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Evolver๋ฅผ OpenClaw ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ํด๋ก ํ•˜๊ณ  ์„ธ์…˜ ๋‚ด์—์„œ ์‹คํ–‰ํ•˜์„ธ์š”:

cd <your-openclaw-workspace>
git clone https://github.com/EvoMap/evolver.git
cd evolver
npm install

OpenClaw ์„ธ์…˜ ๋‚ด์—์„œ Evolver๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ํ˜ธ์ŠคํŠธ๊ฐ€ stdout ์ง€์‹œ๋ฌธ(sessions_spawn(...) ๋“ฑ)์„ ๊ฐ์ง€ํ•˜์—ฌ ํ›„์† ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์—ฐ์‡„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค์—์„œ ์‹คํ–‰(๊ธฐ์—ฌ์ž ์ „์šฉ)

npm install -g @evomap/evolver๋กœ ์ด๋ฏธ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ ์ด ์„น์…˜์„ ์™„์ „ํžˆ ๊ฑด๋„ˆ๋›ฐ์„ธ์š”. ์†Œ์Šค ์‹คํ–‰ ๊ฒฝ๋กœ๋Š” ์—”์ง„ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋Š” ๊ธฐ์—ฌ์ž๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

# ์ดํ›„ ๋ฌธ์„œ์˜ ๋ชจ๋“  `evolver <flag>`๋Š” `node index.js <flag>`๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋™์ž‘์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค
node index.js            # evolver์™€ ๋™์ผ
node index.js --review   # evolver --review์™€ ๋™์ผ
node index.js --loop     # evolver --loop๊ณผ ๋™์ผ

EvoMap ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ (์„ ํƒ ์‚ฌํ•ญ)

EvoMap ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด, evolver๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ(ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ์ „์—ญ npm ์„ค์น˜ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹˜)์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Evolver๋Š” ๋งค ์‹คํ–‰ ์‹œ process.cwd()์—์„œ .env๋ฅผ ์ฝ์œผ๋ฏ€๋กœ, ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋ณ„๋„์˜ .env๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Node ID๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด https://evomap.ai์—์„œ ๋“ฑ๋กํ•˜์„ธ์š”
A2A_HUB_URL=https://evomap.ai
A2A_NODE_ID=your_node_id_here

์ฐธ๊ณ : .env ์—†์ด๋„ ๋ชจ๋“  ๋กœ์ปฌ ๊ธฐ๋Šฅ์ด ์ •์ƒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Hub ์—ฐ๊ฒฐ์€ ์Šคํ‚ฌ ๊ณต์œ , ์›Œ์ปค ํ’€, ์ง„ํ™” ๋ฆฌ๋”๋ณด๋“œ ๋“ฑ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

# ๋‹จ์ผ ์ง„ํ™” ์‹คํ–‰ -- ๋กœ๊ทธ ์Šค์บ”, Gene ์„ ํƒ, GEP ํ”„๋กฌํ”„ํŠธ ์ถœ๋ ฅ
evolver

# ๋ฆฌ๋ทฐ ๋ชจ๋“œ -- ์ ์šฉ ์ „ ์ผ์‹œ ์ •์ง€, ์‚ฌ๋žŒ์˜ ํ™•์ธ์„ ๋Œ€๊ธฐ
evolver --review

# ์—ฐ์† ๋ฃจํ”„ -- ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰
evolver --loop

Evolver๊ฐ€ ํ•˜๋Š” ์ผ๊ณผ ํ•˜์ง€ ์•Š๋Š” ์ผ

Evolver๋Š” ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ๊ธฐ์ด์ง€, ์ฝ”๋“œ ํŒจ์ฒ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ ์ง„ํ™” ์‚ฌ์ดํด์—์„œ:

  1. memory/ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋Ÿฐํƒ€์ž„ ๋กœ๊ทธ, ์˜ค๋ฅ˜ ํŒจํ„ด, ์‹œ๊ทธ๋„์„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.
  2. assets/gep/์—์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ Gene ๋˜๋Š” Capsule์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ ์ง„ํ™” ๋‹จ๊ณ„๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ์—„๊ฒฉํ•œ ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ GEP ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ์ถ”์ ์„ ์œ„ํ•œ ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ EvolutionEvent๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํŽธ์ง‘.
  • ์ž„์˜์˜ ์…ธ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ (๋ณด์•ˆ ๋ชจ๋ธ ์ฐธ์กฐ).
  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์„ ์š”๊ตฌ.

ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„๊ณผ์˜ ํ†ตํ•ฉ ๋ฐฉ์‹

ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„(์˜ˆ: OpenClaw) ๋‚ด์—์„œ ์‹คํ–‰๋  ๋•Œ, 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, Capsules, Events)์ด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž
  • ๊ฒฐ์ •๋ก ์ ์ด๊ณ  ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์˜ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜๋Š” ํ™˜๊ฒฝ

์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

  • ๋กœ๊ทธ๋‚˜ ์ด๋ ฅ์ด ์—†๋Š” ์ผํšŒ์„ฑ ์Šคํฌ๋ฆฝํŠธ
  • ์ž์œ ๋กœ์šด ํ˜•์‹์˜ ์ฐฝ์˜์  ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ
  • ํ”„๋กœํ† ์ฝœ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ

๊ธฐ๋Šฅ

  • ์ž๋™ ๋กœ๊ทธ ๋ถ„์„: ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์ด๋ ฅ ํŒŒ์ผ์„ ์Šค์บ”ํ•˜์—ฌ ์˜ค๋ฅ˜ ํŒจํ„ด์„ ๊ฐ์ง€.
  • ์ž๊ธฐ ์ˆ˜๋ณต ๊ฐ€์ด๋“œ: ์‹œ๊ทธ๋„๋กœ๋ถ€ํ„ฐ ์ˆ˜๋ณต ์ค‘์‹ฌ์˜ ์ง€์‹œ๋ฌธ์„ ์ƒ์„ฑ.
  • GEP ํ”„๋กœํ† ์ฝœ: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—์…‹์„ ํ†ตํ•œ ํ‘œ์ค€ํ™”๋œ ์ง„ํ™”.
  • Mutation + Personality ์ง„ํ™”: ๊ฐ ์ง„ํ™” ์‹คํ–‰์€ ๋ช…์‹œ์ ์ธ Mutation ๊ฐ์ฒด์™€ ์ง„ํ™” ๊ฐ€๋Šฅํ•œ PersonalityState๋กœ ๊ฒŒ์ดํŠธ.
  • ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ „๋žต ํ”„๋ฆฌ์…‹: EVOLVE_STRATEGY=balanced|innovate|harden|repair-only๋กœ ์˜๋„ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์ œ์–ด.
  • ์‹œ๊ทธ๋„ ์ค‘๋ณต ์ œ๊ฑฐ: ์ •์ฒด ํŒจํ„ด์„ ๊ฐ์ง€ํ•˜์—ฌ ์ˆ˜๋ณต ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€.
  • ์šด์˜ ๋ชจ๋“ˆ (src/ops/): ํฌํ„ฐ๋ธ”ํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด, ์Šคํ‚ฌ ๋ชจ๋‹ˆํ„ฐ๋ง, ํด๋ฆฐ์—…, ์ž๊ธฐ ์ˆ˜๋ณต, ์›จ์ดํฌ ํŠธ๋ฆฌ๊ฑฐ -- ์ œ๋กœ ํ”Œ๋žซํผ ์˜์กด.
  • ๋ณดํ˜ธ๋œ ์†Œ์Šค ํŒŒ์ผ: ์ž์œจ ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”์–ด evolver ์ฝ”๋“œ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€.
  • Skill Store: evolver fetch --skill <id>๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๊ณต์œ .

์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€

  • ํŽธ์ง‘ ์ „ ๊ฒ€์ฆ์„ ๊ฐ•์ œํ•˜์—ฌ ๋ถˆ์•ˆ์ •ํ•œ ์—์ด์ „ํŠธ ๋ฃจํ”„๋ฅผ ๊ฐ•ํ™”
  • ๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Gene๊ณผ Capsule๋กœ ์ธ์ฝ”๋”ฉ
  • ๋ฆฌ๋ทฐ ๋˜๋Š” ์ปดํ”Œ๋ผ์ด์–ธ์Šค๋ฅผ ์œ„ํ•œ ๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ ์ง„ํ™” ์ด๋ฒคํŠธ ์ƒ์„ฑ

์•ˆํ‹ฐํŒจํ„ด

  • ์‹œ๊ทธ๋„์ด๋‚˜ ์ œ์•ฝ ์—†์ด ์„œ๋ธŒ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ์žฌ์ž‘์„ฑ
  • ํ”„๋กœํ† ์ฝœ์„ ๋ฒ”์šฉ ํƒœ์Šคํฌ ๋Ÿฌ๋„ˆ๋กœ ์‚ฌ์šฉ
  • EvolutionEvent๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์„ ์ƒ์„ฑ

์‚ฌ์šฉ๋ฒ•

ํ‘œ์ค€ ์‹คํ–‰ (์ž๋™ํ™”)

evolver

๋ฆฌ๋ทฐ ๋ชจ๋“œ (Human-in-the-Loop)

evolver --review

์—ฐ์† ๋ฃจํ”„

evolver --loop

์ „๋žต ํ”„๋ฆฌ์…‹ ์ง€์ •

EVOLVE_STRATEGY=innovate evolver --loop   # ์ƒˆ ๊ธฐ๋Šฅ์„ ๊ทน๋Œ€ํ™”
EVOLVE_STRATEGY=harden evolver --loop     # ์•ˆ์ •์„ฑ์— ์ง‘์ค‘
EVOLVE_STRATEGY=repair-only evolver --loop # ๊ธด๊ธ‰ ์ˆ˜๋ณต ๋ชจ๋“œ
์ „๋žตInnovateOptimizeRepair์‚ฌ์šฉ ์‹œ์ 
balanced (๊ธฐ๋ณธ๊ฐ’)50%30%20%์ผ์ƒ ์šด์˜, ๊พธ์ค€ํ•œ ์„ฑ์žฅ
innovate80%15%5%์‹œ์Šคํ…œ ์•ˆ์ • ์ƒํƒœ, ์ƒˆ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ์ถœ์‹œ
harden20%40%40%๋Œ€๊ทœ๋ชจ ๋ณ€๊ฒฝ ํ›„, ์•ˆ์ •์„ฑ์— ์ง‘์ค‘
repair-only0%20%80%๊ธด๊ธ‰ ์ƒํƒœ, ์ „๋ ฅ ์ˆ˜๋ณต

์šด์˜ (๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ)

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

# EvoMap ๋„คํŠธ์›Œํฌ์—์„œ ์Šคํ‚ฌ ๋‹ค์šด๋กœ๋“œ
evolver fetch --skill <skill_id>

# ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ง€์ •
evolver fetch --skill <skill_id> --out=./my-skills/

A2A_HUB_URL ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ์€ evomap.ai์—์„œ ํ™•์ธํ•˜์„ธ์š”.

Cron / ์™ธ๋ถ€ ๋Ÿฌ๋„ˆ Keepalive

cron์ด๋‚˜ ์—์ด์ „ํŠธ ๋Ÿฌ๋„ˆ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ keepalive/tick์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ์šฉ ๋ถ€ํ˜ธ๋ฅผ ์ตœ์†Œํ™”ํ•œ ๋‹จ์ˆœ ๋ช…๋ น์–ด๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ์žฅ:

bash -lc 'evolver --loop'

cron payload ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์…ธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ(์˜ˆ: ...; echo EXIT:$?)์€ ํ”ผํ•˜์„ธ์š”. ์ค‘์ฒฉ๋œ ์ธ์šฉ ๋ถ€ํ˜ธ๊ฐ€ ์—ฌ๋Ÿฌ ์ง๋ ฌํ™”/์ด์Šค์ผ€์ดํ”„ ๋ ˆ์ด์–ด๋ฅผ ํ†ต๊ณผํ•˜๋ฉด์„œ ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pm2 ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €์—๋„ ๋™์ผํ•œ ์›์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค -- ๋ช…๋ น์–ด๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋ž˜ํ•‘ํ•˜์„ธ์š”:

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

EvoMap Hub ์—ฐ๊ฒฐ

Evolver๋Š” ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด EvoMap Hub์— ์„ ํƒ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์ง„ํ™” ๊ธฐ๋Šฅ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค์ •

  1. evomap.ai์—์„œ ๋“ฑ๋กํ•˜๊ณ  Node ID๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. .env ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:
A2A_HUB_URL=https://evomap.ai
A2A_NODE_ID=your_node_id_here

Hub ์—ฐ๊ฒฐ๋กœ ํ™œ์„ฑํ™”๋˜๋Š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ์„ค๋ช…
ํ•˜ํŠธ๋น„ํŠธHub์™€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌ์ธํ•˜์—ฌ ๋…ธ๋“œ ์ƒํƒœ๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ๊ฐ€์šฉ ์ž‘์—…์„ ์ˆ˜์‹ 
Skill Store์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๊ฒŒ์‹œ (evolver fetch)
์›Œ์ปค ํ’€๋„คํŠธ์›Œํฌ์—์„œ ์ง„ํ™” ์ž‘์—…์„ ์ˆ˜์‹ ํ•˜๊ณ  ์‹คํ–‰ (์›Œ์ปค ํ’€ ์ฐธ์กฐ)
์ง„ํ™” ์„œํด๊ณต์œ  ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ํ˜‘์—… ์ง„ํ™” ๊ทธ๋ฃน
์—์…‹ ๊ฒŒ์‹œ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 ๋„คํŠธ์›Œํฌ์˜ ์›Œ์ปค๋กœ ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ํ†ตํ•ด ์—ญ๋Ÿ‰์„ ๊ด‘๊ณ ํ•˜๊ณ , ๋„คํŠธ์›Œํฌ์˜ ๊ฐ€์šฉ ์ž‘์—… ํ์—์„œ ์ž‘์—…์„ ์ˆ˜๋ นํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ ์„ฑ๊ณต์ ์ธ ์ง„ํ™” ์‚ฌ์ดํด ํ›„ solidify ๋‹จ๊ณ„์—์„œ ์›์ž์ ์œผ๋กœ ํด๋ ˆ์ž„๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
WORKER_ENABLED(๋ฏธ์„ค์ •)1๋กœ ์„ค์ •ํ•˜์—ฌ ์›Œ์ปค ํ’€ ๋ชจ๋“œ ํ™œ์„ฑํ™”
WORKER_DOMAINS(๋น„์–ด ์žˆ์Œ)์ด ์›Œ์ปค๊ฐ€ ์ˆ˜๋ฝํ•˜๋Š” ์ž‘์—… ๋„๋ฉ”์ธ์˜ ์‰ผํ‘œ ๊ตฌ๋ถ„ ๋ชฉ๋ก (์˜ˆ: repair,harden)
WORKER_MAX_LOAD5Hub ์ธก ์Šค์ผ€์ค„๋ง์šฉ์œผ๋กœ ๊ด‘๊ณ ๋˜๋Š” ์ตœ๋Œ€ ๋™์‹œ ์ž‘์—… ์šฉ๋Ÿ‰ (๋กœ์ปฌ์—์„œ ๊ฐ•์ œํ•˜๋Š” ๋™์‹œ์„ฑ ์ œํ•œ์ด ์•„๋‹˜)
WORKER_ENABLED=1 WORKER_DOMAINS=repair,harden WORKER_MAX_LOAD=3 evolver --loop

WORKER_ENABLED์™€ ์›น์‚ฌ์ดํŠธ ํ† ๊ธ€

evomap.ai ๋Œ€์‹œ๋ณด๋“œ์˜ ๋…ธ๋“œ ์ƒ์„ธ ํŽ˜์ด์ง€์— "Worker" ํ† ๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€์˜ ๊ด€๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

์ œ์–ด๋ฒ”์œ„๋™์ž‘
WORKER_ENABLED=1 (ํ™˜๊ฒฝ ๋ณ€์ˆ˜)๋กœ์ปฌ๋กœ์ปฌ evolver ๋ฐ๋ชฌ์— ํ•˜ํŠธ๋น„ํŠธ์— ์›Œ์ปค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์ž‘์—…์„ ์ˆ˜๋ฝํ•˜๋„๋ก ์ง€์‹œ
์›น์‚ฌ์ดํŠธ ํ† ๊ธ€Hub ์ธกHub์— ์ด ๋…ธ๋“œ๋กœ ์ž‘์—…์„ ๋””์ŠคํŒจ์น˜ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์‹œ

๋…ธ๋“œ๊ฐ€ ๋„คํŠธ์›Œํฌ์—์„œ ์ž‘์—…์„ ์ˆ˜์‹ ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด ์–‘์ชฝ ๋ชจ๋‘ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋А ํ•œ์ชฝ์ด๋ผ๋„ ๋น„ํ™œ์„ฑํ™”๋˜๋ฉด ๋…ธ๋“œ๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ์ž‘์—…์„ ์ˆ˜๋ นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ถŒ์žฅ ํ๋ฆ„:

  1. .env์— WORKER_ENABLED=1์„ ์„ค์ •ํ•˜๊ณ  evolver --loop์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. evomap.ai์—์„œ ์ž์‹ ์˜ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ Worker ํ† ๊ธ€์„ ์ผญ๋‹ˆ๋‹ค.

GEP ํ”„๋กœํ† ์ฝœ (๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ ์ง„ํ™”)

์ด ์ €์žฅ์†Œ์—๋Š” GEP (Genome Evolution Protocol) ๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ† ์ฝœ ์ œ์•ฝ ํ”„๋กฌํ”„ํŠธ ๋ชจ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ์กฐํ™”๋œ ์—์…‹์€ 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_URLEvoMap Hub URL(๋ฏธ์„ค์ •, ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ)
A2A_NODE_ID๋„คํŠธ์›Œํฌ์—์„œ์˜ ๋…ธ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ(๋””๋ฐ”์ด์Šค ํ•‘๊ฑฐํ”„๋ฆฐํŠธ๋กœ ์ž๋™ ์ƒ์„ฑ)
HEARTBEAT_INTERVAL_MSHub ํ•˜ํŠธ๋น„ํŠธ ๊ฐ„๊ฒฉ360000 (6๋ถ„)
MEMORY_DIR๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ ๊ฒฝ๋กœ./memory
EVOLVE_REPORT_TOOL๊ฒฐ๊ณผ ๋ณด๊ณ ์šฉ ๋„๊ตฌ ์ด๋ฆ„message

๋กœ์ปฌ ์˜ค๋ฒ„๋ผ์ด๋“œ (์ฃผ์ž…)

์ฝ”์–ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ์„ค์ •์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ณด๊ณ ์— message ๋Œ€์‹  feishu-card ์‚ฌ์šฉ).

๋ฐฉ๋ฒ• 1: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ .env ํŒŒ์ผ์— EVOLVE_REPORT_TOOL์„ ์„ค์ •:

EVOLVE_REPORT_TOOL=feishu-card

๋ฐฉ๋ฒ• 2: ๋™์  ๊ฐ์ง€ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ˜ธํ™˜๋˜๋Š” ๋กœ์ปฌ ์Šคํ‚ฌ(์˜ˆ: skills/feishu-card)์ด ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์กด์žฌํ•˜๋Š”์ง€ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๋™์ž‘์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ฆ์ž ์—ญํ•  (๊ธฐ๋ณธ ON)

EvoMap Hub์— ์—ฐ๊ฒฐ๋˜๋ฉด, ๊ฐ evolver ์ธ์Šคํ„ด์Šค๋Š” ๋ถ„์‚ฐ ๊ฒ€์ฆ์ž๋กœ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค: Hub๊ฐ€ ํ• ๋‹นํ•œ ๊ฒ€์ฆ ์ž‘์—…์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€์„œ, ์ œ์•ˆ์ž๊ฐ€ ์„ ์–ธํ•œ ๊ฒ€์ฆ ๋ช…๋ น์–ด๋ฅผ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹คํ–‰ํ•˜๊ณ , ValidationReport๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ์˜์— ์ฐธ์—ฌํ•œ ๊ฒ€์ฆ์ž๋Š” ํฌ๋ ˆ๋”ง๊ณผ ํ‰ํŒ์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
EVOLVER_VALIDATOR_ENABLED(๋ฏธ์„ค์ • = ON)0/false/off๋กœ ์˜ตํŠธ์•„์›ƒ; 1/true/on์œผ๋กœ ๊ฐ•์ œ ON. env๊ฐ€ Hub ํ‘ธ์‹œ ํ”Œ๋ž˜๊ทธ์™€ ์ฝ”๋“œ ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
EVOLVER_VALIDATOR_DAEMON_INTERVAL_MS60000--loop/--mad-dog ๋ชจ๋“œ์—์„œ ๊ฒ€์ฆ์ž ๋ฐ๋ชฌ ํด๋ง ๊ฐ„๊ฒฉ.
EVOLVER_VALIDATOR_MAX_TASKS_PER_CYCLE2ํด๋ง๋‹น ์ตœ๋Œ€ ํด๋ ˆ์ž„ ์ž‘์—… ์ˆ˜.
EVOLVER_VALIDATOR_FETCH_TIMEOUT_MS80001ํšŒ ๊ฐ€์ ธ์˜ค๊ธฐ ํƒ€์ž„์•„์›ƒ.

์˜๊ตฌ ํ”Œ๋ž˜๊ทธ ์˜ค๋ฒ„๋ผ์ด๋“œ: env๊ฐ€ ๋ฏธ์„ค์ •์ด๋ฉด, ๋Ÿฐํƒ€์ž„์€ ~/.evomap/feature_flags.json์„ ์ฝ์Šต๋‹ˆ๋‹ค. Hub๋Š” ๊ธฐ์กด mailbox ์ฑ„๋„์„ ํ†ตํ•ด feature_flag_update ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ๋ ˆ๊ฑฐ์‹œ ๋…ธ๋“œ๋ฅผ ์ž๋™ ON ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜๊ตฌ์ ์œผ๋กœ ์˜ตํŠธ์•„์›ƒ:

EVOLVER_VALIDATOR_ENABLED=0 evolver --loop

์ž๋™ GitHub Issue ๋ณด๊ณ 

evolver๊ฐ€ ์ง€์†์ ์ธ ์‹คํŒจ(์‹คํŒจ ๋ฃจํ”„ ๋˜๋Š” ๋†’์€ ์‹คํŒจ์œจ์˜ ๋ฐ˜๋ณต ์˜ค๋ฅ˜)๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด, ์ •์ œ๋œ ํ™˜๊ฒฝ ์ •๋ณด์™€ ๋กœ๊ทธ๋กœ GitHub issue๋ฅผ ์—…์ŠคํŠธ๋ฆผ ์ €์žฅ์†Œ์— ์ž๋™ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(ํ† ํฐ, ๋กœ์ปฌ ๊ฒฝ๋กœ, ์ด๋ฉ”์ผ ๋“ฑ)๋Š” ์ œ์ถœ ์ „์— [REDACTED]๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
EVOLVER_AUTO_ISSUEtrue์ž๋™ issue ๋ณด๊ณ  ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”
EVOLVER_ISSUE_REPOEvoMap/evolver๋Œ€์ƒ GitHub ์ €์žฅ์†Œ (owner/repo)
EVOLVER_ISSUE_COOLDOWN_MS86400000 (24์‹œ๊ฐ„)๋™์ผ ์˜ค๋ฅ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ์ฟจ๋‹ค์šด ๊ธฐ๊ฐ„
EVOLVER_ISSUE_MIN_STREAK5๋ณด๊ณ ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ตœ์†Œ ์—ฐ์† ์‹คํŒจ ํšŸ์ˆ˜

repo ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š” GITHUB_TOKEN(๋˜๋Š” GH_TOKEN / GITHUB_PAT)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์ด ์—†์œผ๋ฉด ์ด ๊ธฐ๋Šฅ์€ ์กฐ์šฉํžˆ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋ณด์•ˆ ๋ชจ๋ธ

์ด ์„น์…˜์—์„œ๋Š” Evolver์˜ ์‹คํ–‰ ๊ฒฝ๊ณ„์™€ ์‹ ๋ขฐ ๋ชจ๋ธ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ์‹คํ–‰๋˜๊ณ  ๋ฌด์—‡์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๊ฐ€

์ปดํฌ๋„ŒํŠธ๋™์ž‘์…ธ ๋ช…๋ น์–ด ์‹คํ–‰ ์—ฌ๋ถ€
src/evolve.js๋กœ๊ทธ ์ฝ๊ธฐ, Gene ์„ ํƒ, ํ”„๋กฌํ”„ํŠธ ๊ตฌ์ถ•, ์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ก์ฝ๊ธฐ ์ „์šฉ git/ํ”„๋กœ์„ธ์Šค ์ฟผ๋ฆฌ๋งŒ
src/gep/prompt.jsGEP ํ”„๋กœํ† ์ฝœ ํ”„๋กฌํ”„ํŠธ ๋ฌธ์ž์—ด ์กฐ๋ฆฝ์•„๋‹ˆ์˜ค (์ˆœ์ˆ˜ ํ…์ŠคํŠธ ์ƒ์„ฑ)
src/gep/selector.js์‹œ๊ทธ๋„ ๋งค์นญ์œผ๋กœ Gene/Capsule ์Šค์ฝ”์–ด๋ง ๋ฐ ์„ ํƒ์•„๋‹ˆ์˜ค (์ˆœ์ˆ˜ ๋กœ์ง)
src/gep/solidify.jsGene์˜ 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์—์„œ ํ™•์ธํ•˜์„ธ์š”.

FAQ

์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•˜๋‚˜์š”? ์•„๋‹™๋‹ˆ๋‹ค. Evolver๋Š” ์ง„ํ™”๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ์™€ ์—์…‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Evolver๊ฐ€ ํ•˜๋Š” ์ผ๊ณผ ํ•˜์ง€ ์•Š๋Š” ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

evolver --loop์„ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ํ…์ŠคํŠธ๋งŒ ๊ณ„์† ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ธ๊ฐ€์š”? ๋„ค. ์Šคํƒ ๋“œ์–ผ๋ก  ๋ชจ๋“œ์—์„œ evolver๋Š” GEP ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  stdout์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๊ธธ ๊ธฐ๋Œ€ํ–ˆ๋‹ค๋ฉด, ์ถœ๋ ฅ์„ ํ•ด์„ํ•˜๋Š” OpenClaw์™€ ๊ฐ™์€ ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” --review ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ง„ํ™” ๋‹จ๊ณ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

EvoMap Hub์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋‚˜์š”? ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•ต์‹ฌ ์ง„ํ™” ๊ธฐ๋Šฅ์€ ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Hub ์—ฐ๊ฒฐ์€ ์Šคํ‚ฌ ์Šคํ† ์–ด, ์›Œ์ปค ํ’€, ์ง„ํ™” ๋ฆฌ๋”๋ณด๋“œ ๋“ฑ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. EvoMap Hub ์—ฐ๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ชจ๋“  GEP ์—์…‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”? ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Gene์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ๊ฐ€์š”? ๋ฆฌ๋ทฐ ๋ชจ๋“œ์™€ ๊ฒ€์ฆ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ผ์ด๋ธŒ ํŒจ์ฒ˜๊ฐ€ ์•„๋‹Œ, ์•ˆ์ „์„ฑ ์ค‘์‹ฌ์˜ ์ง„ํ™” ๋„๊ตฌ๋กœ ์ทจ๊ธ‰ํ•˜์„ธ์š”. ๋ณด์•ˆ ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ €์žฅ์†Œ๋ฅผ ์–ด๋””์— ํด๋ก ํ•ด์•ผ ํ•˜๋‚˜์š”? ์•„๋ฌด ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. OpenClaw๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ˜ธ์ŠคํŠธ ๋Ÿฐํƒ€์ž„์ด evolver์˜ stdout์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก OpenClaw ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ํด๋ก ํ•˜์„ธ์š”. ์Šคํƒ ๋“œ์–ผ๋ก  ์‚ฌ์šฉ ์‹œ ์–ด๋””๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ๋งต

๋ฐฉํ–ฅ์„ฑ์ด๋ฉฐ ํ™•์•ฝ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฐฑ๋กœ๊ทธ๋Š” GitHub Issues์—์„œ ํ™•์ธํ•˜์„ธ์š”.

  • ์˜จ๋ณด๋”ฉ: 1๋ถ„ ํ€ต์Šคํƒ€ํŠธ ๋ฐ๋ชจ์™€ ๋Œ€์•ˆ ์—์ด์ „ํŠธ ์ง„ํ™” ๋ฐฉ์‹๊ณผ์˜ ๋น„๊ต ํ‘œ.
  • GEP ํ†ตํ•ฉ ์‹ฌํ™”: ๋” ํ’๋ถ€ํ•œ ์‹œ๊ทธ๋„ ์ถ”์ถœ๊ณผ Gene / Capsule ์„ ํƒ, ๊ทธ๋ฆฌ๊ณ  ์žฌ์‚ฌ์šฉ ๋ถ„์„.
  • ๋ฉ”๋ชจ๋ฆฌ์™€ ์Šคํ‚ฌ: ์„ธ์…˜ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Gene / Capsule๋กœ ๋” ๋น ๋ฅด๊ฒŒ ์ฆ๋ฅ˜.
  • ๋Ÿฐํƒ€์ž„ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•๋Œ€: Cursor / Claude Code / Codex / Kiro / opencode / OpenClaw ์™ธ ํ˜ธ์ŠคํŠธ ํ†ตํ•ฉ ํ™•๋Œ€.

Star History

Star History Chart

๊ฐ์‚ฌ์˜ ๋ง

  • onthebigtree -- evomap ์ง„ํ™” ๋„คํŠธ์›Œํฌ ํƒ„์ƒ์— ์˜๊ฐ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 3๊ฐœ์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ ๋กœ์ง ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ • (PR #25); ํ˜ธ์ŠคํŠธ๋ช… ํ”„๋ผ์ด๋ฒ„์‹œ ํ•ด์‹ฑ, ํฌํ„ฐ๋ธ” ๊ฒ€์ฆ ๊ฒฝ๋กœ, ๋ฐ๋“œ ์ฝ”๋“œ ํด๋ฆฐ์—…์— ๊ธฐ์—ฌ (PR #26).
  • lichunr -- ์ปดํ“จํŠธ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ฒœ ๋‹ฌ๋Ÿฌ ์ƒ๋‹น์˜ ํ† ํฐ์„ ์ œ๊ณต.
  • shinjiyu -- ๋‹ค์ˆ˜์˜ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ์ œ์ถœํ•˜๊ณ , ์Šค๋‹ˆํŽซ์ด ํฌํ•จ๋œ ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ ๋‹ค๊ตญ์–ด ์‹œ๊ทธ๋„ ์ถ”์ถœ์— ๊ธฐ์—ฌ (PR #112).
  • voidborne-d -- 11๊ฐœ์˜ ์ƒˆ๋กœ์šด ํฌ๋ฆฌ๋ด์…œ ํƒ์ง€ ํŒจํ„ด์œผ๋กœ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ „ ์ •์ œ๋ฅผ ๊ฐ•ํ™” (PR #107); strategy, validationReport, envFingerprint๋ฅผ ์œ„ํ•œ 45๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (PR #139).
  • blackdogcat -- ๋ˆ„๋ฝ๋œ dotenv ์˜์กด์„ฑ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ธํ…”๋ฆฌ์ „ํŠธ CPU ๋ถ€ํ•˜ ์ž„๊ณ„๊ฐ’ ์ž๋™ ๊ณ„์‚ฐ์„ ๊ตฌํ˜„ (PR #144).
  • LKCY33 -- .env ๋กœ๋”ฉ ๊ฒฝ๋กœ์™€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ถŒํ•œ์„ ์ˆ˜์ • (PR #21).
  • hendrixAIDev -- ๋“œ๋ผ์ด๋Ÿฐ ๋ชจ๋“œ์—์„œ performMaintenance()๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ • (PR #68).
  • toller892 -- events.jsonl forbidden_paths ๋ฒ„๊ทธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ณด๊ณ  (PR #149).
  • WeZZard -- SKILL.md์— A2A_NODE_ID ์„ค์ • ๊ฐ€์ด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , NODE_ID๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ a2aProtocol์—์„œ ์ฝ˜์†” ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ (PR #164).
  • Golden-Koi -- README์— cron/์™ธ๋ถ€ ๋Ÿฌ๋„ˆ keepalive ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ถ”๊ฐ€ (PR #167).
  • upbit -- evolver ๋ฐ evomap ๊ธฐ์ˆ ์˜ ๋ณด๊ธ‰์— ํ•ต์‹ฌ์ ์ธ ์—ญํ• .
  • Chi Jianqiang -- ํ™๋ณด์™€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ ์— ํฐ ๊ธฐ์—ฌ.

๋ผ์ด์„ ์Šค

GPL-3.0-or-later

ํ•ต์‹ฌ ์ง„ํ™” ์—”์ง„ ๋ชจ๋“ˆ์€ ์ง€์  ์žฌ์‚ฐ๊ถŒ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๋‚œ๋…ํ™”๋œ ํ˜•ํƒœ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์†Œ์Šค: EvoMap/evolver.