지식위키

나만의 하네스 조립 가이드 — 7프레임워크 베스트 부품을 내 이중모델 스택에 끼우기

나만의 하네스 조립 가이드 — 7프레임워크 베스트 부품을 내 이중모델 스택에 끼우기

한 줄 요약

7개 하네스를 10축으로 비교해 “각 축 1등 부품”만 골라, 내 스택(Claude Code + Codex + OMC) 위에 단계별로 조립하는 실행 가이드다. 이상안의 90%는 새 도구를 사는 게 아니라 이미 깔린 OMC 스킬과 비어있는 Claude Code 훅을 실제로 켜는 것만으로 달성된다(2_통합하네스_설계안 §5.4).


그림

4_나만의_하네스_조립가이드-diagram.svg

내 스택 현실판 아키텍처 — 시작과 끝을 fail-closed로 봉인하고, 실행 중 행위를 가드레일로 막는 6단계 흐름.

flowchart TB
    U[요구] --> RP["① 시작 게이트<br/>OMC /ralplan · /deep-interview<br/>모호성 게이팅"]
    RP --> SEED[".omc/SEED.md<br/>불변 SSoT · 직접편집 금지"]

    SEED --> CL

    subgraph ORCH["② 오케스트레이션 (내 핵심 자산)"]
        CL["Claude 오케스트레이터<br/>게이트·적대검증 · opus"]
        CL -->|"edge-map 타깃 주입<br/>변환만 허용"| CX["Codex 워커<br/>격리 쓰기 · gpt-5.4-mini"]
        CL -.->|선택적 가속| TM["OMC /team 워크트리 병렬<br/>tmux 미설치=순차 폴백"]
    end

    CX --> HK
    TM --> HK

    subgraph GUARD["③ 가드레일 근사 (최대 레버리지 · 즉시)"]
        direction LR
        HK["settings.json 훅<br/>PreToolUse 차단<br/>realpath 경로정규화"] --> CF["config.toml 전역 봉인<br/>역할별 프로파일 2개<br/>fail-closed"]
    end

    GUARD --> VF

    subgraph VERIFY["④ 검증 폐루프 (이미 5점 → 완성)"]
        direction TB
        CR["OMC critic + /verify<br/>자체승인 금지 의무경유"]
        CR --> COV["coverage 게이팅<br/>uncertain=차단"]
        COV --> RC["gate.mjs sha256 영수증<br/>exit 2 · forcing function"]
        RC -.asyncRewake.-> CL
    end

    VF[" "] -.->|exit2 block| CL
    VERIFY --> ST

    subgraph STATE["⑤ 영속 (보강)"]
        WIKI["('OMC wiki + MEMORY.md<br/>supersedes valid_to')"]
        STT["('OMC state_* + trace_timeline<br/>lineage 근사')"]
        TR["git trailer<br/>영수증 해시 자동삽입"]
    end

    STATE -.주기 적용.-> SI["⑥ 자기개선<br/>OMC /self-improve (sealed_files)<br/>openclaw 운영신호 복구<br/>learner/skillify"]
    SI -.규율 진화.-> SEED
    SI -.런타임 규칙.-> GUARD

    classDef gate fill:#fdd,stroke:#c00,stroke-width:2px
    classDef safe fill:#dfd,stroke:#080,stroke-width:2px
    classDef have fill:#ddf,stroke:#008,stroke-width:2px
    class RP,VERIFY gate
    class GUARD safe
    class ORCH have

[!info] 그림 읽는 법 빨강(①시작·④검증)은 fail-closed 두 관문으로 시작과 끝을 봉인, 초록(③가드레일)은 실행 중 행위를 봉인, 파랑(②오케스트레이션)은 내가 이미 가진 핵심 자산. 점선은 피드백 회로. 새로 만드는 건 초록 하나뿐, 나머지는 이미 있는 부품을 켜는 일이다.


쉽게 풀기

하네스를 자동차 조립 라인으로 보자. 부품 7세트(7개 프레임워크)에서 각 부위 1등만 골라 내 차(내 스택)에 끼운다.

1) 진단 — 내 차는 어디가 강하고 약한가 10축 비교에서 42/50점(_비교매트릭스). 엔진(컨텍스트·오케스트레이션·검증·철학)은 만점인데 잠금장치(가드레일)와 정비 자동화(자기개선·배포)가 헐겁다. 가장 큰 구멍 — 안전 규칙이 “문서에 글로만” 있고 차를 멈추는 물리적 차단기(settings.json 훅)가 비어 있다. (update-config 스킬 미사용이 그 증거.)

2) 막아야 할 3가지 사고 (실패 패턴)

flowchart LR
    F1["거짓 완료<br/>안 됐는데 됐다 보고"]:::ok
    F2["막연한 시작<br/>흐릿한 채 코딩"]:::bad
    F3["컨텍스트 오염<br/>대화 쌓여 판단 흐림"]:::ok
    F1 -->|이미 막힘| G1["gate.mjs exit 2<br/>작성자≠검수자"]
    F2 -->|내 약점| G2["진입 게이트<br/>미구축"]
    F3 -->|이미 막힘| G3["매 실행 새로<br/>모델 경계 격리"]
    classDef ok fill:#dfd,stroke:#080
    classDef bad fill:#fdd,stroke:#c00

3) 조립 원칙 강한 엔진(5점축)에 기름 더 붓는 건 낭비다. 헐거운 잠금장치와 빠진 정비 자동화에 집중 투자. 일부 부품은 너무 비싸거나(Rust 샌드박스 자체구현) 환경을 타서(tmux), 부품 자체가 아니라 그 “정신”만 내 표면으로 흉내 낸다.

4) 가장 중요한 한 수 “산문 규율을 코드 강제로 내린다.” 문서 속 안전 규칙을 → 실제 명령을 차단하는 훅으로 번역하는 것이 노트 전체에서 효과 가장 큰 단일 작업이다.


핵심 정리

내 하네스 진단 (42/50)

분류점수
지킬 것(이미 만점): 컨텍스트·오케스트레이션·검증·철학5
집중 투자(약점): 가드레일·안전 / 상태·영속4
직격 대상(최대 약점): 자기개선·반복 / 배포·DX3

[!note]- 펼쳐보기: 약점 상세 해설

  • 가드레일 4 — 프로젝트는 봉인됐으나 전역 config.toml/settings가 느슨
  • 상태 4 — 디스크 큐는 강하나 lineage·쿼리가 약함
  • 자기개선 3 — 상시 메타루프 부재, 개선이 사람 회고에만 의존
  • 배포 3 — doctor·rollback 부재, 문서-코드 drift
  • 단일 최대 구멍 — “규율이 SSoT 문서에만 있고 PreToolUse 차단이 settings.json에 전무”(MINE_개요, 3_학습인사이트 원칙 10)

막아야 할 3대 실패와 봉인 부품

실패 패턴봉인 부품
거짓 완료(이미 막힘)critic 의무 경유 + sha256 영수증
막연한 시작(미흡)/ralplan·/deep-interview 진입 게이트
컨텍스트 오염(이미 막힘)PreCompact 자동 flush

[!note]- 펼쳐보기: 컴포넌트별 채택 요약 (출처 → 내 스택)

  • 2.1 시작 게이트 — 수학적 모호성 게이팅(ambiguity = 1−Σ(clarity·weight) ≤ 0.2, 출처 ouroboros·gajae-code·OMC). → 비자명 작업에 /ralplan·/deep-interview 의무화, 산출물을 .omc/SEED.md로 동결
  • 2.2 컨텍스트 엔진 — 이미 5점. → PreCompact 훅으로 압축 손실만 마감(provenance·redaction·TTL)
  • 2.3 오케스트레이션 — 이중모델 비대칭 분업(내 정체성). → 모델 경계=격리막 명문화, 위험도별 티어링, OMC /team 병렬(tmux는 선택 가속)
  • 2.4 가드레일 — 4중 가드레일 정신 + fail-closed. → settings.json 훅 3종 + config.toml 전역 봉인 (최대 레버리지)
  • 2.5 검증 폐루프 — typed evidence + sha256 영수증 + critic 분리. → 이미 5점, 누수 3곳만 마감
  • 2.6 영속·상태 — 이벤트소싱 lineage + git trailer + supersedes. → OMC state_*/wiki_*로 근사
  • 2.7 자기개선 — self-improve 토너먼트 + reflect 루프. → 최대 약점(3점) 직격

[!warning] 채택하지 않은 것 (안티-패턴, 2_통합하네스_설계안 §6)

  • fable-ish fail-open(훅 예외 시 exit 0) → 반대로 fail-closed로 뒤집어 채택
  • OMC 짧은 timeout + {continue:true}(안전 훅 조용히 죽음) → 타임아웃 길게, 실패 시 차단
  • 거대 사양 복잡도(gajae 수백 줄, ouroboros 926 py, akh2 118줄) → 게이트는 코드 강제, 프롬프트는 짧게
  • Rust 크레이트·OS 샌드박스·이벤트소싱 자체구현 → 이식 비용 비현실, 정신만 표면으로 근사
  • 단일 Codex 계정 SPOF → refresh_token 자동갱신 + 한도 watchdog로 완화

실제 예시

2.4 가드레일 — 산문을 코드로 (최대 레버리지)

Rust·OS 샌드박스 자체구현은 비현실적이라, 내가 가진 3종 표면(settings.json 훅 · config.toml · 역할 프로파일)으로 근사한다. 핵심 차단 흐름은 아래와 같다.

flowchart TB
    A["Bash 명령"] --> B{"PreToolUse(Bash)<br/>위험 정규식 + permissions.deny"}
    B -->|"realpath 정규화<br/>symlink·../·WSL·redirection 차단"| B2{"통과?"}
    B2 -->|아니오| X1["차단 exit 2"]:::block
    C["Write/Edit"] --> D{"PreToolUse(Write/Edit)<br/>파생필드(registry_id 등) 쓰기?"}
    D -->|예| X2["차단 exit 2"]:::block
    E["종료 시도"] --> F{"Stop 게이트<br/>변경+미검증 or coverage uncertain?"}
    F -->|예| X3["block (fail-closed)"]:::block
    classDef block fill:#fdd,stroke:#c00,stroke-width:2px

[!note]- 펼쳐보기: 전체 설정 코드 (settings.json 훅 3종 + config.toml)

# [1순위·즉시] settings.json 훅 3종을 `update-config` 스킬로 추가
#  ~/.claude/settings.json

PreToolUse(Bash)   — 빈자(貧者)판 Starlark
  · 위험 명령 정규식 + permissions.deny 로 rm -rf / system32 / sudo npm 차단
  · 단 realpath 기반 경로 정규화로 symlink·../·대소문자·WSL/Windows·
    Bash redirection 우회 차단 (Codex 교차검증 필수 지적, [[1_내패턴_개선백로그]])

PreToolUse(Write/Edit)
  · .gjc/·registry·인덱스·quality_score/registry_id 파생필드 쓰기를
    exit 2 로 차단 (파생값 추방을 훅으로 승격)

Stop               — fable-ish식 종료 게이트, 단 fail-closed
  · 변경 발생 + 미검증이면 block, coverage uncertain 도 차단
    (fable-ish 의 fail-open·"2회 후 허용" 결함 수정)
# [2순위·즉시] config.toml 전역 봉인
# trusted 경로에서 system32·/home 제거
# 오케스트레이터=READ-heavy / 워커=WRITE-only 역할별 프로파일 2개로 분리

skipDangerousModePermissionPrompt = false

# rollout 규율: 바로 fail-closed로 켜면 작업이 잠긴다
#   → shadow → warn → enforce 단계 + break-glass 프로파일
#     (Codex 교차검증, [[1_내패턴_개선백로그]] 누락 보강)

2.5 검증 폐루프 — 누수 3곳 마감 (gate.mjs 보강)

이미 gate.mjs exit 2 + writer≠reviewer를 보유하므로 누수 3곳만 막는다: 영수증·critic 의무경유·coverage 게이팅.

[!note]- 펼쳐보기: 전체 gate.mjs 보강 코드

// gate.mjs — canonical-JSON sha256 영수증 추가 (exit 2 유지)
// 기록 항목: 변경파일 coverage · verifier command · exit code
//          · artifact hash · critic 승인자
// nextAllowedActions 를 forcing function 으로

// critic 의무 경유: OMC critic 에이전트 + /verify 를 완료 전
//   자체승인 금지 게이트로 강제 경유 (멀티에이전트 4렌즈 패널에 통합)

// coverage 게이팅: validate 가 '변경된 그 파일'을 실제 검증했는지
//   direct / generic / uncertain / none 판정 → uncertain 은 통과 금지

// asyncRewake: 적대검증을 비차단 백그라운드로 돌리고
//   결과를 다음 게이트에 주입 (동기 차단 없이 루프 합류)

[!caution] Codex 교차검증 — exit 2의 의미 exit 2는 ‘재시도’가 아니라 ‘멈춰야 하는 게이트 실패’ 신호다. 자동복구 금지, incident 생성 + bounded retry로 처리.

적용 로드맵 — 구현 순서 (효과↑·난이도↓)

Codex 교차검증이 재배치한 우선순위를 따른다(1_내패턴_개선백로그 “Codex 제안”): 설정 봉인 → 훅 강제 → 영수증/critic → 테스트·doctor → 시작 게이트.

flowchart LR
    W["이번 주<br/>설정 봉인 · 훅 shadow<br/>PreCompact flush"] --> S["단기<br/>sha256 영수증 · critic+coverage<br/>doctor/rollback · 시작 게이트"]
    S --> M["중기<br/>wiki supersedes · lineage<br/>Codex SPOF · prefix-cache"]
    M --> L["장기<br/>self-improve 주기적용<br/>reflect 폐루프 · (선택)tmux"]

[!note]- 펼쳐보기: 13단계 전체 로드맵

# 이번 주 (즉시·최대효과, 새 아키텍처 0)
1. settings.json/config.toml 실제 상태 감사 + 전역 권한 봉인
   + 비밀정보(refresh_token·PAT·입장비번) redaction·노출 점검
2. PreToolUse/Stop 훅을 shadow mode 로 도입 (update-config 스킬)
   — canonical path(realpath)·Bash redirection·파생필드 쓰기·미검증 종료를
     fixture 로 검증 후 warn → enforce
3. PreCompact 훅 — 압축 직전 wiki_add 로 지식 flush (provenance·redaction·TTL)

# 단기 (자기개선 3→4, 가드레일 4→5)
4. gate.mjs 에 canonical-JSON sha256 영수증
5. OMC critic + /verify 의무 경유 회로 + coverage 게이팅(uncertain 차단)
6. doctor/rollback/break-glass + 훅 회귀 테스트
   (allow/block/fail-closed/timeout/symlink/redirection fixture) → DX 직격
7. 비자명 작업 /deep-interview·/ralplan 진입 게이트 승격 + .omc/SEED.md 규약

# 중기 (영속·SPOF)
8. LLM Wiki supersedes 보존(valid_to) + OMC state_*/trace_timeline lineage 근사
9. Codex SPOF 완화 — refresh_token 자동갱신 + 한도 watchdog
   + openclaw 운영신호(429/token) bounded retry
10. StablePrefix 동결 + prefix-cache 적중률 측정 + 비용/지연 로깅

# 장기 (자기진화 완성)
11. /self-improve 토너먼트를 하네스 규율 자체에 주기 적용 (sealed_files 선마련)
12. reflect 폐루프(eval→다음세대 seed, 정체 시 강제변형)
    + 다중신호 종료 판정으로 ralph 거짓 탈출 차단
13. (선택) 이벤트소싱·tmux 멀티런타임 — 환경의존 높아 후순위

요약 & 셀프체크

3줄 요약

  1. 이상안의 90%는 새 도구가 아니라 이미 깔린 OMC 스킬 + 비어있는 Claude Code 훅을 켜는 것이다. 미실현 가치 전부가 settings.json 훅 하나에 몰려 있다.
  2. 강점 둘(거짓완료·컨텍스트 오염)은 이미 코드로 막혀 있다. 5점축에 더 붓지 말고 약점(시작 게이트·자동 강제·자기개선)에 집중한다.
  3. 메모리가 아니라 코드를 1차 근거로. 내 메모리 노트는 “계획”을 “완료”로 과대기록하는 경향이 있어(QStash·codex_d.sh·300s 상한 사례), 산문 SSoT를 믿지 말고 훅·exit code·영수증으로 강제 확인한다.

스스로 답해보기

  • 내 5점축 4개와 3점 최대 약점 2개를 즉시 말할 수 있는가? 약점에만 투자하는 원칙이 왜 옳은가?
  • “산문 규율을 코드 강제로”를 settings.json 훅 3종(PreToolUse Bash / Write·Edit / Stop)으로 구체화하면 각각 무엇을 차단하는가?
  • fable-ish의 fail-open을 왜 fail-closed로 뒤집어야 하며, exit 2를 ‘재시도’로 다루면 안 되는 이유는?

연결

[!note]- 펼쳐보기: Codex 교차검증 / 메타검증 보존 이 가이드의 우선순위와 안전 설계는 Codex 교차검증으로 재배치·보강되었다(1_내패턴_개선백로그 “Codex 제안”):

  • 우선순위 재배치: 설정 봉인 → 훅 강제 → 영수증/critic → 테스트·doctor → 시작 게이트 (효과↑·난이도↓ 순)
  • realpath 경로 정규화 필수: symlink·../·대소문자·WSL/Windows·Bash redirection 우회 차단
  • rollout 단계화: shadow → warn → enforce + break-glass 프로파일 (즉시 fail-closed 시 작업 잠김 방지)
  • exit 2 ≠ 재시도: 게이트 실패 신호이므로 자동복구 금지, incident + bounded retry
  • trailer는 의례화 위험: 사람 trailer보다 영수증 해시 자동 삽입 우선, trailer는 보조 감사층으로 격하
  • 운영신호와 검증실패 분리: 429/token 만료는 bounded retry 자동복구, 검증 실패(exit 2)는 자동복구 금지·원인 분류