sentient-agi/EvoSkill
요약
EvoSkill은 AI 에이전트가 최첨단 전문가 수준으로 진화할 수 있도록 돕는 강력한 툴킷입니다. 이 도구는 Claude Code, Codex CLI 등 다양한 코딩 에이전트와 호환되며, 스킬과 프롬프트를 자동으로 생성하고 개선합니다. 기존의 단일 파일 수정 방식을 넘어, 여러 변형을 공동 제안하고 별도 데이터로 평가하며 새로운 에이전트 프로그램을 생성하여 진화 과정을 확장했습니다.
핵심 포인트
- AI 에이전트의 자동 강화 및 전문가 수준 전환 지원
- Claude Code, Codex CLI 등 다양한 코딩 에이전트와 호환됨
- 단순 수정 대신 여러 스킬 변형을 공동 제안하고 평가함
- 다양한 모델 제공업체(OpenRouter, Anthropic, OpenAI 등)를 자유롭게 사용 가능
EvoSkill과 벤치마크를 사용하여 일반 AI 에이전트를 최첨단 전문가로 전환하세요. EvoSkill은 Claude Code, Codex CLI, OpenCode, OpenHands, Goose, Harbor 등과 호환되는 AI 스킬을 자동으로 생성하고 개선하기 위한 툴킷입니다.**
EvoSkill은 단일 파일 최적화에 국한되었던 GEPA의 피드백 기반 아이디어를 완전한 에이전트 진화로 크게 확장합니다. GEPA처럼 단순히 하나의 프롬프트만 제자리에서 수정하는 대신, EvoSkill은 여러 스킬과 프롬프트 변이를 공동으로 제안하고, 별도로 보관된 데이터(held-out data)로 새로운 변형들을 평가하며, 각 반복마다 완전히 새로운 에이전트 프로그램을 생성합니다.
설치 후 evoskill init 및 evoskill run을 실행하여 AI가 생성한 스킬과 프롬프트로 모든 코딩 에이전트를 자동으로 강화할 수 있습니다. 에이전트에 따라, 사용자가 원하는 모든 모델 제공업체(OpenRouter, Anthropic, OpenAI, Fireworks 등)와 원하는 모든 모델(Claude, GLM, Minimax, Kimi, GPT, Gemini, Qwen 등)을 자유롭게 사용할 수 있습니다.
경험을 논의하거나, 제안 사항을 공유하거나, 작업물을 자랑하고 싶다면 Discord에서도 참여해 주세요!
| 에이전트 | 지원 여부 | 참고 사항 |
|---|---|---|
| Claude Code | ✅ | |
| ... | ||
| 역량 (Capability) | 상태 (Status) | 설명 (Explanation) |
| --- | --- | --- |
| 진단 기준을 통한 진화 (Evolution with a benchmark) | ✅ | 스킬은 자체 또는 학술적 벤치마크를 통해 효과적으로 개선될 수 있습니다. |
| 에이전트 간 전이성 (Cross-agent transferability) | ✅ | 스킬은 지침, 메타데이터 및 헬퍼 스크립트를 포함하는 재사용 가능한 폴더로 패키징되어 많은 코딩 에이전트와 호환됩니다. |
| 모델 간 전이성 (Cross-model transferability) | ✅ | EvoSkills에서 입증되었듯이, 고정된 LLM으로 진화한 스킬은 다른 LLM으로 성능 향상을 전이할 수 있습니다. |
| 작업별 전이성 (Cross-task transferability) | ✅ | 생성된 스킬은 작업 전반에 걸쳐 충분히 일반적일 수 있으며, 예를 들어 SealQA 스킬이 BrowseComp 성능을 개선하는 데 사용될 수 있습니다 (EvoSkill에서 보여주듯이). |
| 진단 기준 없는 진화 (Evolution without a benchmark) | 🛠️ | 벤치마크가 실시간으로 생성되는 개방형 연구 방향입니다 (예: Hermes-Agent 자체 진화). |
| 지속적인 진화 (Continuous evolution) | 🛠️ | 일반 사용을 통해 스킬을 개선하는 기능을 통합합니다. |
- 설치 (Installation)
- 빠른 시작 (Quickstart)
- Harbor 통합 (Harbor Integration)
- CLI 참조 (CLI Reference)
- 구성 참조 (Configuration Reference)
- 작동 방식 (How It Works)
- Git 브랜치 (Git Branches)
- 루프가 멈추는 경우 (When the Loop Gets Stuck)
- Python API
- 인용 (Citation)
- 라이선스 (License)
한 명령어만 사용합니다 (권장):
# 모든 것 클론 및 설치 (Python 의존성, uv, 선택적 에이전트 CLI 포함)
curl -fsSL https://raw.githubusercontent.com/sentient-agi/EvoSkill/main/install.sh | bash
# 또는, 이미 레포지토리를 클론한 경우:
...
설치 프로그램은 Python 3.12 이상, uv, 그리고 uv sync를 자동으로 처리합니다. Harbor는 Python 패키지에 포함되어 있습니다. 에이전트 CLI는 선택 사항입니다 — 사용할 계획인 하네스만 설치하세요.
수동 설치 (Manual install):
요구사항 (Requirements):
- Python 3.12+
uv
(권장) 또는pip
# uv 사용 (권장)
uv sync
# 또는 pip 사용
...
에이전트 CLI (사용할 계획인 하네스를 설치하세요):
brew install --cask claude-code # Claude Code
brew install opencode # OpenCode (v1.4.0+)
brew install --cask codex # Codex CLI
...
Harbor는 위의 Python 설치(uv sync)에 포함되어 있습니다.
Harbor는 위의 Python 설치(uv sync)에 포함되어 있습니다.
/ pip install -e .
). Harbor CLI를 독립적으로 사용해야 하는 경우에만 실행하세요:
pip install harbor # Harbor (컨테이너화된 벤치마크)
일반 인증 설정:
# Anthropic (Claude Code harness)
export ANTHROPIC_API_KEY=your-key-here
# OpenAI (Codex harness)
...
OpenRouter를 기반으로 하는 진화(evolution) 실행은 LLM_API_KEY도 허용하지만, OPENROUTER_API_KEY 환경 변수가 권장됩니다.
어떤 git 저장소 내에서든 evoskill init을 실행하세요:
CSV 데이터셋 (질문/답변 쌍):
$ evoskill init
EvoSkill — 프로젝트 설정
어떤 에이전트 런타임을 사용하겠습니까? › claude
...
Harbor 데이터셋 (컨테이너화된 벤치마크 작업):
$ evoskill init
EvoSkill — 프로젝트 설정
어떤 에이전트 런타임을 사용하겠습니까? › claude
...
이렇게 하면 .evoskill/config.toml과 .evoskill/task.md가 생성됩니다.
데이터셋 소스는 CSV(정적 질문/답변 쌍) 또는 Harbor(내장 검증기가 있는 컨테이너화된 작업)입니다. 데이터 디렉토리는 (CSV 전용) 에이전트가 필요로 하는 디렉터리의 절대 경로입니다. 여러 개의 경우 쉼표로 구분합니다. 실행 모드는 로컬(직접), Docker(컨테이너화, DOCKER_HOST를 통해 원격 지원), 또는 Daytona(관리형 클라우드 샌드박스) 중 하나입니다.
.evoskill/task.md를 편집하여 에이전트가 무엇을 해야 하는지 설명하세요:
# Task
분기별 재무 보고서에 대한 질문에 답변합니다.
수치형 답변과 단위를 반환합니다.
...
evoskill run
EvoSkill은 evoskill init 중에 선택한 실행 모드(로컬, Docker 또는 Daytona)를 사용합니다. --docker 또는 --remote 플래그로 재정의할 수 있습니다.
EvoSkill은 실시간 진행률 테이블을 출력합니다:
Iter Accuracy Δ Skills Frontier Status
1 42.0% — 0 [1] baseline
2 51.3% +9.3% 1 [1, 2] ★ new best
...
evoskill eval # 검증 세트에서 최적의 프로그램을 점수화합니다
evoskill skills # 발견된 모든 스킬을 나열합니다
evoskill diff # baseline 대비 변경된 내용을 확인합니다
...
루프가 완료된 후, 최적의 프로그램은 git 브랜치에 저장됩니다:
git branch | grep program/ # 모든 프로그램 브랜치를 나열합니다
git checkout program/iter-skill-3 # 가장 좋은 것으로 전환합니다
여기서부터 루프가 발견한 내용을 검사할 수 있습니다:
cat .claude/program.yaml # 시스템 프롬프트, 도구, 점수
ls .claude/skills/ # 학습된 모든 스킬
.claude/program.yaml과 .claude/skills/를 복사하여 배포 환경에 넣어 진화된 에이전트 구성을 사용하세요.
Harbor는 컨테이너화된 벤치마크 작업을 대상으로 AI 에이전트를 평가하는 프레임워크입니다. EvoSkill은 Harbor와 통합되어 CSV 기반 데이터셋의 대안으로, Harbor 내장 검증기(verifier)를 점수 측정 메커니즘으로 사용합니다.
Harbor 모드는 정적인 CSV 질문에 대해 에이전트를 실행하는 대신 다음을 수행합니다:
작업 로드: 다운로드된 Harbor 데이터셋에서 작업을 불러옵니다 (각 작업은 자체 Dockerfile, 테스트 하네스(test harness), 검증기를 가집니다). 실행: 각 작업에 대해 샌드박스 컨테이너를 생성하여 코딩 에이전트가 작업을 해결하도록 합니다 (harbor run).
검증기 보상 읽기: 컨테이너 출력에서 검증기 보상을 읽습니다 (0.0에서 1.0 사이).
결과 피드백: 결과를 EvoSkill의 자체 개선 루프에 다시 공급하여 더 나은 스킬을 진화시킵니다.
pip install harbor # Harbor CLI 설치
evoskill init를 실행하고 데이터셋 소스로 Harbor를 선택합니다. Init은 Harbor Hub에서 사용 가능한 데이터셋 목록을 보여주고 선택한 항목을 자동으로 다운로드합니다.
init 과정에서 Harbor가 선택되면 다음 설정이 자동 생성됩니다:
[dataset]
source = "harbor"
harbor_tasks_root = ".evoskill/harbor/datasets/swe-bench-verified"
...
inner_agent와 inner_model은 하네스 선택을 통해 자동으로 파생됩니다. env는 실행 모드(로컬/Docker의 경우 docker, Daytona의 경우 daytona)를 통해 파생됩니다.
Glob 패턴을 사용하여 포함할 작업을 필터링할 수 있습니다:
[dataset]
harbor_include = ["swe-bench/*"] # 일치하는 작업만 포함
harbor_exclude = ["swe-bench/hard*"] # 일치하는 작업 제외
...
Mode별 작업 실행 방식
| Mode | How Harbor runs tasks | Notes |
|---|---|---|
| Local | harbor run -e docker | 로컬에 Docker 설치 필요 |
| Docker | harbor run -e docker | Harbor tasks 디렉터리가 볼륨으로 마운트됨 |
| Daytona | harbor run -e daytona | Harbor가 Daytona API를 사용하여 작업 샌드박스를 생성합니다. DAYTONA_API_KEY는 자동으로 전달됩니다. |
명령어 및 설명
| Command | Description |
|---|---|
evoskill init | 새로운 프로젝트 초기화 (.evoskill/ 폴더를 생성합니다) |
evoskill run | 자기 개선 루프 실행 |
evoskill run --docker | Docker 컨테이너에서 실행 |
evoskill run --remote | Daytona 샌드박스에서 실행 |
evoskill eval | 검증 세트(validation set)에서 최적의 프로그램 평가 |
evoskill skills | 지금까지 발견된 모든 스킬 목록 표시 |
evoskill diff | 기준선(baseline) 대 최고 성능, 또는 두 반복 간 차이점 비교 |
evoskill logs | 최근 실행 기록 표시 |
evoskill reset | 모든 프로그램 브랜치를 삭제하고 처음부터 다시 시작 |
evoskill remote status | 원격 실행 진행 상황 확인 |
evoskill remote logs | 원격 실행 로그 보기 |
evoskill remote download | 완료된 원격 실행 결과 가져오기 (Pull) |
evoskill remote stop | 원격 실행 중지 및 정리 |
evoskill run [--continue] [--verbose] [--quiet] [--config PATH] [--docker] [--remote] [--rebuild]
플래그(Flag) 및 설명
| Flag | Description |
|---|---|
--continue | 처음부터 시작하는 대신 기존의 프론티어(frontier)에서 재개합니다. |
--verbose | 샘플별 통과/실패 결과 표시 |
--quiet | 진행 상황 테이블만 표시하고, 제안자(proposer) 출력을 억제합니다. |
--config PATH | .evoskill/config.toml 대신 특정 설정 TOML 파일을 로드합니다. |
--docker | Docker 컨테이너 내부에서 실행 (필요한 경우 Dockerfile로부터 이미지를 빌드합니다) |
--remote | Daytona 샌드박스에서 실행 (설정 파일에 [remote]가 필요합니다) |
--rebuild | 실행 전에 Docker 이미지를 강제로 재빌드합니다. |
evoskill eval
또한 --config PATH를 허용합니다.
evoskill diff # baseline → current best
evoskill diff 3 7 # iteration 3 vs iteration 7
diff는 .claude/에 한정됩니다.
directory — 스킬과 시스템 프롬프트의 변경 사항을 보여주며, 사용자의 소스 코드는 아닙니다.
evoskill logs # 마지막 5회 실행 (기본값)
evoskill logs --last 10 # 마지막 10회 실행
evoskill reset # 확인 프롬프트 표시
모든 program/* 브랜치, frontier/* 태그, 루프 체크포인트 및 피드백 기록을 삭제합니다. 사용자의 소스 코드(config.toml, task.md)와 .claude/skills/ 내의 모든 스킬은 그대로 유지됩니다.
evoskill init
.evoskill/config.toml 파일을 생성합니다. 모든 필드는 선택 사항이며, 기본값은 아래에 표시됩니다. 상대 데이터셋 및 데이터 디렉토리 경로는 프로젝트 루트에서 해석되므로, .evoskill이 포함된 디렉토리가 기준이 됩니다.
[harness]
name = "claude" # "claude", "opencode", "codex", "goose", 또는 "openhands"
model = "sonnet" # Claude 별칭, Codex 모델 이름, 또는 OpenCode/Goose/OpenHands의 제공업체/모델
...
대체 설정은 기본 설정 옆에 위치할 수 있습니다:
.evoskill/config.toml
.evoskill/config.openrouter.toml
명시적인 설정을 사용하여 실행합니다:
evoskill eval --config .evoskill/config.openrouter.toml
evoskill run --config .evoskill/config.openrouter.toml
일반적인 진화 모델 설정:
Anthropic:
[harness]
name = "claude"
model = "claude-sonnet-4-6"
OpenAI:
[harness]
name = "codex"
model = "gpt-5"
OpenRouter:
[harness]
name = "opencode"
model = "openrouter/openai/gpt-5-mini"
Fireworks AI:
[harness]
name = "openhands" # 또는 "opencode"
model = "fireworks_ai/accounts/fireworks/models/llama-v3p1-70b-instruct"
참고 사항:
claude는 Anthropic 전용입니다. codex는 gpt-5, o3, 또는 gpt-5.1-codex-mini와 같은 순수 OpenAI 모델 이름을 사용합니다. opencode, goose, 및 openhands는 다중 제공업체(multi-provider) 하니스로서 Claude 및 OpenAI 모델을 사용할 수도 있습니다. opencode, goose, 및 openhands는 anthropic/claude-sonnet-4-6, openai/gpt-5, 또는 openrouter/openai/gpt-5-mini와 같은 provider/model 문자열을 허용합니다. Fireworks AI는 FIREWORKS_API_KEY를 사용합니다.
. OpenHands (litellm)는 fireworks_ai/ 접두사를 예상하는 반면, OpenCode (models.dev)는 fireworks-ai/를 예상합니다.
Goose는 내장된 Fireworks provider가 없으므로 수동으로 OpenAI와 호환되는 설정을 사용해야 합니다.
| 유형 | 설명 |
|---|---|
multi_tolerance | 유연한 문자열 매칭: 정확 일치, 숫자 허용 오차, 리스트 중복 (기본값) |
exact | 대소문자 구분 없는 정확한 문자열 일치 |
llm | 사용자 정의 루브릭을 사용한 LLM-as-judge 채점 |
script | 셸 스크립트 채점기 — {predicted}와 {expected}를 변수로 받음 |
harbor | Harbor의 내장 검증기에서 보상을 읽어옴 (데이터셋 소스가 Harbor인 경우 자동 설정) |
LLM 채점기 옵션:
[scorer]
type = "llm"
rubric = "답변이 5% 이내로 수치적으로 정확하면 1.0점을, 그렇지 않으면 0.0점을 부여하세요."
...
OpenRouter 기반 채점의 경우, provider = "openrouter"를 설정하고 openai/gpt-5-mini 또는 google/gemini-2.5-flash와 같은 OpenRouter 모델 ID를 사용합니다.
인증은 OPENROUTER_API_KEY를 사용하며, 필요한 경우 LLM_API_KEY로 폴백(fallback)됩니다.
Fireworks 기반 채점의 경우, provider = "fireworks"를 설정하고 accounts/fireworks/models/llama-v3p1-70b-instruct와 같은 Fireworks 모델 ID를 사용합니다.
인증은 FIREWORKS_API_KEY를 사용합니다.
스크립트 채점기 옵션:
[scorer]
type = "script"
command = "python score.py --predicted {predicted} --expected {expected}"
EvoSkill 실행은 몇 시간이 걸릴 수 있습니다. Docker 또는 Daytona를 사용하여 원격 하드웨어에서 실행하고 시스템 자원을 확보하세요.
포함된 Dockerfile로부터 이미지를 빌드합니다:
docker build -t evoskill .
evoskill run --docker
원격 서버에서 실행하려면 Docker가 해당 서버를 가리키도록 설정합니다:
export DOCKER_HOST=ssh://user@your-server
evoskill run --docker
모니터링 및 중지:
docker compose -f .evoskill/docker-compose.yml logs -f
docker compose -f .evoskill/docker-compose.yml down
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기