
아이디어를 시도하고, 측정하고, 작동하면 유지하고, 아니면 버리고, 영원히 반복하라.
이것이 pi-autoresearch의 철학입니다. Karpathy의 autoresearch에서 영감을 받아, pi AI 에이전트가 무한히 실험을 반복하며 최적화하는 시스템입니다.
1) 무엇을 최적화할 수 있나?
모든 것. pi-autoresearch는 도메인에 독립적입니다:
| 도메인 | 메트릭 | 명령어 |
|---|---|---|
| 테스트 속도 | 초 ↓ | pnpm test |
| 번들 크기 | KB ↓ | pnpm build && du -sb dist |
| LLM 학습 | val_bpb ↓ | uv run train.py |
| 빌드 속도 | 초 ↓ | pnpm build |
| Lighthouse | perf score ↑ | lighthouse http://localhost:3000 |
2) 아키텍처: Extension + Skill
pi-autoresearch는 두 계층 구조를 사용합니다:
┌──────────────────────┐ ┌──────────────────────────┐
│ Extension (global) │ │ Skill (per-domain) │
│ │ │ │
│ run_experiment │◄────│ command: pnpm test │
│ log_experiment │ │ metric: seconds (lower) │
│ widget + dashboard │ │ scope: vitest configs │
│ │ │ ideas: pool, parallel… │
└──────────────────────┘ └──────────────────────────┘
Extension (도메인 독립적 인프라)
| 도구 | 설명 |
|---|---|
init_experiment | 세션 설정 — 이름, 메트릭, 단위, 방향 |
run_experiment | 명령 실행, 시간 측정, 출력 캡처 |
log_experiment | 결과 기록, 자동 커밋, 위젯/대시보드 업데이트 |
Skill (도메인 지식)
autoresearch-create 스킬이 목표, 명령, 메트릭, 파일 범위를 수집하고 세션을 시작합니다.
3) 두 개의 세션 파일
pi-autoresearch는 두 파일로 세션을 유지합니다. 컨텍스트 리셋이나 재시작 후에도 계속할 수 있습니다.
autoresearch.jsonl
모든 실행의 로그 — 한 줄에 하나씩:
{"timestamp":"2026-03-16T14:00:00Z","metric":42.3,"status":"kept","commit":"abc123","description":"parallelize tests"}
{"timestamp":"2026-03-16T14:05:00Z","metric":41.8,"status":"kept","commit":"def456","description":"add test pooling"}
{"timestamp":"2026-03-16T14:10:00Z","metric":45.2,"status":"discarded","commit":"--","description":"cache invalidation broke"}
- 재시작 생존: 에이전트가 파일을 읽어 세션을 재개
- 컨텍스트 리셋 생존:
autoresearch.md가 시도된 것들을 캡처 - 인간이 읽기 가능: 언제든 열어서 전체 기록 확인
- 브랜치 인식: 각 브랜치가 자체 세션
autoresearch.md
세션의 심장. 컨텍스트 없는 새 에이전트도 이 파일만 읽으면 루프를 계속할 수 있습니다.
# Autoresearch: 테스트 속도 최적화
## Objective
vitest 테스트 스위트 실행 시간을 60초에서 30초 미만으로 단축.
## Metrics
- **Primary**: seconds (lower is better)
- **Secondary**: test_count, pass_rate
## How to Run
`./autoresearch.sh` — outputs `METRIC name=number` lines.
## Files in Scope
- `vitest.config.ts` — 테스트 설정
- `src/**/*.test.ts` — 테스트 파일들
## Off Limits
- `src/lib/` — 프로덕션 코드
## Constraints
- 모든 테스트 통과 필수
- 새 의존성 추가 금지
## What's Been Tried
- ✅ 병렬 실행 (`pool: 'threads'`) — 60s → 45s
- ✅ 테스트 풀링 — 45s → 38s
- ❌ 캐시 무효화 — 테스트 실패, revert
4) 사용법
설치
pi install https://github.com/davebcn87/pi-autoresearch
시작
/skill:autoresearch-create
에이전트가 목표, 명령, 메트릭, 파일 범위를 묻거나 컨텍스트에서 추론합니다. 그 다음:
- 브랜치 생성
autoresearch.md와autoresearch.sh작성- 베이스라인 실행
- 즉시 루프 시작
루프
에이전트가 자율적으로 실행: 편집 → 커밋 → run_experiment → log_experiment → keep 또는 revert → 반복. 중단될 때까지 멈추지 않습니다.
모니터링
| 방법 | 설명 |
|---|---|
| 위젯 | 에디터 위에 항상 표시: 🔬 autoresearch 12 runs 8 kept │ best: 42.3s |
/autoresearch | 전체 대시보드 |
Escape | 언제든 중단하고 요약 요청 |
키보드 단축키
| 단축키 | 설명 |
|---|---|
Ctrl+X | 대시보드 확장/축소 |
Ctrl+Shift+X | 전체 화면 오버레이 |
5) 루프 규칙
무한 반복. “계속할까요?”라고 절대 묻지 않습니다.
| 규칙 | 설명 |
|---|---|
| Primary metric is king | 개선 → keep. 악화/동일 → discard |
| 단순함이 낫다 | 동일 성능에 코드 제거 = keep. 작은 이득에 복잡성 = discard |
| 스래싱 금지 | 같은 아이디어를 반복해서 revert? 구조적으로 다른 것 시도 |
| 충돌 처리 | 자명하면 수정, 아니면 로그하고 진행 |
| 막히면 깊이 생각 | 소스 파일 재읽기, 프로파일링 데이터 연구. 깊은 이해에서 최고의 아이디어가 나옴 |
6) Backpressure Checks (선택)
autoresearch.checks.sh를 만들면 매 벤치마크 후 자동으로 실행:
#!/bin/bash
set -euo pipefail
pnpm test --run
pnpm typecheck
작동 방식:
- 파일이 없으면 기존과 동일 — 루프에 변화 없음
- 파일이 있으면 벤치마크 성공 후 자동 실행
- 실행 시간은 primary 메트릭에 영향 없음
- 실패 시
checks_failed상태로 로그 — 커밋 없음, 변경 revert
7) 아이디어 백로그
복잡하지만 유망한 최적화를 발견하면 **autoresearch.ideas.md**에 추가합니다. 좋은 아이디어가 사라지지 않게.
재개 시(컨텍스트 한계, 충돌) autoresearch.ideas.md를 확인 — 오래된/시도된 항목 제거, 나머지 실험.
8) 설정 (선택)
autoresearch.config.json으로 커스터마이즈:
{
"workingDir": "/path/to/project",
"maxIterations": 50
}
| 필드 | 설명 |
|---|---|
workingDir | 모든 작업의 디렉토리 오버라이드 |
maxIterations | 자동 정지 전 최대 실험 수 |
마치며: “영원히 반복하라”
pi-autoresearch의 핵심은 무한 루프입니다:
“사용자가 몇 시간 자리를 비워도 계속 진행. 중단될 때까지 멈추지 않는다.”
특히 인상적인 점:
- 세션 지속성: 두 파일로 컨텍스트 리셋/재시작 생존
- 도메인 독립적: 테스트, 빌드, 학습, 무엇이든 최적화 가능
- 실시간 모니터링: 위젯 + 대시보드로 진행 상황 확인
- Backpressure checks: 최적화가 정확성을 깨뜨리지 않도록 보장
이 패턴은 AI 에이전트가 자율적으로 개선하는 방식의 좋은 예입니다. 인간이 매 단계를 지시하는 게 아니라, 목표와 메트릭을 설정하면 에이전트가 알아서 반복하며 최적화합니다.