Community연구 & 데이터 분석github.com

research-harness

ML 연구 프로젝트를 위한 실험 하네스를 설정하고 운영합니다. Claude Code가 원격 GPU 서버에서 실행하는 실험의 분할, 평가자, 기준 수치를 동결하고, 주장 계약(claim contract)과 통과 기준(pass bar)을 정의하며, 동결된 평가자만 결과를 생성하고, 게이트(gate) 기반 루프 종료(통과/예산/정체)와 분리형 GPU 실행 및 추적, 동결 파일 수정을 차단하는 훅을 제공합니다. 이 스킬은 논문 실험을 시작하거나 실행할 때, 기준선을 재현할 때, GPU 클러스터에서 훈련 또는 특징 추출 작업을 시작할 때, 아이디어가 킬 테스트를 통과했는지 확인할 때, 또는 사용자가 실험이 표류하거나 숫자를 신뢰할 수 없거나 중간에 멈춘다고 말할 때 사용하세요.

research-harness란 무엇인가요?

research-harness 스킬은 머신러닝 연구 실험의 재현성과 통제력을 보장하도록 설계된 강력한 실험 하네스입니다. 이 스킬은 하네스(공간)/루프(시간)/그래프(경로)라는 세 가지 계층 구조를 통해 실험을 구성하며, 분할, 평가자, 기준 수치 등의 핵심 요소를 동결(frozen)하여 우발적인 변경을 방지합니다. `contract.json`에 연구 주장, 프로토콜, 게이트 조건, 컴퓨팅 규칙을 명시적으로 정의하고, `harness/gate.py`가 통과(PASS), 예산 소진(BUDGET_EXIT), 정체(STALL_EXIT), 재현 실패(REPRO_FAIL) 등 코드 기반의 종료 결정을 내립니다. 주요 기능으로는 분리형 GPU 작업 실행(`harness/launch.py`), 동결 파일 해시 잠금 및 읽기 전용 보호, 이벤트 추적(`traces.jsonl`), 상태 관리(`state.json`), 실수 기록(`lessons.md`) 등이 있습니다. 특히 모든 평가는 동결된 `frozen/eval.py`만 수행하며, 수동 계산이나 지표 재입력을 금지합니다. Claude Code와 원격 GPU 서버 환경에서 작동하며, `research-paper` 스킬(무엇을 실행할지 결정)과 쌍을 이루어 작동합니다. 이 스킬은 연구자와 AI 에이전트가 실험의 무결성을 유지하고, 표류하는 실험을 방지하며, 신뢰할 수 있는 재현 가능한 결과를 생성할 수 있게 해줍니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hardiksharma6555/research-harness-skill/tree/HEAD

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Research harness (연구 하네스)

긴 실험 작업에서 모델이 망가지는 경우는 드뭅니다. 망가지는 것은 그 주변 공간입니다: 조용히 변경된 분할, 수기로 입력된 숫자, 훈련 세트로 새어 들어간 테스트 세트, 이미 실패한 아이디어의 여섯 번째 변형, 계정을 잠그는 폴링 루프. 이 스킬은 이러한 규칙들을 산문이 아닌 파일, 코드, 훅으로 옮겨, 에이전트 엔지니어링의 하네스/루프/그래프 프레임워크를 따릅니다.

실험에 매핑된 세 가지 계층

Harness (공간)

  • contract.json: 주장, 프로토콜, 게이트, 컴퓨팅 규칙. 동결됨.
  • CLAUDE.md: 프로젝트의 짧은 지도, 매뉴얼이 아님.
  • frozen/: 분할 목록, eval.py, 복사된 기준 수치. 해시 잠금 및 읽기 전용.
  • harness/launch.py: 실행을 시작하는 유일한 방법. GPU 허용 목록 및 유휴 규칙을 적용하고 분리형 작업을 시작합니다.
  • traces.jsonl: 이벤트당 한 줄.
  • state.json: 게이트의 결정.
  • lessons.md: 두 번 수정 비용이 발생한 실수.

Loop (시간)

  • L1 검증 루프: frozen/eval.py가 모든 실행을 평가합니다. 메트릭의 유일한 출처입니다.

  • 종료는 코드가 결정 (harness/gate.py):

    • PASS: 후보가 기준을 차이만큼 능가합니다.
    • BUDGET_EXIT: 최대 변형 수에 도달.
    • STALL_EXIT: N 라운드 동안 개선 없음.
    • REPRO_FAIL: 기준선 재구현이 논문과 너무 차이납니다.

    모델은 스스로 "완료"를 선언하지 않습니다.

  • L4 변경 대기: 각 작업은 runs/<id>/DONE을 마지막으로 씁니다. 반복 폴링이 아닌 하나의 백그라운드 와처로 해당 파일을 기다립니다.

Graph (경로) 의도적으로 작게 유지: 분할 → 동결 → 특징 → 기준 실행 (기준선 재구현) → 후보 변형 → 게이트 → 최종 보고. 각 화살표는 파일 계약입니다 (분할 TSV, 특징 DONE.json, 실행의 scores/).

프로젝트 설정

  1. template/을 서버의 프로젝트로 복사합니다. 작업 코드를 src/에 복사합니다 (examples/aigi/는 AI 생성 이미지 탐지를 위한 완전한 작업 예제입니다).
  2. template/contract.example.json에서 contract.json을 작성합니다:
    • claim: 숫자가 포함된 한 문장;
    • protocol: 소스 논문이 정의한 대로 정확히 작성; 명시되지 않은 모든 세부사항과 선택한 내용을 open_questions에 나열;
    • gate: 참조 태그, 논문 값, 여유분, 예산;
    • compute: Python 경로, 노드/GPU 허용 목록, 유휴 규칙.
  3. paths.json (데이터셋 루트)을 작성하고 기준 수치를 frozen/baselines.json에 복사합니다. PDF에서 스크립트로 파싱하여 평균을 다시 확인하고, 절대 손으로 다시 입력하지 마십시오.
  4. 동결: python harness/freeze.py add contract.json frozen/eval.py frozen/baselines.json.
  5. launch.py를 통해 분할을 생성하고, 매니페스트 개수를 읽은 다음 분할을 동결합니다.
  6. Claude Code를 실행하는 머신에 가드 훅을 설치합니다:
    • hooks/research_guard.py를 <project>/.claude/hooks/로 복사;
    • <project>/.claude/research_guard.json을 작성하고, 원격 프로젝트 디렉토리 이름을 project_markers 항목으로 사용;
    • hooks/settings.snippet.json을 <project>/.claude/settings.json에 병합.

운영 규칙

  • 숫자는 result.json 또는 게이트 라인에서만 가져옵니다. 인용하고, 채팅에서 메트릭을 계산하거나 다시 입력하지 마십시오. eval.py가 쓴 파일에 숫자가 없다면 아직 존재하지 않는 것입니다.
  • launch.py를 통해서만 실행을 시작합니다. 재사용된 실행 ID, 변경된 동결 파일 및 사용 중인 GPU를 거부하고, 각 실행에 대한 코드 해시를 기록합니다.
  • 하나의 실행, 하나의 질문. 실행 ID와 태그를 사용하여 테스트 대상을 명시합니다 (gfre_repro_s0, ml_l12-24_k256). 후보 아이디어의 변형은 게이트의 candidate_tag를 공유합니다. 디버깅이나 스모크 테스트 등 다른 모든 것은 다른 태그를 사용하여 예산을 소모하지 않도록 합니다.
  • 게이트를 존중합니다.
    • CONTINUE는 다른 변형을 시도할 수 있음을 의미합니다.
    • BUDGET_EXIT, STALL_EXIT 및 REPRO_FAIL은 중지하고 증거를 사람에게 가져오라는 의미입니다. 아이디어를 여섯 번 패치하지 마십시오.
  • 동결된 프로토콜은 프로젝트 중간에 변경되지 않습니다. 변경해야 하는 경우 (분할의 버그, 저자에게서 배운 프로토콜 세부사항), 사람이 FROZEN.sha256을 편집하고 새 동결을 시작합니다. 이전 결과는 자체 기록과 함께 results.jsonl에 남습니다.
  • 단일 백그라운드 와처로 DONE 파일을 기다립니다. 루프 내의 모든 ssh 호출은 -o BatchMode=yes를 사용하고 종료 코드 255에서 중지됩니다.
  • 각 실행 후에는 status.py 출력을 읽고, 원시 로그는 읽지 마십시오. log.txt는 실패 시에만 엽니다.
  • 실수가 반복되면 lessons.md에 한 줄을 추가하고, 가능하면 검사 ( src/의 assert, 훅 규칙, 매니페스트 검사)로 전환합니다.

검토자 통과 (PASS를 신뢰하기 전)

렌즈당 하나의 검토자 하위 에이전트를 생성합니다. 각 에이전트에게 코드와 파일을 제공하고, 여러분의 결론은 제공하지 마십시오:

  1. 누수: train, val, test 파일이 겹칩니까? 제외된 패턴이 정말 제외됩니까? 테스트 레이블이 훈련 코드에 도달합니까?
  2. 프로토콜: 분할, 테스트 세트, 임계값 및 메트릭이 소스 논문 및 contract.json과 일치합니까? open_questions 선택 사항이 공개되었습니까?
  3. 공정한 비교: 기준 재구현이 허용 오차 내에 있습니까? 복사된 기준 수치가 동일한 프로토콜에서 가져온 것입니까? 다시 실행된 기준선이 표시되어 있습니까?

검토자는 그것이 변경하는 결정만큼만 가치가 있습니다. 각 렌즈는 구체적인 파일/라인 증거를 반환하거나 아무것도 반환하지 않습니다.

파일

template/                 새 프로젝트에 복사
  CLAUDE.md               지도 (제목 편집)
  contract.example.json   주장 / 프로토콜 / 게이트 / 컴퓨팅
  lessons.md
  harness/                launch.py job.sh gate.py status.py freeze.py check_frozen.py trace.py common.py
  frozen/eval.py          이진 탐지 평가자 (테스트 세트별 임계값에서 ACC + AP)
hooks/                    research_guard.py + 예제 구성 + 설정 스니펫
examples/aigi/            AI 생성 이미지 탐지: GenImage + CNNDetection 분할, CLIP 특징 캐싱,
                          GFRE 스타일 재구성 탐지기, GFRE 테이블 파서

크레딧: 하네스/루프/그래프 프레임워크는 @0xwhrrari의 "Harness, Loop and Graph" (2026년 11월)를 따릅니다.

관련 스킬