bash 하나, subprocess 하나, 히스토리 하나: SWE-agent/mini-swe-agent v2.4.6의 190줄 에이전트 루프 해부와 박스 검증

2026년 11월 9일(월, Asia/Seoul) 오전 11시 48분 기준 GitHub Trending Python 일간 목록 11위에 SWE-agent/mini-swe-agent가 올라와 있습니다. 해당 페이지 기준 오늘 붙은 스타는 +86입니다. 같은 시각 GitHub API 기준 스타 9,424, forks 1,298, open_issues_count 140(이슈와 PR 합계)이고, 라이선스는 MIT(Copyright 2025 Kilian A. Lieret, Carlos E. Jimenez)입니다. 저장소는 2025-06-28에 만들어졌습니다.

최신 릴리스이자 PyPI 최신 버전은 v2.4.6(GitHub 릴리스 2026-07-23 12:12 KST, requires_python >=3.10)입니다. 이 글에서 읽은 기본 브랜치 HEAD는 04d809ce(2026-09-03 14:05 KST, ProgramBench 프롬프트 수정 병합)이고, git describe 결과는 v2.4.6-3-g04d809ce입니다. 릴리스 이후 커밋이 3개 더 있지만 패키지 버전은 그대로 2.4.6입니다.

SWE-bench와 SWE-agent를 만든 프린스턴·스탠퍼드 팀이 “에이전트를 100배 단순하게 만들어도 거의 같은 성능이 나올까”라는 질문으로 만든 프로젝트입니다. 도구는 bash 하나, 실행은 명령마다 새 subprocess, 히스토리는 append만 하는 메시지 리스트입니다. README는 SWE-bench Verified에서 74%가 넘는 점수를 낸다고 적고 있습니다. 이 수치는 모델에 따라 달라지는 값이며, 이 글에서 재현하지는 않았습니다. 대신 박스에서 테스트 스위트와 결정적(deterministic) 모델로 에이전트 루프 전체를 돌려 동작을 확인했습니다.

bash 하나, subprocess 하나, 히스토리 하나: SWE-agent/mini-swe-agent · MIT · v2.4.6 · 9,424★
bash 하나, subprocess 하나, 히스토리 하나: SWE-agent/mini-swe-agent · MIT · v2.4.6 · 9,424★

한눈에 보는 핵심 사실

항목 값 (이 글에서 확인)
저장소 SWE-agent/mini-swe-agent (홈페이지 mini-swe-agent.com)
버전 v2.4.6 (PyPI·GitHub 릴리스). 읽은 HEAD 04d809ce = v2.4.6 + 3커밋
라이선스 MIT
스타 / 포크 9,424 / 1,298 (2026-11-09 11:49 KST, GitHub API)
오늘의 트렌딩 Python 일간 11위, +86★ (11:48 KST)
언어·런타임 Python ≥3.10. 박스 검증은 Python 3.13.5
핵심 의존성 litellm, pydantic≥2, jinja2, typer, rich, textual, prompt_toolkit, datasets, openai, tenacity
선택 extras [dev], [modal](modal·boto3), [contree], [full](swe-rex 포함)
CLI mini(로컬 대화형), mini-extra(config · inspect · swebench · swebench-single · programbench)
궤적 포맷 trajectory_format: mini-swe-agent-1.1 JSON
GitHub Open Graph 카드 (공식, 2026-11-09 수집)
GitHub Open Graph 카드 (공식, 2026-11-09 수집)

무엇이고, 왜 지금 다시 뜨나

mini-swe-agent는 “코딩 에이전트 스캐폴드”를 거의 지워 버린 실험입니다. 2024년의 SWE-agent는 파일 뷰어, 편집기, 검색 같은 에이전트 전용 도구(ACI)를 공들여 설계했습니다. mini는 반대로 갑니다. 모델이 충분히 강해졌으니 cat, grep, sed -i, python -m pytest 같은 평범한 셸 명령만 주고, 나머지는 모델에게 맡깁니다.

README 상단 공지가 지금의 위치를 보여 줍니다. Ramp의 SWE-Bench가 mini를 하네스로 쓰고, Datacurve의 DeepSWE 평가에서 Claude Code와 Codex보다 높게 나왔다는 링크, 그리고 새 벤치마크 ProgramBench 실행 경로(mini-extra programbench)가 걸려 있습니다. 이런 비교 결과는 각 외부 블로그의 주장이고 여기서 검증하지 않았습니다. 다만 “모델 비교용 기준 스캐폴드”라는 역할은 코드 구조에서 그대로 확인됩니다. SWE-bench 공식 리더보드의 bash only 부문이 이 에이전트로 여러 LM을 같은 조건에서 비교한다는 설명도 README에 있습니다.

이번 주 트렌딩은 스킬 카탈로그, 컨텍스트 압축 프록시, 멀티 에이전트 런타임처럼 스캐폴드를 두껍게 만드는 쪽이 주류였습니다. mini는 그 반대편에서 “얇은 스캐폴드가 어디까지 버티는가”를 보여 주는 기준점이라, 비교 대상으로 다시 불려 나오는 흐름으로 읽힙니다.

저장소 구조

소스는 src/minisweagent/ 아래 Python 5,349줄(박스에서 wc -l)입니다. 이 가운데 실제 에이전트 루프는 agents/default.py 한 파일, 190줄(공백·주석·독스트링 구분선 제외 약 153줄)입니다. README의 “some 100 lines”는 이 핵심 클래스를 가리키는 표현이고, 실제 파일은 그보다 조금 깁니다.

경로 줄 수 역할
agents/default.py 190 DefaultAgent, AgentConfig. run/step/query/execute_actions/serialize/save
agents/interactive.py 209 human / confirm / yolo 모드, whitelist_actions, confirm_exit
environments/local.py 92 Popen(shell=True) + 타임아웃 시 프로세스 그룹 SIGKILL, 제출 감지
environments/docker.py 161 컨테이너 1개를 띄워 두고 docker exec. MSWEA_DOCKER_EXECUTABLE로 podman 지정
environments/singularity.py, extra/bubblewrap.py, extra/contree.py, extra/swerex_*.py 80–151 HPC·샌드박스·원격 실행 백엔드
models/litellm_model.py 164 기본 모델 클래스. 네이티브 tool calling으로 bash 도구 1개
models/litellm_textbased_model.py 48 정규식 ```mswea_bash_command 블록에서 명령 추출(레거시 방식)
models/test_models.py 269 DeterministicModel 등 결정적 모델. 테스트·재현에 사용
run/mini.py, run/hello_world.py 109 / 42 CLI 진입점과 최소 예제
run/benchmarks/swebench.py, programbench.py 275 / 193 배치 실행, preds.json 기록
run/utilities/inspector.py 316 Textual 기반 궤적 브라우저
config/*.yaml – mini.yaml, default.yaml, mini_textbased.yaml, benchmarks/swebench*.yaml, programbench.yaml

어떻게 동작하나: 루프 하나와 예외 몇 개

DefaultAgent.run(task)는 system·user 두 메시지를 Jinja2(StrictUndefined)로 렌더링해 넣은 뒤 while True로 step()을 반복합니다. step()은 execute_actions(query()) 한 줄입니다. query()는 먼저 한도를 검사하고, 모델 응답을 메시지에 붙이고, 응답의 extra.actions를 환경에서 실행합니다. 실행 결과는 observation_template로 렌더링되어 다시 user(또는 tool) 메시지로 붙습니다. 마지막 메시지의 role이 exit가 되면 루프가 끝납니다.

흐름 제어는 전부 예외로 표현됩니다. 이 설계 덕분에 상태 기계 코드가 따로 없습니다. 매 스텝의 finally에서 save(output_path)가 불리기 때문에, 중간에 죽어도 그 시점까지의 궤적이 디스크에 남습니다.

DefaultAgent.run() 루프와 예외 기반 종료 조건 (agents/default.py 재구성)
DefaultAgent.run() 루프와 예외 기반 종료 조건 (agents/default.py 재구성)
예외 / 종료 상태 발생 조건 루프의 반응
FormatError 툴콜 없음, 알 수 없는 도구, 인자 JSON 파싱 실패 format_error_template 메시지를 붙이고 계속. 연속 max_consecutive_format_errors(기본 3)회면 RepeatedFormatError로 종료. 실패한 호출 비용도 합산
LimitsExceeded 0 < step_limit <= n_calls 또는 0 < cost_limit <= cost exit 메시지, 종료
TimeExceeded wall_time_limit_seconds 경과 exit 메시지, 종료
Submitted 명령 출력 첫 줄이 COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT이고 returncode 0 나머지 출력 줄을 submission으로 저장하고 종료
명령 타임아웃 환경의 timeout(local 기본 30초, swebench.yaml 60초) 초과 예외가 아니라 관찰값으로 돌려줌: returncode -1 + exception_info
그 밖의 Exception 모델 API 오류 등 exit 메시지(traceback 포함)를 남기고 다시 raise

한도 비교가 <=라는 점은 실무에서 의미가 있습니다. cost_limit: 3.0이면 누적 비용이 정확히 3.0에 닿은 다음 호출 직전에 멈춥니다. 아래 스모크 테스트에서 이 동작을 그대로 관찰했습니다.

상태 유지 셸을 버린 이유

대부분의 에이전트는 셸 세션 하나를 띄워 놓고 명령을 붙여 넣습니다. 공식 FAQ는 이 방식의 문제를 세 가지로 정리합니다. 명령이 언제 끝났는지 알기 어렵고(PID 감시, 프롬프트 감지 같은 휴리스틱이 모두 불안정), 나쁜 명령 하나가 세션을 죽일 수 있고, 인터럽트가 셸 자체를 망가뜨려 이후 출력까지 오염시킵니다.

mini의 LocalEnvironment는 명령마다 subprocess.Popen(shell=True, start_new_session=True)을 띄우고 communicate(timeout)으로 기다립니다. 타임아웃이 나면 os.killpg로 프로세스 그룹 전체를 SIGKILL해 고아 프로세스를 남기지 않습니다. 샌드박스로 옮길 때도 이 한 줄을 docker exec로 바꾸면 끝이라, 대규모 병렬 평가가 단순해집니다.

대가는 분명합니다. cd와 export가 다음 명령으로 이어지지 않습니다. 프롬프트(mini.yaml)가 “매 액션은 새 서브셸에서 실행된다, 필요하면 cd /path && …처럼 앞에 붙여라”라고 모델에게 명시하는 이유입니다. 가상환경 활성화가 필요한 프로젝트라면 SWE-bench 설정처럼 BASH_ENV로 rc 파일을 자동 로드하게 만드는 편이 안전합니다.

상주 셸 세션 대신 명령마다 독립 subprocess를 쓰는 이유 (docs/faq.md 재구성)
상주 셸 세션 대신 명령마다 독립 subprocess를 쓰는 이유 (docs/faq.md 재구성)

교체 가능한 세 부품: Agent · Model · Environment

세 부품은 src/minisweagent/__init__.py의 프로토콜로 느슨하게 묶여 있습니다. CLI에서는 --agent-class, --model-class, --environment-class에 짧은 이름이나 전체 import 경로를 넘기면 됩니다. 설정은 YAML 여러 개와 key=value를 재귀 병합(recursive_merge)합니다.

부품 선택지 (v2.4.6) 메모
Agent default, interactive interactive는 human(/u) · confirm(/c) · yolo(/y) 모드 전환. confirm 모드에서 whitelist_actions 정규식에 맞는 명령은 확인 없이 실행
Model litellm(기본), litellm_textbased, litellm_response, openrouter(+textbased·response), portkey(+response), requesty, deterministic 모델 이름에 anthropic·claude·sonnet·opus가 들어가면 set_cache_control: default_end를 자동 적용. v2부터 네이티브 tool calling이 기본
Environment local, docker(podman 겸용), singularity/apptainer, bubblewrap, contree, swerex_docker, swerex_modal SWE-bench 기본은 docker. x86 리눅스 이미지 전제
교체 가능한 Agent · Model · Environment 클래스 (v2.4.6)
교체 가능한 Agent · Model · Environment 클래스 (v2.4.6)

v2에서 바뀐 것 (마이그레이션 시 체크)

영역 v1 v2
액션 파싱 트리플 백틱 블록을 정규식으로 추출 네이티브 tool calling(bash 도구)이 기본. 텍스트 방식은 *_textbased 클래스로 남음
궤적 메시지 role·content를 손으로 만든 메시지 모델의 네이티브 출력을 그대로 두고 extra 필드만 추가
템플릿 키 action_observation_template observation_template로 이름 변경, format_error_template 등
예외 NonTerminatingException / TerminatingException InterruptAgentFlow 기반으로 통합, ExecutionTimeoutError 제거
제거된 기능 – mini -v 비주얼 UI, anthropic 모델 클래스(litellm 사용), ANTHROPIC_API_KEYS 로테이션, github_issue 런 스크립트, MSWEA_MODEL_API_KEY
추가 – 멀티모달 입력, swerex_modal 환경, 응답 API(/response) 모델 클래스

설치와 실행

목적 명령
바로 실행 pip install mini-swe-agent 후 mini (또는 uvx mini-swe-agent)
개발 설치 git clone https://github.com/SWE-agent/mini-swe-agent && cd mini-swe-agent && pip install -e '.[dev]'
기본 모델·키 설정 mini-extra config setup (전역 .env는 ~/.config/mini-swe-agent/.env)
로컬 작업 mini -m anthropic/claude-sonnet-4-5-20250929 -t "테스트 실패 원인을 찾아 고쳐줘"
확인 없이 실행 mini -y … (yolo, 격리 환경에서만 권장)
비용 한도 mini -l 1.5 …, 전역 한도는 MSWEA_GLOBAL_COST_LIMIT / MSWEA_GLOBAL_CALL_LIMIT
설정 덮어쓰기 mini -c mini.yaml -c model.model_kwargs.temperature=0 (-c를 쓰면 기본 파일을 명시적으로 다시 넣어야 함)
SWE-bench 배치 mini-extra swebench -m <model> --subset verified --split test -w 4 -o out/
단일 인스턴스 디버그 mini-extra swebench-single --subset verified --split test -m <model> -i sympy__sympy-15599
채점 sb-cli submit swe-bench_verified test --predictions_path out/preds.json --run_id my-run
궤적 보기 mini-extra inspect out/

Python에서 직접 쓰면 README 예시처럼 세 줄입니다.

from minisweagent.agents.default import DefaultAgent
from minisweagent.models.litellm_model import LitellmModel
from minisweagent.environments.local import LocalEnvironment

agent = DefaultAgent(LitellmModel(model_name="..."), LocalEnvironment(), **agent_config)
result = agent.run("Write a sudoku game")   # {"exit_status": ..., "submission": ...}

여기서 agent_config에는 최소한 system_template, instance_template가 있어야 합니다. 보통 config/mini.yaml의 agent 섹션을 불러 넘깁니다.

공식 문서 이미지 docs/assets/mini.png: confirm 모드에서 명령 실행 전 확인을 받는 화면
공식 문서 이미지 docs/assets/mini.png: confirm 모드에서 명령 실행 전 확인을 받는 화면

박스 스모크 테스트 (실측)

2026-11-09 11:50–11:55 KST, x86_64 리눅스 박스(8코어, Python 3.13.5 venv)에서 pip install -e '.[dev]'로 v2.4.6을 설치했습니다. GPU, Docker, 모델 API 키는 없습니다. 그래서 실제 LLM 호출이나 SWE-bench 채점은 하지 않았고, 아래 결과가 전부입니다.

항목 명령 결과
버전 mini --help “This is mini-swe-agent version 2.4.6.” 출력, 옵션 -m -t -y -l -c -o와 Advanced --model-class --agent-class --environment-class --exit-immediately
서브커맨드 mini-extra --help config · inspect(i, inspector) · swebench · swebench-single · programbench
테스트 (첫 시도) 저장소 밖에서 pytest repo/tests 테스트가 src/minisweagent/config/default.yaml 같은 상대 경로를 써서 158 errors. 저장소 루트에서 돌려야 함
테스트 저장소 루트에서 pytest tests -n 8 545 passed, 61 skipped, 2 errors, 11.96s. 오류 2건은 test_contree.py, test_swerex_modal.py의 import 실패(modal·contree extras 미설치)
에이전트 루프 E2E DeterministicModel 4응답 + LocalEnvironment, mini.yaml의 agent 템플릿 버그 있는 calc.py(a - b)를 읽기 → 재현(-1) → sed 수정(5) → 제출. exit_status Submitted, 4 calls, 메시지 10개, 0.035초. submission은 git diff 원문
비용 한도 같은 시나리오, 응답마다 cost 1.0(헬퍼 기본값) 3번째 호출 뒤 누적 3.0 = cost_limit 3.0 → LimitsExceeded, 제출 전에 중단
스텝 한도 step_limit=2 LimitsExceeded, calls 2
명령 타임아웃 LocalEnvironment(timeout=1)에서 sleep 5 관찰값: “Command ‘sleep 5’ timed out after 1 seconds”, returncode -1. 루프는 계속되어 다음 응답으로 Submitted
궤적 파일 output_path 저장 trajectory_format mini-swe-agent-1.1, info 키 model_stats · config · mini_version · exit_status · submission
설정 검증 AgentConfig(..., max_iterations=50) 오류 없이 통과하고 필드 목록에는 없음. 알 수 없는 키는 조용히 무시됨
박스 실측(2026-11-09 11:50–11:55 KST): pytest 545 passed, 결정적 모델 E2E Submitted, 한도·타임아웃 동작
박스 실측(2026-11-09 11:50–11:55 KST): pytest 545 passed, 결정적 모델 E2E Submitted, 한도·타임아웃 동작

마지막 줄은 실무 함정입니다. mini-extra swebench --help의 예시 문구에는 -c agent.max_iterations=50이 나오지만, v2.4.6의 AgentConfig에는 그 필드가 없습니다. 실제로 스텝을 제한하려면 agent.step_limit을 써야 합니다. pydantic 기본 설정이 추가 키를 무시하기 때문에 오타나 옛 키를 넣어도 경고 없이 지나갑니다. 배치 평가를 걸기 전에 저장된 궤적의 info.config.agent를 열어 실제 적용값을 확인하는 습관이 필요합니다.

SWE-bench 배치는 이렇게 돈다

run/benchmarks/swebench.py는 HuggingFace 데이터셋(lite·verified·full·multimodal·multilingual·smith, 또는 임의 경로)을 읽고, 인스턴스마다 docker.io/swebench/sweb.eval.x86_64.<id>:latest 이미지를 띄웁니다(Singularity면 docker:// 접두). 설정은 step_limit 250, cost_limit 3.0, cwd /testbed, 명령 타임아웃 60초, 인터프리터 bash -c와 BASH_ENV=/root/.bashrc(conda testbed 환경 자동 활성화)입니다. 결과는 preds.json에 인스턴스 단위로 갱신되므로 중단해도 이어서 돌릴 수 있고, --redo-existing으로만 다시 덮어씁니다.

mini는 패치를 만들 뿐 채점은 하지 않습니다. sb-cli(클라우드, 문서상 무료이며 보통 20분 안에 결과)나 로컬 SWE-bench 하네스로 따로 채점합니다. SWE-bench 프롬프트는 “패치 생성·확인과 제출은 반드시 별도 명령”을 요구하는데, 로컬 스모크에서 쓴 echo COMPLETE… && git diff 같은 결합은 이 설정에서는 금지 패턴입니다.

SWE-bench 배치 파이프라인: 데이터셋 → 인스턴스별 컨테이너 → mini 루프 → preds.json → 별도 채점
SWE-bench 배치 파이프라인: 데이터셋 → 인스턴스별 컨테이너 → mini 루프 → preds.json → 별도 채점

비슷한 도구와 비교

항목 mini-swe-agent SWE-agent OpenHands Aider Claude Code / Codex CLI
핵심 철학 bash만, 선형 히스토리, 스캐폴드 최소화 에이전트 전용 도구(ACI) 설계 범용 개발 에이전트 플랫폼 git 중심 페어 프로그래밍 제품형 코딩 에이전트
도구 표면 bash 1개 파일 뷰어·편집기·검색 등 다수 셸·브라우저·편집 등 다수 편집 포맷 + 저장소 맵 다수의 내장 도구, MCP
실행 모델 명령마다 독립 subprocess / docker exec 상태 유지 셸 세션(SWE-ReX) 샌드박스 런타임 사용자 로컬 사용자 로컬 + 승인 정책
코드 규모 감 핵심 루프 1파일 190줄 훨씬 큼 대형 모노레포 중형 대형
모델 범위 litellm 경유 거의 전부, 텍스트 파싱 폴백 litellm 다수 다수 주로 자사 모델
평가·연구 적합성 매우 높음(궤적=메시지, 결정적 모델 내장) 높음 중간 낮음 낮음(폐쇄 요소)
일상 사용 편의 CLI 단순, IDE 통합 없음 보통 웹 UI 높음 높음
라이선스 MIT MIT 오픈소스(코어) Apache-2.0 Claude Code 독점 / Codex CLI Apache-2.0

같은 팀의 공식 가이드는 명확합니다. 빠른 로컬 CLI, 단순한 제어 흐름, 안정적인 샌드박스 평가, 특정 스캐폴드에 과적합하지 않은 FT·RL 데이터가 필요하면 mini를, 도구 인터페이스나 히스토리 프로세서 자체를 실험하려면 SWE-agent를 쓰라고 권합니다.

공식 README GIF(inspector.gif)의 한 프레임: 궤적 브라우저 mini-extra inspect
공식 README GIF(inspector.gif)의 한 프레임: 궤적 브라우저 mini-extra inspect

트레이드오프

얻는 것 잃는 것
궤적과 프롬프트가 동일해 디버깅·재현·파인튜닝 데이터 추출이 쉬움 히스토리 압축이 없어 긴 작업에서 컨텍스트와 비용이 선형으로 증가
도구 스키마가 하나라 툴콜이 약한 모델도 textbased로 구동 가능 파일 편집이 sed·heredoc에 의존해 대형 리팩터링에서 실수 여지
독립 subprocess로 타임아웃·인터럽트·샌드박스 전환이 단순 cd·export·가상환경 상태를 매 명령 다시 실어야 함
스캐폴드 영향이 작아 모델 자체 능력 비교에 적합 제품형 에이전트의 계획·서브에이전트·IDE 통합 같은 편의 기능 부재
5천 줄 규모라 사내 포크·감사가 현실적 안전장치는 confirm 모드와 한도뿐. 격리는 사용자가 환경 선택으로 책임

주의할 점과 한계

구분 내용
보안 local 환경은 호스트에서 shell=True로 실행합니다. yolo 모드(-y)는 컨테이너·bubblewrap 같은 격리 환경에서만 쓰는 편이 맞습니다
설정 오타 알 수 없는 키가 무시됩니다(max_iterations 실측). -c를 주면 기본 YAML이 빠지므로 -c mini.yaml을 함께 넣어야 합니다
비용 한도 기본 cost_limit 3.0, 비교는 <=. 로컬 모델처럼 비용이 0으로 잡히면 비용 한도가 사실상 동작하지 않으니 step_limit이나 wall_time_limit_seconds를 따로 거세요
테스트 실행 테스트가 상대 경로를 쓰므로 저장소 루트에서 실행해야 합니다. modal·contree 테스트는 extras가 있어야 수집됩니다
벤치마크 수치 “Verified 74% 이상”, DeepSWE 비교 등은 모델·설정에 따라 달라지는 외부 결과입니다. 이 글은 재현하지 않았습니다
아키텍처 SWE-bench 이미지는 x86 리눅스 전제라 Apple Silicon 등에서는 그대로 돌지 않을 수 있습니다
릴리스 주기 최신 릴리스 v2.4.6(7월) 이후 main에 3커밋. 최신 수정이 필요하면 소스 설치

어디에 쓰면 좋은가

시나리오 추천 구성
사내 모델·파인튜닝 체크포인트의 코딩 능력 비교 mini-extra swebench + docker, 같은 swebench.yaml로 모델만 교체, sb-cli 채점
RL·SFT용 에이전트 궤적 수집 궤적 JSON이 곧 메시지 시퀀스. DeterministicModel로 파이프라인을 먼저 결정적으로 검증
CI에서 실패 테스트 자동 수정 시도 docker 또는 bubblewrap 환경, step_limit·wall_time_limit_seconds 고정, 결과는 PR 제안으로만
로컬 LLM으로 가벼운 터미널 도우미 litellm_textbased + 로컬 서버, confirm 모드 + whitelist_actions로 읽기 명령만 자동 승인
자체 에이전트 설계의 출발점 DefaultAgent를 상속해 query()·execute_actions()에 훅 추가(컨텍스트 압축, 정책 검사 등)

정리

mini-swe-agent의 가치는 기능의 양보다 무엇을 빼도 되는지 보여 준 기준선에 있습니다. 루프 하나, 도구 하나, append만 하는 히스토리로 상위권 SWE-bench 점수를 낸다면, 두꺼운 스캐폴드가 더하는 가치는 그 기준선 위에서 따로 측정해야 합니다. 박스에서는 545개 테스트와 결정적 E2E 루프가 문서대로 돌았고, 비용 한도의 <= 비교와 알 수 없는 설정 키 무시처럼 배치 평가 전에 알아 둘 동작도 확인됐습니다. 모델을 고르거나, 궤적 데이터를 모으거나, 자기 에이전트를 만들기 전에 한 번 돌려 볼 만한 저장소입니다.