GitHub 트렌딩 딥다이브 · 2026-06-23

Arbor 딥다이브
— 가설을 나무처럼 키워 스스로 실험하는 자율 연구 에이전트

RUC-NLPIR/Arbor. 벤치마크(채점 가능한 과제)와 목표를 주면, 가설을 제안하고 → 코드를 고치고 → 진짜 실험을 돌리고 → 결과에서 배우고 → 검증을 통과한 개선만 남기는 자율 연구 에이전트(autonomous research agent)다. 한 번 시도하고 잊어버리는 보통의 에이전트와 달리, 모든 아이디어를 가설 트리(Idea Tree)의 가지로 키운다 — 실패하면 쳐내고(prune), 성공하면 거두고(harvest), 거기서 얻은 교훈을 위로 전파해 다음 아이디어가 더 똑똑하게 출발한다. 중국 인민대(RUC) Gaoling AI 스쿨과 Microsoft Research가 만들었다. (저장소: RUC-NLPIR/Arbor · 언어 Python ≥3.10 · ★상승 중(TrendShift 라이브 멘션) · 라이선스 Apache-2.0 · 논문 arXiv:2606.11926)

목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석 (아이디어 하나가 검증되기까지)
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

"실험을 한 번 하고 끝내는 게 아니라, 실패와 성공을 나무에 기록하며 점점 똑똑해지는 연구 조수."

한 줄로

Arbor는 목표 하나를 받아 가설을 세우고 진짜 실험을 돌려 가며 스스로 성능을 끌어올리는 자율 연구 에이전트다.

당신이 "이 벤치마크에서 정확도를 높여줘"라고 목표를 주면, Arbor는 사람 연구자가 하듯 가설을 제안하고 → 코드를 고치고 → 실험을 돌리고 → 점수를 확인하고 → 되는 방향만 남깁니다. 핵심은 그 과정을 나무(트리) 모양으로 기록한다는 것. 각 아이디어는 가지가 되고, 실패한 가지는 잘라내고, 성공한 가지는 줄기에 접붙입니다. 그래서 시간이 갈수록 시행착오가 쌓여 다음 아이디어가 앞선 교훈 위에서 출발합니다.

용어
자율 연구 에이전트 (autonomous research agent)
사람이 한 줄 한 줄 지시하지 않아도 스스로 "무엇을 시도할지" 정하고, 코드를 짜서 실험을 돌리고, 결과를 보고 다음 행동을 결정하는 AI 프로그램. 보통의 챗봇이 "질문 1개 → 답 1개"라면, 이건 "목표 1개 → 수십 번의 실험 → 검증된 개선"까지 혼자 굴러갑니다. 밤새 실험을 대신 돌려 주는 대학원생 조교를 떠올리면 됩니다.
용어
가설 트리 / 아이디어 트리 (Idea Tree)
Arbor의 장기 기억이자 작업 지도. 뿌리(root)는 연구 목표, 가지는 각각의 가설(아이디어)이고, 각 가지에는 "무엇을 시도했나·점수·무엇을 배웠나"가 붙습니다. 가계도(족보)처럼 부모-자식 관계로 아이디어가 뻗어 나가, 어떤 시도가 어디서 갈라져 나왔는지 한눈에 보입니다. 채팅 로그를 끝없이 스크롤하는 대신, 구조화된 나무 한 그루를 본다는 게 발상의 전환입니다.

좀 더 구체적으로, Arbor는 Python으로 만든 명령줄 도구(CLI)입니다. 터미널에 arbor 한 번 치면 대화형 연구 세션이 시작되고, "무엇을·어디서·어떤 점수로 좋게 만들지"를 먼저 정리한 뒤(이걸 리서치 계약서라 부릅니다) 본격적인 실험 루프가 돕니다. 적용 범위가 넓어서 모델 학습, 에이전트 성능 튜닝, 데이터 합성, 알고리즘 최적화처럼 "좋게 만들 대상과 잴 수 있는 점수만 있으면" 무엇이든 최적화할 수 있다고 표방합니다.

이 문서가 주목하는 건 사용법만이 아니라 그 안의 설계입니다 — "어떻게 두 개의 AI가 역할을 나눠 협력하는가", "실험이 서로 망가뜨리지 않게 어떻게 격리하는가", "AI가 스스로를 속이지 않게(점수 부풀리기) 어떻게 막는가". 자율 에이전트를 처음 공부하는 사람에게 잘 짜인 교본입니다.

2왜 주목받는가

"같은 컴퓨팅 예산으로 Claude Code·Codex를 2.5배 앞섰다" — 단일 에이전트의 한계를 구조로 넘었다.

먼저, 보통의 코딩 에이전트는 무엇이 아쉬운가

Claude Code, Codex 같은 코딩 에이전트는 똑똑하지만, 긴 연구성 과제에서 약점이 있습니다. 대화가 길어지면 앞에서 무엇이 실패했는지 잊고, 같은 막다른 길을 다시 들어가거나, 한 번에 한 갈래만 깊게 파다가 더 좋은 방향을 놓칩니다. 사람 연구자라면 실험 노트에 "이 방법은 과적합이라 버림"이라고 적어 두고 다음엔 피하죠. 보통의 에이전트에겐 그 노트가 없습니다 — 맥락이 길어지면 그냥 화면 위로 스크롤되어 사라집니다.

함정
한 방 시도(one-shot)의 망각

긴 과제를 한 줄기 대화로 밀어붙이면, 모델의 맥락 창(한 번에 기억할 수 있는 분량)이 가득 차는 순간 오래된 실패 기록부터 밀려납니다. 그러면 에이전트는 "이미 해봤고 안 됐던" 아이디어를 새것인 양 또 시도합니다. 시간·돈·GPU가 같은 실수에 반복 소모됩니다.

해결
트리에 누적하고, 교훈을 위로 전파

Arbor는 모든 결과를 아이디어 트리(디스크에 저장)에 적고, 실험이 끝날 때마다 "왜 됐나/안 됐나"를 한 문장으로 요약해 부모 노드로 올려보냅니다(역전파, backpropagation). 형제·자식 아이디어는 그 교훈을 물려받아 같은 함정을 피합니다. 맥락이 압축돼도 트리는 남으니, 긴 연구를 자기 역사에 빠져 죽지 않고 끌고 갑니다.

이 구조 덕분에 Arbor는 같은 컴퓨팅 예산에서 단일 에이전트보다 더 멀리 갑니다. 미국 IT 매체 VentureBeat는 2026년 6월 "새 AI 최적화 프레임워크가 같은 예산으로 Claude Code와 Codex를 2.5배 앞섰다"는 제목으로 이 프로젝트를 소개했습니다. 논문(arXiv:2606.11926)은 모델 학습·에이전트 엔지니어링·데이터 합성 등 여섯 가지 서로 다른 과제에서 동일한 컨트롤러로 강력한 단일 에이전트 베이스라인을 모두 이겼다고 보고합니다.

비슷한 도구들과 무엇이 다른가

관점Arbor일반 코딩 에이전트
(Claude Code·Codex)
목표측정 가능한 점수를 장기간 최적화코드 작성·과제 1건 해결
기억 방식가설 트리(디스크 저장)+교훈 역전파주로 대화 맥락(길어지면 소실)
탐색 방식여러 가지를 병렬·구조적으로 탐색대체로 한 줄기 순차 진행
실험 격리가설마다 독립 git worktree대개 작업 트리 직접 수정
과적합 방지dev/test 분리 + 합격선 통과분만 병합내장 안전장치 없음

다시 말해, Arbor는 코딩 에이전트를 대체하는 게 아니라 그 위에 연구 규율(어떻게 탐색·평가·기록할지)을 씌운 메타 시스템에 가깝습니다. 실제로 실험 코드를 짜는 일꾼(Executor)은 내부적으로 LLM이고, Claude Code의 오픈소스 재구현인 claw-code의 REPL·도구 호출 기반 위에 세워졌습니다.

논문이 보고한 성적

같은 컨트롤러를 과제만 바꿔 적용했고, 모두 처음 보는 테스트(held-out)에서 이겼다고 합니다. 숫자는 "초기 → Arbor" 개선폭입니다.

과제지표 방향초기 → Arbor
옵티마이저 설계스텝 ↓(적을수록 좋음)3325 → 3237.5
아키텍처 설계손실 ↓1.098 → 1.028
Terminal-Bench 2.0통과율 ↑69.81 → 77.36
BrowseComp(웹 탐색)정확도 ↑45.33 → 67.67
MLE-Bench Lite(GPT-5.5)메달 비율 ↑Any-Medal 86.36%

※ 벤치마크 수치는 저자(개발팀)가 자기 논문에서 보고한 값입니다. 독립 재현 결과는 아니니, 정확한 실험 조건은 논문 본문을 확인하세요.

3기술 스택 전체 지도

"Python 한 언어로, 여러 LLM 공급자를 한 인터페이스 뒤에 숨기고, git을 안전판으로 쓴다."

Arbor는 무거운 웹 프레임워크나 데이터베이스 없이, 순수 Python 패키지 + 표준 도구(git)로 돌아갑니다. "서버를 띄운다"기보다 "터미널에서 실행하는 연구 도구"라서 구성이 단출합니다. 소스는 약 3.5만 줄 규모이고, src/ 폴더가 arbor라는 이름의 패키지로 설치됩니다.

코어 — 에이전트와 LLM 연결

레이어기술 / 패키지역할
언어/런타임Python ≥ 3.10전체 코드베이스. 일부 기능(문헌 검색)은 3.12+에서만
LLM 공급자anthropic, openai, litellmClaude·GPT·DeepSeek·Gemini·Qwen·로컬모델까지 한 코드로 호출
HTTPhttpx, requestsAPI 호출·웹 검색
토큰 계산tiktoken맥락 길이·비용 추적(토큰 = LLM이 읽는 글자 묶음)
데이터 검증pydantic, pydantic-settings설정/이벤트를 타입 안전하게 다룸
용어
LiteLLM
수십 개 LLM 공급자(OpenAI·Anthropic·Google·로컬 서버 등)를 똑같은 함수 한 개로 호출하게 해 주는 어댑터 라이브러리. 콘센트 모양이 나라마다 다른데 만능 멀티탭을 끼우면 어디서든 같은 플러그를 쓰는 것과 같습니다. Arbor는 이 덕분에 "모델만 바꿔" DeepSeek·Qwen·vLLM·Ollama로 갈아탈 수 있습니다.

CLI / 사용자 화면

레이어기술 / 패키지역할
명령 구조typerarbor setup·arbor doctor 같은 하위 명령 정의
터미널 UIrich, prompt-toolkit색깔 있는 라이브 대시보드·대화형 입력
기반 REPLclaw-code(Rust)Claude Code의 오픈소스 재구현 — 도구 호출·크로스플랫폼 기반 제공
읽기전용 WebUIPython 표준 http.server브라우저로 진행 상황 모니터링(arbor web)

연구 인프라 — 격리·검색·확장

레이어기술 / 패키지역할
실험 격리git worktree(외부 git)가설마다 독립 작업공간·브랜치. main은 안 건드림
문헌 검색alphaxiv-py(3.12+)아이디어 참신성 점검 — 키 없이 alphaXiv 공개 API 사용
도구 서버MCP(mcp, 선택 설치)Claude Code 안에서 키 없이 Arbor 도구를 쓰게 해 줌
스킬/플러그인YAML + Markdown도메인 전환(예: Kaggle)·런타임 플레이북
패키징/버전uv, setuptools-scm의존성 잠금(uv.lock)·git 태그로 버전 자동 부여
용어
MCP (Model Context Protocol, 모델 컨텍스트 프로토콜)
AI 에이전트(호스트)와 외부 도구를 잇는 표준 약속(규격). USB처럼 "이 모양에 맞추면 어떤 도구든 꽂힌다"는 발상입니다. Arbor는 arbor mcp로 자기 도구(트리 관리·평가·병합)를 MCP 서버로 띄워, Claude Code가 자기 모델로 그 도구들을 부리게 합니다 — Arbor에 별도 API 키를 줄 필요가 없습니다.
용어
git worktree (워크트리)
하나의 git 저장소에서 여러 작업 폴더를 동시에 열어 두는 기능. 같은 책의 복사본을 여러 권 만들어 각자 다른 챕터를 고치는 셈입니다. Arbor는 실험(가설)마다 워크트리를 새로 파서, 동시에 돌려도 서로 충돌하지 않고 실패하면 폴더째 버리면 됩니다.

4아키텍처 심화 분석 — 아이디어 하나가 검증되기까지

"전략을 짜는 감독과 실험을 돌리는 엔지니어, 두 AI가 역할을 나눈다."

먼저 전체 그림 한 장

Arbor의 핵심은 두 개의 협력하는 에이전트입니다. 한 명은 "무엇을 시도할지" 정하는 Coordinator(코디네이터, 연구 감독), 다른 한 명은 "그 하나를 실제로 구현·실행"하는 Executor(실행자, 연구 엔지니어). 둘 사이의 공용 메모는 아이디어 트리입니다.

┌─────────────────────────────┐ 당신(목표·벤치마크) ──▶ │ Coordinator (연구 감독) │ │ · 아이디어 트리를 관리 │ │ · 무엇을 탐색할지 결정 │ │ · 실험을 일꾼에게 배정 │ └───────┬─────────────▲───────┘ 아이디어 1건 배정 ↓ ↑ 증거 + 점수 ┌───────────────────────────┐ │ Executor (연구 엔지니어) │ ← 여러 명 병렬 가능 │ · 코드 수정·실험 실행 │ │ · 독립 git worktree 안에서 │ └───────────────────────────┘ │ 결과·교훈 기록 ▼ ┌──────────────┐ 읽기/쓰기 ┌───────────────────────────┐ │ EventBus │◀────────────▶│ 아이디어 트리 (디스크) │ │ (이벤트 버스)│ │ root─가설─가설─… + 교훈 │ └──────┬───────┘ └───────────────────────────┘ │ 구독 │ 최종 ▼ ▼ 대시보드 · 로그(events.jsonl) · WebUI REPORT.md (연구 보고서)

여기서 중요한 설계 결정은 전략(어떤 가설이 시험할 가치가 있나)과 실행(그 가설을 진짜로 만들기)을 분리한 것입니다. 감독은 코드를 직접 짜지 않고, 엔지니어는 큰 그림을 고민하지 않습니다. 각자 한 가지에 집중하니 둘 다 잘하게 됩니다.

용어
ReAct 루프 (Reasoning + Acting)
에이전트가 "생각 → 도구 사용 → 결과 관찰 → 다시 생각"을 반복하는 기본 패턴. 요리사가 "간을 본다(관찰) → 소금을 더한다(행동) → 다시 맛본다"를 되풀이하는 것과 같습니다. Coordinator와 Executor 둘 다 이 루프로 돌아갑니다. Arbor의 Coordinator는 매 사이클마다 새 에이전트를 만들지 않고 하나의 끈질긴 ReAct 루프를 유지하며, 맥락이 차면 4단계 압축으로 줄이되 진짜 기억은 디스크의 트리에 남깁니다.

여섯 박자로 도는 'arbor cycle'

Coordinator는 아래 여섯 단계를 한 사이클로 계속 반복합니다. 멈추는 조건(예산 소진·수렴·목표 달성)이 올 때까지요.

① OBSERVE (관찰) 현재 결과와 실패 양상을 트리에서 다시 읽는다 ② IDEATE (발상) 유망한 가지 밑에 새 가설 1~3개를 제안한다 ③ SELECT (선택) 지금 시험할 가장 우선순위 높은 가설을 고른다 ④ DISPATCH (배정) Executor를 격리된 worktree에서 그 가설로 돌린다 ⑤ BACKPROP (역전파) 결과를 기록하고, 교훈을 조상 노드로 끌어올린다 ⑥ DECIDE (결정) 계속 / 줄기에 병합 / 가지치기 / 정지 를 정한다 │ └──▶ (조건 충족까지 ①로 되돌아가 반복)

핵심은 ⑤ 역전파입니다. 실험이 끝나면 LLM이 " 성공/실패했는가"를 한 문장으로 추상화합니다 — 예: "이득은 새 레이어가 아니라 보정(calibration)에서 나왔다", "폴드 구성에서 데이터 누수가 있었다". 그 교훈을 트리 위로 적어 두면, 형제·자손 아이디어가 그 지식에서 출발합니다. 매번 처음부터 다시 배우지 않는 거죠.

아이디어 트리의 실제 모습

트리의 각 노드는 가설 하나이고, 상태(pending·running·merged·pruned 등)·점수·교훈이 붙습니다. 깊이마다 추상화 수준이 다릅니다.

root: held-out 정확도를 최대화하라 ← 깊이0: 연구 목표·전역 교훈 ├── 1: 검색 품질이 병목이다 ← 깊이1: 연구 방향(논문 제목급) │ ├── 1.1: 제약 분해 + 검증 [40%, merged] ← 깊이2: 구체적 방법(실행·검증) │ ├── 1.2: 주기적 재읽기 주입 [40%, pruned — 순이득 없음] │ └── 1.3: 답 추출 튜닝 [35%, pruned] ├── 2: 멀티관점 검색 [교훈: "여기선 검색 보강이 해롭다"] │ └── 2.1: 너비우선 탐색 [25%, pruned] └── 3: 코드수준 개입 [교훈: "프롬프트보다 코드수준이 낫다"] ├── 3.1: 연속 생성 주입 [70%, merged] └── 3.2: ANSWER 태그 추출 [45%, done]

흐름 한 줄기 따라가기 — "정확도 좀 높여줘"라고 했을 때

가장 대표적인 한 흐름을 입력부터 출력까지 손으로 따라가 보겠습니다(핵심 줄만 형광).

① 당신: arbor "정확도를 높여줘" --cwd ./benchmark ② intake(접수 대화): 목표·대상폴더·지표·기준선·예산·dev/test 분리를 한 화면짜리 리서치 계약서(Research Contract)로 정리 → 당신이 확인 ③ Coordinator 시작: 트리 root에 목표를 심고 라이브 대시보드 가동 ④ OBSERVE→IDEATE: "검색 품질이 병목" 같은 가설을 트리에 추가 ⑤ DISPATCH: Executor가 새 git worktree를 파고 코드 수정 ⑥ Executor가 dev(연습) 데이터로 평가 스크립트를 돌려 점수를 잰다 ⑦ BACKPROP: 점수·교훈을 트리에 기록, 조상 노드로 교훈 전파 ⑧ DECIDE: held-out(test) 점수가 합격선을 넘으면 trunk에 병합 ⑨ 반복… 예산이 끝나면 REPORT.md 보고서 생성 + 세션 저장(재개 가능)
용어
dev/test 분리 + 합격선(merge threshold)
실험을 연습용(dev)채점용(test, held-out) 두 묶음으로 나누는 규율. Executor는 dev로 마음껏 튜닝하지만, 그 변경을 줄기에 남길지는 test 점수가 정해진 폭(예: +5%) 이상 오를 때만 결정합니다. 시험 문제로 연습하면 점수가 부풀 듯, 같은 데이터로 튜닝하고 채점하면 AI가 스스로를 속이게(과적합) 됩니다. 이 분리가 그걸 막는 가장 중요한 안전장치입니다.

그리고 ⑤의 worktree 격리가 모든 걸 안전하게 만듭니다. 실험은 각자 브랜치에서 돌아 서로 안 건드리고, 당신의 main은 당신이 직접 git merge 하기 전까지 그대로입니다. 실패한 가지는 그냥 버리면 되니 되돌리기(reversible)가 공짜입니다. 사람이 끼어들고 싶으면 interaction_modeauto(완전 자율)에서 review(매 단계 승인)로 올려 감독 수위를 조절할 수 있습니다.

5디렉토리 구조 해부

"코드는 src/ 안에 있지만 arbor 라는 이름으로 설치된다 — 폴더 이름이 곧 역할이다."

저장소를 처음 열면 폴더가 많아 막막하지만, 핵심은 src/(코드)와 skills/(키리스 플레이북) 두 곳입니다. 나머지는 문서·예제·설정입니다.

Arbor/ ├── src/ ← 'arbor' 패키지 본체 (핵심) │ ├── core/ 공용 기반: ReAct 루프·도구·LLM 공급자·맥락관리 │ │ ├── agent.py 에이전트 ReAct 루프 (생각→도구→관찰) │ │ ├── llm/ claude·openai·litellm·responses 어댑터 │ │ └── tools/ Bash·FileEdit·Grep·Glob·RunTraining·web/… │ ├── coordinator/ 연구 감독: 트리·오케스트레이터·결정 도구 │ │ ├── orchestrator.py 하나의 끈질긴 ReAct 루프(사이클 구동) │ │ ├── idea_tree.py 아이디어 트리 자료구조 + 저장(JSON+MD) │ │ ├── convergence.py 수렴(그만 둘 때) 판단 │ │ └── tools/ 트리 추가/갱신/가지치기·Executor 실행·병합 │ ├── executor/ 실험 일꾼 에이전트 + 'executor' CLI │ ├── cli/ 'arbor' 명령: 접수(intake)·대시보드·setup·doctor │ ├── events/ 타입 있는 이벤트 버스 + 구독자(로그·통계) │ ├── search_agent/ 문헌·참신성 검색 에이전트(alphaXiv) │ ├── mcp/ 키리스 MCP 서버(server.py·session_ops.py) │ ├── plugins/ 도메인 플러그인(mle_kaggle.yaml 등) │ ├── report/ REPORT.md 생성기 │ ├── webui/ 읽기전용 모니터링 웹서버 │ └── skills/ 런타임에 불러오는 마크다운 플레이북 ├── skills/ ← 코딩 에이전트용 Agent Skill 모음(키리스) │ ├── arbor-research-agent/ 사용자 진입점(접수 후 오케스트레이터 로드) │ ├── arbor-agent-coordinator/ · arbor-agent-executor/ · … ├── examples/ 실행 가능한 예제(algotune_knn)·설정 샘플 ├── docs/ 영문/중문 문서(how-it-works·configuration…) ├── .claude-plugin/ Claude Code 플러그인 정의(plugin.json) ├── pyproject.toml 패키지·의존성·CLI 진입점 정의 └── uv.lock 의존성 잠금(재현 가능한 설치)
폴더/파일역할
src/core모든 에이전트가 공유하는 토대 — ReAct 루프, 파일/Bash/검색 도구, 여러 LLM 공급자 어댑터, 맥락 압축. 비밀값을 이벤트에 흘리지 않게 시크릿 스크러빙도 여기 있다.
src/coordinator연구의 '뇌'. idea_tree.py가 트리를, orchestrator.py가 사이클 루프를 담당. 트리 조작·Executor 호출·병합은 tools/에 도구로.
src/executor아이디어 하나를 받아 코드로 구현하고 실험을 돌리는 '손'. 독립 worktree에서 작동.
src/cli당신이 만지는 부분 — arbor 명령, 접수 대화, 라이브 대시보드, setup/doctor.
src/events코어와 화면(대시보드·로그·리포트)을 느슨하게 잇는 이벤트 버스. 발행은 fire-and-forget이라 구독자가 느려도 본체가 안 멈춘다.
src/mcpLLM·API 키 없이 Arbor 도구(트리·평가·worktree·병합·리포트)만 MCP로 노출. 호스트 에이전트가 추론을 맡는다.
skills/(루트)패키지 설치 없이도 Codex/Claude Code에 넣어 쓰는 마크다운 스킬 모음. src/skills/(내부 런타임 스킬)와는 별개.

6학습 포인트 (기술별)

"이 레포에서 무엇을 훔쳐 배울 수 있는가 — 자율 에이전트 설계의 살아 있는 교본."

학습 포인트 1 — 에이전트 설계

역할을 둘로 쪼개라 (계획 vs 실행)

한 에이전트에게 "전략도 짜고 코드도 짜라"고 하면 둘 다 어설퍼집니다. Arbor는 Coordinator(무엇을)Executor(어떻게)로 나눕니다. Executor에게는 트리 전체가 아니라 "이 아이디어 하나 + 짧은 요약"만 넘겨서, 일꾼이 잡음에 휩쓸리지 않게 합니다.

이 분리는 멀티에이전트 설계의 핵심 교훈입니다 — 맥락을 좁게 주는 것이 곧 성능입니다. 실습: 당신의 챗봇을 "기획 봇 → 실행 봇"으로 나눠 보세요.

학습 포인트 2 — 장기 기억

대화 로그 대신 '구조화된 트리'를 기억으로 써라

긴 작업에서 채팅 맥락은 금세 가득 찹니다. Arbor는 진짜 기억을 디스크의 트리(JSON + 사람이 읽는 Markdown)에 두고, 노드가 바뀔 때마다 저장합니다. 맥락이 압축돼도 트리는 안 사라지므로, 에이전트는 언제든 다시 트리를 읽어 자기를 재정렬합니다.

노드 자료구조는 단순합니다 — 가설·상태·점수·교훈만 담습니다(군더더기 없음):

# src/coordinator/idea_tree.py — Node 핵심 필드
id: str            # "ROOT", "1", "1.1" 처럼 족보식 번호
parent_id: str
status: "pending"|"running"|"done"|"merged"|"pruned"
hypothesis: str    # 무엇을 시도하나
score: float       # 절대 점수(예: 45.2)
insight: str       # 무엇을 배웠나(역전파로 채워짐)
code_ref: str      # 이 실험의 git 브랜치 이름
학습 포인트 3 — 안전한 실험

git worktree로 실험을 '되돌리기 공짜'로 만들어라

AI가 코드를 고치다 망쳐도 당신의 작업물이 멀쩡하려면 격리가 필요합니다. Arbor는 가설마다 워크트리+브랜치를 새로 파, 동시에 여러 실험을 충돌 없이 병렬로 돌립니다. 성공한 변경만 per-run trunk 브랜치에 모이고, 당신은 만족할 때 그걸 main으로 올립니다.

# 검증된 개선을 내 메인에 반영하는 건 '내가' 직접
git merge research/run_xxx/trunk

배울 점: "AI에게 쓰기 권한을 주되, 경계는 git이 지킨다"는 패턴. 실습으로 worktree를 직접 만들어 보면 감이 옵니다(섹션 8).

학습 포인트 4 — 자기기만 방지

'연습 점수'와 '채점 점수'를 분리하라

에이전트가 같은 데이터로 튜닝하고 채점하면 점수는 오르는데 실력은 안 오릅니다(과적합). Arbor는 dev로 자유롭게 반복하되 held-out test에서 합격선을 넘은 변경만 남깁니다. 한 줄 설정이 이 규율을 강제합니다:

# research_config.yaml
coordinator:
  merge_threshold: 5.0   # held-out 점수가 +5% 넘게 올라야 병합

머신러닝을 배우는 사람에게 이건 train/validation/test 분리의 에이전트 버전입니다 — 평가 설계의 정석.

학습 포인트 5 — 느슨한 결합

EventBus로 '본체'와 '화면'을 떼어 놓아라

대시보드·로그·리포트는 모두 같은 사건(이벤트)을 듣지만, 본체는 그들을 몰라야 합니다. Arbor의 EventBus는 발행이 fire-and-forget(쏘고 잊기)이고 구독자 예외가 본체로 안 번집니다. 덕분에 대시보드를 끄든 켜든, 웹UI를 붙이든, 연구 루프는 영향을 안 받습니다.

모든 사건은 events.jsonl로도 적혀, 끝난 뒤 arbor replay로 재생하거나 자기완결 HTML로 내보낼 수 있습니다 — 관측 가능성(observability)의 좋은 예.

학습 포인트 6 — 추상화 / 이식성

LLM 공급자를 한 인터페이스 뒤에 숨겨라

Arbor는 Anthropic·OpenAI Responses·OpenAI호환(LiteLLM)을 같은 LLMProvider 인터페이스로 감쌉니다. provider: auto면 엔드포인트를 탐지해 추론 체인을 보존하는 Responses API가 있으면 그걸, 없으면 일반 chat로 떨어집니다. 그래서 클라우드 모델에서 로컬 vLLM/Ollama까지 설정 두 줄로 갈아탑니다.

그리고 키가 아예 없어도 됩니다 — arbor mcp로 도구만 노출하면 Claude Code가 자기 구독 모델로 Arbor를 굴립니다. "추상화가 곧 이식성"이라는 교훈.

7시스템 요구사항

"GPU가 꼭 필요한 건 아니다 — 데모와 예제 과제는 CPU로 충분하다."

Arbor 자체는 가벼운 Python 도구입니다. 무거운 자원은 "Executor가 무슨 실험을 돌리느냐"에 달려 있습니다 — 모델 학습이면 GPU가, 알고리즘 최적화면 CPU만 있어도 됩니다.

항목요구사항
Python3.10 이상(필수). 내장 문헌검색(idea-check)은 3.12+에서만
git필수 — worktree 격리·브랜치 병합의 토대
LLM 접근네이티브 CLI는 API 키 필요(Anthropic·OpenAI·DeepSeek 등). 구독형 코딩 에이전트만 있으면 키리스 MCP 경로로 키 없이 사용
OS크로스플랫폼(claw-code 기반). macOS·Linux·Windows
GPU선택 — 데모/예제(algotune_knn)는 CPU·1초 미만. 모델 학습 과제일 때만 필요
비용arbor replay --demo는 0원. quickstart는 무료 키(Gemini/Groq)나 로컬(Ollama)로 시작 가능

8직접 해볼 수 있는 실습 과제

"보는 것부터 시작해, 점점 직접 굴려 본다 — API 키 없이도 절반은 된다."

실습 1난이도 ★☆☆ 입문

녹화된 연구를 재생해 트리가 자라는 걸 본다

키도 설정도 필요 없습니다. 설치 후 한 줄이면 아이디어 트리가 라이브로 커지는 모습을 봅니다. 공유용 HTML로 내보내 친구에게 보낼 수도 있습니다.

pip install arbor-agent
arbor replay --demo          # 대시보드로 재생
arbor replay --demo --html   # 자기완결 HTML로 내보내기
실습 2난이도 ★☆☆ 입문

예제 과제(algotune_knn)를 끝까지 돌려 본다

GPU·예산 없이 CPU로 1초 안에 도는 작은 벤치마크가 들어 있습니다. 브루트포스 KNN을 같은 답을 내면서 더 빠르게 만드는 과제로, 한 번 6사이클에 dev 속도 1.01배 → 7.77배까지 올라갑니다.

cp -r examples/algotune_knn /tmp/algotune_knn
cd /tmp/algotune_knn
git init -q && git add -A && git commit -qm baseline
arbor
실습 3난이도 ★★☆ 중급

아이디어 참신성을 검색으로 점검한다

실험에 자원을 붓기 전에, 그 아이디어가 이미 있는 연구인지 alphaXiv로 빠르게 봅니다(Python 3.12+, 키 불필요). "novel / 부분중복 / 선행연구 있음" 판정과 가장 가까운 논문을 돌려줍니다.

arbor idea-check "멀티홉 QA를 개체-관계 스크래치패드로 개선"
실습 4난이도 ★★☆ 중급

내 벤치마크를 Arbor에 물려 본다

대상 폴더에 실행 가능한 평가 스크립트(run_eval.py), dev·test 데이터, 깨끗한 git 저장소를 준비하면 끝. 작게 시작하려면 사이클을 3개로 제한합니다.

arbor --cwd ./benchmark --config research_config.yaml --max-cycles 3
실습 5난이도 ★★★ 고급

도메인 플러그인을 한 줄로 갈아끼운다

YAML 한 파일이 평가 규약·보호 폴더·필수 산출물·타임아웃을 통째로 바꿉니다. Kaggle/MLE 모드는 plugin: mle_kaggle 한 줄이면 됩니다. 직접 새 도메인용 플러그인을 써 보면 Arbor의 확장 설계가 손에 잡힙니다.

# research_config.yaml
plugin: mle_kaggle   # 데이터 보호·제출 경로·24h 예산이 한꺼번에 적용
실습 6난이도 ★★★ 고급

키 없이 Claude Code 안에서 Arbor를 굴린다

구독 모델만 있고 API 키가 없을 때의 경로입니다. 스킬 설치 + MCP 등록을 플러그인 한 방으로 끝내고, 코딩 에이전트 안에서 /arbor-research-agent를 부릅니다.

claude plugin marketplace add RUC-NLPIR/Arbor
claude plugin install arbor   # 스킬 + 'arbor mcp' 도구 동시 등록

9관련 기술 심화 학습 로드맵

"Arbor를 제대로 이해하려면 알아야 할 것들을 4주로 나눴다."

주차주제학습 자료 / 키워드
1주차에이전트 기초 — ReAct·도구 호출ReAct 논문, function calling, src/core/agent.py 읽기
2주차트리 탐색 + 평가 설계MCTS/빔서치 개념, train/val/test 분리, 과적합, idea_tree.py
3주차git 심화 — worktree·브랜치 전략git worktree 실습, 브랜치 병합/리베이스, coordinator/tools/worktree.py
4주차멀티에이전트 + MCP 확장LiteLLM, MCP 서버 만들기, EventBus 패턴, src/mcp/server.py·events/bus.py

10핵심 키워드 사전

"이 문서와 저장소에서 반복되는 용어를 한곳에 모았다."

용어의미
자율 연구 에이전트목표만 주면 가설 제안·실험·평가·개선을 스스로 반복하는 AI
아이디어 트리(Idea Tree)가설을 부모-자식으로 키우는 나무 모양의 장기 기억(디스크 저장)
arbor cycleOBSERVE·IDEATE·SELECT·DISPATCH·BACKPROP·DECIDE 6단계 반복 루프
Coordinator무엇을 탐색할지 정하고 실험을 배정하는 연구 감독(코드는 안 짬)
Executor아이디어 1건을 코드로 구현·실행하는 연구 엔지니어(여럿 병렬)
역전파(backpropagation)실험에서 얻은 교훈을 조상 노드로 끌어올려 다음 아이디어에 물려줌
worktree실험마다 분리된 git 작업 폴더 — 병렬·격리·되돌리기 공짜
dev / held-out test연습용/채점용 데이터 분리 — 자기기만(과적합)을 막는 핵심 규율
merge_thresholdtest 점수가 이 폭 이상 올라야만 줄기에 병합하는 합격선
ReAct"생각→도구→관찰"을 반복하는 에이전트 기본 루프
LiteLLM여러 LLM 공급자를 한 함수로 호출하게 해 주는 어댑터
MCP에이전트와 도구를 잇는 표준 규격(USB 같은 것)
리서치 계약서접수 대화로 목표·지표·예산을 한 화면에 확정한 합의문
interaction_mode사람 개입 수위: auto·direction·review·collaborative
claw-codeClaude Code의 오픈소스 Rust 재구현 — Arbor CLI의 기반

11참고 링크