저는 지난 몇 달 동안 "에이전트 주도 자기 개선 하네스(Agent-driven Self-improving Harness)"를 "하네스 학습(Harness Training)"으로 재정의하기 위해 이 프로젝트( https://github.com/workofart/harness-training )를 작업해 왔습니다. 아이디어는 간단합니다. 하네스를 고정된 태스크 LLM(Large Language Model)과 함께 주어진 태스크 환경에 대해 한 번 학습시킵니다. 그러면 태스크 LLM을 어떤 모델로든 교체할 수 있으며, "고정되어 학습된 하네스"를 새로운 태스크 환경의 어떤 태스크 LLM으로도 평가할 수 있습니다. 이것이 일반적인 문제였기 때문에, 저는 일반적인 PyTorch 스타일의 학습 프레임워크를 만들 기회로 삼았습니다. 현재는 태스크 LLM과 인터페이싱하기 위해 모든 OpenAI 호환 API를 사용하여 학습할 수 있으며, Terminal-Bench 또는 SWE-Bench 태스크를 대상으로 학습할 수 있지만, 어떤 태스크 환경도 지원하도록 쉽게 확장할 수 있습니다.
criterion = StrictPareto()
optimizer = GreedyMonotonic()
trainer = Trainer(
config_path="config/train_harness.yaml",
estimator=AgenticEstimator(
backend=CodexAgentBackend(...)
),
criterion=criterion,
optimizer=optimizer,
)
for loss in trainer.epochs(30):
# 베이스라인 대 후보(baseline-vs-candidate) 판결을 기록합니다.
loss.backward()
# 옵티마이저는 후보의 변경 사항을 새로운 베이스라인으로 빠르게 진행(git commit)하거나, 이를 거부(git ref로 보존)합니다.
optimizer.step()
저는 이 여정에 대한 블로그 포스트( https://www.henrypan.com/blog/2026-07-18-harness-training )를 작성했으며, 여기에는 다음 내용이 포함됩니다(이에 국한되지 않음):
- 이 하네스 학습 프레임워크를 사용하여 많은 태스크 LLM 전반의 일반적인 능력을 향상시켜 Terminal Bench 2.0(Terminus Harness)을 이겨낸 결과
- 또한 학습된 내용을 보지 못한 태스크 환경에서의 더 나은 태스크 해결 능력으로 전이(transfer)하는 결과(예: SWE-Bench 태스크에서 학습된 하네스가 Terminal Bench 태스크를 해결하는 경우)
- 이 프레임워크가 구축된 방식
- 프로젝트 초기 버전에서 부족했던 점에 대한 교훈(힌트: 결정론(determinism))
어떤 피드백이든 환영합니다. 감사합니다!