왜 만들었나
정기 요약·조사 같은 개인 자동화를 매번 프롬프트와 스크립트로 짜기 번거롭고, API 키 과금 없이 구독 계정으로 안전하게 돌릴 방법이 필요했다. 발송·주문처럼 되돌리기 어려운 작업은 사람이 확인한 뒤에만 실행되어야 했다.
주요 기능
- 자연어 요청을 에이전트 스펙(역할·도구·스케줄·실행 위치)으로 자동 변환
- LLM 없이 코드만으로 담당 에이전트·중요도(P0~P3)·모델을 정하는 판정기 Jev
- 발송·주문·예약이 들어간 작업은 계획 → 승인 → 실행 2단계
- 결과를 체크리스트로 검증하고 미달이면 같은 세션으로 1회 보완
- 사용 한도 초과 시 notBefore 이후 자동 재시도
숫자로 보면
어떻게 동작하나
자연어로 에이전트 생성
사용자 요청과 사용 가능한 도구·MCP 목록을 프롬프트로 묶어 에이전트 스펙 JSON으로 컴파일한다.
runner/src/core/compiler.js태스크 큐 구독
웹앱이 Firestore에 쌓은 queued 태스크를 러너가 구독해 자기 실행 위치(local/github) 담당분만 가져간다.
runner/src/core/orchestrator.jsJev 판정
route → rules → ml → agent → memory → capability → longInput → budget 단계를 거쳐 모델 등급과 우선순위를 정하고 이유를 trace로 남긴다.
runner/src/core/jev.js프롬프트 조립
역할·컨텍스트·장기 메모리·가드레일·단계·출력 형식·체크리스트 레이어를 쌓고 단계별 도구 권한을 나눈다.
runner/src/core/harness.jsCLI 실행과 검증
claude -p / gemini -p를 자식 프로세스로 실행하고, 결과를 체크리스트로 검증해 미달이면 읽기 전용으로 1회 보완한다.
runner/src/core/executor.js결과 기록과 학습
결과와 판정·검증 이유를 저장하고, 쌓인 기록으로 로컬 분류기를 주기적으로 재학습한다.
runner/src/core/jev-ml/train.js
구조
Firestore가 에이전트·태스크 큐·러너 하트비트를 저장하고, 상시 실행되는 맥미니 Node 러너(launchd)와 30분마다 도는 GitHub Actions 러너가 큐를 처리한다.
- Firestore → GitHub Actions 러너: 대기 태스크 조회
- 맥미니 러너 → Jev + 하네스: 트리아지
- Claude Code / Gemini CLI → Firestore: 결과 기록
비공개 저장소라 소스 코드 링크와 코드 발췌는 싣지 않았습니다.