ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§μ˜ 핡심은 β€œλͺ¨λΈμ„ 더 λ˜‘λ˜‘ν•˜κ²Œ μ“°λŠ” 법”보닀 νŒ€μ΄ 흔듀리지 μ•Šκ²Œ 운영 ꡬ쑰λ₯Ό μ„€κ³„ν•˜λŠ” 법에 μžˆμŠ΅λ‹ˆλ‹€. OpenAIκ°€ κ³΅κ°œν•œ Codex 운영 사둀λ₯Ό 보면, μ‚¬λžŒμ΄ 직접 μ½”λ“œλ₯Ό 덜 μ“°λŠ” λŒ€μ‹  μ €μž₯μ†Œ κ΅¬μ‘°Β·κ°€λ“œλ ˆμΌΒ·ν”Όλ“œλ°± 루프에 더 λ§Žμ€ μ‹œκ°„μ„ νˆ¬μžν–ˆμ„ λ•Œ 속도와 μ•ˆμ •μ„±μ΄ ν•¨κ»˜ μ˜¬λΌκ°‘λ‹ˆλ‹€.

μ‹€λ¬΄μ—μ„œλŠ” μ—­ν•  μ „ν™˜, μ €μž₯μ†Œ 지식ꡬ쑰, μžλ™ 게이트, μ£Όκ°„ GC λ£¨ν”„μ²˜λŸΌ λ°”λ‘œ μš΄μ˜μ— 뢙일 수 μžˆλŠ” μΆ•λΆ€ν„° μ μš©ν•˜λŠ” 것이 νš¨κ³Όμ μž…λ‹ˆλ‹€.

μ•ˆλ‚΄: 이 λ¬Έμ„œλŠ” μƒμ„±ν˜• AIλ₯Ό ν™œμš©ν•΄ μ΄ˆμ•ˆμ„ μž‘μ„±ν–ˆκ³ , 곡개 κ·Όκ±° λ¬Έμ„œλ₯Ό λ°”νƒ•μœΌλ‘œ μ‚¬λžŒμ΄ κ²€ν† Β·λ³΄μ •ν–ˆμŠ΅λ‹ˆλ‹€.

이 κΈ€μ˜ κ·Όκ±° 자료

핡심 μš”μ•½

  • ν•˜λ„€μŠ€μ˜ λͺ©μ μ€ 1회 성곡이 μ•„λ‹ˆλΌ 반볡 κ°€λŠ₯ν•œ 성곡λ₯ μ„ λ†’μ΄λŠ” 것이닀.
  • μ €μž₯μ†ŒλŠ” μ½”λ“œ μ°½κ³ κ°€ μ•„λ‹ˆλΌ 운영 μ§€μ‹μ˜ μ‹œμŠ€ν…œ 였브 λ ˆμ½”λ“œκ°€ λ˜μ–΄μ•Ό ν•œλ‹€.
  • κ·œμΉ™μ€ λ¬Έμž₯으둜 κΆŒκ³ ν•˜μ§€ 말고, 린트/ν…ŒμŠ€νŠΈ/게이트둜 κ°•μ œν•΄μ•Ό 였래 κ°„λ‹€.
  • μžμœ¨μ„±μ„ λ†’μΌμˆ˜λ‘ β€œκΈ°λŠ₯”보닀 β€œκ΄€μΈ‘Β·λ³΅κ΅¬Β·GC”가 더 μ€‘μš”ν•΄μ§„λ‹€.
flowchart LR
    A["λͺ©ν‘œΒ·λ²”μœ„ κ³ μ •"] --> B["κ°€λ“œλ ˆμΌ μ •μ˜\n(κΈˆμ§€/ν—ˆμš©/승인)"]
    B --> C["μ—μ΄μ „νŠΈ μ‹€ν–‰"]
    C --> D["κ΄€μΈ‘ 둜그 μˆ˜μ§‘"]
    D --> E["μžλ™ 게이트 νŒμ •"]
    E --> F["ν”Όλ“œλ°± 반영\n(ν”„λ‘¬ν”„νŠΈ/ν…ŒμŠ€νŠΈ)"]
    F --> A

μ‹œκ°ν™” (Excalidraw)

Agent/OpenAI λΉ„μ¦ˆλ‹ˆμŠ€ ν™œμš©/images/openai-biz-14-harness-loop.png

  • 원본 νŽΈμ§‘ 파일: Agent/OpenAI λΉ„μ¦ˆλ‹ˆμŠ€ ν™œμš©/images/openai-biz-14-harness-loop.excalidraw

🧠 칠판 μΉ˜νŠΈμ‹œνŠΈ

  • μ‚¬λžŒμ€ λ°©ν–₯을 μ •ν•˜κ³ , ν•˜λ„€μŠ€λŠ” 반볡 ν’ˆμ§ˆμ„ 지킨닀
  • AGENTSλŠ” 백과사전이 μ•„λ‹ˆλΌ β€œλͺ©μ°¨β€μ—¬μ•Ό ν•œλ‹€
  • 둜그 없이 λ³΅κ΅¬λŠ” μ—†λ‹€, 게이트 없이 일관성은 μ—†λ‹€
  • μ£Όκ°„ GCλŠ” λŒ€μ²­μ†Œκ°€ μ•„λ‹ˆλΌ β€œλ§€μΌ μž‘μ€ 뢀채 μƒν™˜β€μ΄λ‹€

OpenAI μ‚¬λ‘€μ—μ„œ λ°˜λ“œμ‹œ 가져와야 ν•  6κ°€μ§€

1) μ—”μ§€λ‹ˆμ–΄ μ—­ν•  μ „ν™˜: μ½”λ“œ μž‘μ„±μž β†’ ν™˜κ²½ μ„€κ³„μž

OpenAI μ‚¬λ‘€μ˜ 핡심 λ©”μ‹œμ§€λŠ” λͺ…ν™•ν•©λ‹ˆλ‹€. μ†λ„μ˜ 병λͺ©μ€ λͺ¨λΈ μ„±λŠ₯보닀 ν™˜κ²½μ˜ λͺ…ν™•μ„±μ—μ„œ 자주 λ°œμƒν•©λ‹ˆλ‹€. μ—μ΄μ „νŠΈκ°€ μ‹€νŒ¨ν•  λ•Œ μ‚¬λžŒμ€ β€œλ” 쒋은 ν”„λ‘¬ν”„νŠΈβ€λ₯Ό κ³ λ―Όν•˜κΈ°λ³΄λ‹€, μ–΄λ–€ λŠ₯λ ₯이 μ €μž₯μ†Œμ— λΉ μ‘ŒλŠ”μ§€(도ꡬ/λ¬Έμ„œ/검증)λ₯Ό λ¨Όμ € μ±„μ›Œμ•Ό ν•©λ‹ˆλ‹€.

싀무 적용:

  • μž‘μ—… μ‹€νŒ¨λ₯Ό β€œκ°œμΈ μ‹€μˆ˜β€κ°€ μ•„λ‹ˆλΌ β€œμ‹œμŠ€ν…œ λˆ„λ½ μ‹ ν˜Έβ€λ‘œ λΆ„λ₯˜
  • μ‹€νŒ¨ ν‹°μΌ“λ§ˆλ‹€ λˆ„λ½ λŠ₯λ ₯ 1개λ₯Ό λ¬Έμ„œ λ˜λŠ” λ„κ΅¬λ‘œ ν™˜μ›
  • 같은 μ‹€νŒ¨κ°€ 2회 반볡되면 μžλ™ 게이트 ν›„λ³΄λ‘œ 승격

μ°Έκ³ : https://openai.com/index/harness-engineering/

2) AGENTSλŠ” λͺ©μ°¨, μ €μž₯μ†Œκ°€ μ‹œμŠ€ν…œ 였브 λ ˆμ½”λ“œ

κΈ΄ AGENTS 1κ°œμ— λ‹€ λ„£λŠ” 방식은 금방 λ‚‘μŠ΅λ‹ˆλ‹€. OpenAI μ‚¬λ‘€μ²˜λŸΌ AGENTSλ₯Ό 짧은 λͺ©μ°¨λ‘œ 두고, 상세 기쀀은 docs/둜 λΆ„λ¦¬ν•˜λ©΄ μ—μ΄μ „νŠΈμ™€ μ‚¬λžŒ λͺ¨λ‘ 탐색 λΉ„μš©μ΄ μ€„μ–΄λ“­λ‹ˆλ‹€.

싀무 적용:

  • AGENTS.md: 80~120쀄 이내(원칙/링크/κΈˆμ§€/승인)
  • docs/ops/: runbook, error-codes, execution-plans 뢄리
  • λ¬Έμ„œ 신선도 체크λ₯Ό CI둜 κ°•μ œ

μ°Έκ³ : https://cookbook.openai.com/articles/codex_exec_plans

3) μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 자체λ₯Ό μ—μ΄μ „νŠΈκ°€ 읽을 수 있게 λ§Œλ“€κΈ°

OpenAI μ‚¬λ‘€μ—μ„œ 인상적인 뢀뢄은 UI/둜그/λ©”νŠΈλ¦­μ„ μ—μ΄μ „νŠΈκ°€ 직접 λ‹€λ£¨κ²Œ λ§Œλ“  μ μž…λ‹ˆλ‹€. 즉 β€œμ½”λ“œλ§Œ μ½λŠ” μ—μ΄μ „νŠΈβ€κ°€ μ•„λ‹ˆλΌ β€œμ‹€ν–‰ μƒνƒœλ₯Ό λ³΄λŠ” μ—μ΄μ „νŠΈβ€λ‘œ ν™•μž₯ν•œ κ²ƒμž…λ‹ˆλ‹€.

싀무 적용:

  • μž‘μ—… λ‹¨μœ„ ν™˜κ²½(worktree/dev env) 뢄리
  • DOM μŠ€λƒ…μƒ·/μŠ€ν¬λ¦°μƒ·/둜그 쿼리 경둜λ₯Ό ν‘œμ€€ν™”
  • PR ν…œν”Œλ¦Ώμ— μž¬ν˜„ 증거(μŠ€ν¬λ¦°μƒ·/둜그) 첨뢀 κ°•μ œ

μ°Έκ³ : https://openai.com/index/harness-engineering/

4) μ•„ν‚€ν…μ²˜μ™€ μ·¨ν–₯은 β€œλΆˆλ³€μ‹β€μœΌλ‘œ κ°•μ œ

λ¬Έμ„œλ§ŒμœΌλ‘œ ꡬ쑰λ₯Ό μ§€ν‚€κΈ΄ μ–΄λ ΅μŠ΅λ‹ˆλ‹€. OpenAI μ‚¬λ‘€μ²˜λŸΌ 경계/의쑴 λ°©ν–₯/λ‘œκΉ… κ·œμΉ™μ„ λ¦°νŠΈμ™€ ꡬ쑰 ν…ŒμŠ€νŠΈλ‘œ μžλ™ νŒμ •ν•΄μ•Ό, 속도가 μ˜¬λΌκ°€λ„ ꡬ쑰가 λ¬΄λ„ˆμ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

싀무 적용:

  • 의쑴 λ°©ν–₯ μœ„λ°˜μ€ CI μ¦‰μ‹œ μ‹€νŒ¨
  • 경계 μž…λ ₯ νŒŒμ‹±(typed schema) κ°•μ œ
  • 파일 크기/넀이밍/둜그 ν˜•μ‹ 같은 μ·¨ν–₯ κ·œμΉ™λ„ μ½”λ“œν™”

μ°Έκ³ : https://platform.openai.com/docs/guides/prompt-engineering

5) μ²˜λ¦¬λŸ‰μ΄ λ°”λ€Œλ©΄ 병합 철학도 바뀐닀

μ—μ΄μ „νŠΈ μ²˜λ¦¬λŸ‰μ΄ μ‚¬λžŒ 리뷰 μ²˜λ¦¬λŸ‰μ„ λ„˜κΈ°λ©΄, 전톡적인 β€œλ¬΄κ±°μš΄ 선차단” 방식은 병λͺ©μ΄ λ©λ‹ˆλ‹€. 핡심은 무쑰건 λŠμŠ¨ν•˜κ²Œ κ°€λŠ” 게 μ•„λ‹ˆλΌ, 짧은 PR + μžλ™ 볡ꡬ κ°€λŠ₯ν•œ 게이트둜 리슀크λ₯Ό κ΄€λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

싀무 적용:

  • PR 크기 μ œν•œ(μž‘κ²Œ μͺΌκ°œκΈ°)
  • flaky ν…ŒμŠ€νŠΈλŠ” μž₯κΈ° λΈ”λ‘œν‚Ή λŒ€μ‹  후속 볡ꡬ λ£¨ν”„λ‘œ 처리
  • 치λͺ… κ²Œμ΄νŠΈμ™€ ꢌμž₯ 게이트λ₯Ό 뢄리해 운영

μ°Έκ³ : https://docs.github.com/en/actions

6) μ—”νŠΈλ‘œν”ΌλŠ” μ£Όκ°„ GC둜 관리

OpenAI μ‚¬λ‘€μ—μ„œ β€œκΈˆμš”μΌλ§ˆλ‹€ AI slop 정리”가 ν™•μž₯ λΆˆκ°€λŠ₯ν•˜λ‹€κ³  밝힌 뢀뢄이 μ€‘μš”ν•©λ‹ˆλ‹€. 해법은 νšŒκ³ κ°€ μ•„λ‹ˆλΌ 지속 GC μžλ™ν™”μž…λ‹ˆλ‹€.

싀무 적용:

  • golden principles 5개 λ‚΄μ™Έλ‘œ λͺ…μ‹œ
  • λ°±κ·ΈλΌμš΄λ“œ 정리 μ—μ΄μ „νŠΈ(쀑볡/죽은 μ½”λ“œ/κ·œμΉ™ μœ„λ°˜) 운영
  • μ €μœ„ν—˜ λ¦¬νŒ©ν† λ§μ€ μžλ™λ¨Έμ§€ ν›„λ³΄λ‘œ 뢄리

μ°Έκ³ : https://openai.com/index/harness-engineering/

λ°”λ‘œ μ“°λŠ” μ½”λ“œ 2μ’…

A) AGENTSλ₯Ό β€œλͺ©μ°¨β€λ‘œ μœ μ§€ν•˜λŠ” μ΅œμ†Œ ν…œν”Œλ¦Ώ

# AGENTS.md (μš”μ•½λ³Έ)
- λͺ©ν‘œ: λ°˜λ³΅μ—…λ¬΄ μžλ™ν™” μ•ˆμ • 운영
- μš°μ„ μˆœμœ„: μ •ν™•μ„± > μ•ˆμ •μ„± > 속도
- κΈˆμ§€: 승인 μ—†λŠ” μ™ΈλΆ€ λ°œμ†‘ / 원본 데이터 직접 λ³€ν˜•
- ν•„μˆ˜ 둜그: error_code, failed_step, next_action, owner
- 상세 운영 κΈ°μ€€: docs/ops/runbook.md
- μž₯μ•  μ½”λ“œ 사전: docs/ops/error-codes.md
- μ‹€ν–‰ κ³„νš: docs/ops/execution-plans/

B) Harness 둜그 μŠ€ν‚€λ§ˆ 검사기

# scripts/harness_check.py
import json
import sys
from pathlib import Path
 
REQUIRED = {"error_code", "failed_step", "next_action", "owner"}
 
 
def main(path: str) -> int:
    p = Path(path)
    if not p.exists():
        print(f"[FAIL] log file not found: {path}")
        return 1
 
    missing_count = 0
    for i, line in enumerate(p.read_text(encoding="utf-8").splitlines(), start=1):
        if not line.strip():
            continue
        row = json.loads(line)
        missing = [k for k in REQUIRED if not row.get(k)]
        if missing:
            missing_count += 1
            print(f"[FAIL] line {i}: missing {missing}")
 
    if missing_count:
        print(f"[RESULT] failed rows: {missing_count}")
        return 1
 
    print("[PASS] harness log schema ok")
    return 0
 
 
if __name__ == "__main__":
    sys.exit(main(sys.argv[1]))

30λΆ„ λ„μž… 루틴 (였늘 λ°”λ‘œ 적용)

  1. 8λΆ„: AGENTSλ₯Ό λͺ©μ°¨ν˜•μœΌλ‘œ 쀄이고 상세 κ·œμΉ™μ„ docs둜 뢄리
  2. 7λΆ„: 둜그 4ν•„λ“œ(error_code, failed_step, next_action, owner) κ³ μ •
  3. 10λΆ„: CI에 harness_check.py + ν…ŒμŠ€νŠΈ μ—°κ²°
  4. 5λΆ„: GC 큐 1건 등둝(쀑볡/λ―Έμ‚¬μš©/κ·œμΉ™μœ„λ°˜ 쀑 택1)

μ™„λ£Œ κΈ°μ€€:

  • μž₯μ•  μž¬ν˜„ μ‹œκ°„ 단좕
  • 동일 원인 μž₯μ•  재발 κ°μ†Œ
  • PR 편차(ν’ˆμ§ˆ/ν˜•μ‹) κ°μ†Œ

λ―Έλ‹ˆ 사둀 2개

사둀 A) μ†λ„λŠ” λΉ λ₯Έλ° QAκ°€ 병λͺ©μΈ νŒ€

μ΄ˆκΈ°μ—” PR이 λΉ λ₯΄κ²Œ λŠ˜μ—ˆμ§€λ§Œ μ‚¬λžŒ QAκ°€ 따라가지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 이후 둜그/게이트/증거 첨뢀λ₯Ό ν‘œμ€€ν™”ν•˜μž, QAκ°€ β€œνƒμ •β€μ΄ μ•„λ‹ˆλΌ β€œνŒμ •μžβ€ μ—­ν• λ‘œ λ°”λ€Œμ–΄ μ²˜λ¦¬λŸ‰μ΄ μ•ˆμ •ν™”λμŠ΅λ‹ˆλ‹€.

사둀 B) λ¬Έμ„œλŠ” λ§Žμ€λ° 싀행이 ν”λ“€λ¦¬λŠ” νŒ€

AGENTS μž₯λ¬Έ λ¬Έμ„œλ₯Ό μŒ“μ•„λ„ μ‹€μ œ 행동은 μΌκ΄€λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. AGENTSλ₯Ό λͺ©μ°¨ν˜•μœΌλ‘œ 쀄이고 docsλ₯Ό 린트둜 κ΄€λ¦¬ν•˜μž, λ¬Έμ„œ μ΅œμ‹ μ„±μ΄ μœ μ§€λ˜κ³  μ—μ΄μ „νŠΈμ˜ μž¬ν˜„μ„±μ΄ μ˜¬λΌκ°”μŠ΅λ‹ˆλ‹€.

λ‹€μŒ 읽기