나만의 하네스 조립 가이드 — 7프레임워크 베스트 부품을 내 이중모델 스택에 끼우기
나만의 하네스 조립 가이드 — 7프레임워크 베스트 부품을 내 이중모델 스택에 끼우기
한 줄 요약
7개 하네스를 10축으로 비교해 “각 축 1등 부품”만 골라, 내 스택(Claude Code + Codex + OMC) 위에 단계별로 조립하는 실행 가이드다. 이상안의 90%는 새 도구를 사는 게 아니라 이미 깔린 OMC 스킬과 비어있는 Claude Code 훅을 실제로 켜는 것만으로 달성된다(2_통합하네스_설계안 §5.4).
그림
내 스택 현실판 아키텍처 — 시작과 끝을 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 |
| 직격 대상(최대 약점): 자기개선·반복 / 배포·DX | 3 |
[!note]- 펼쳐보기: 약점 상세 해설
막아야 할 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줄 요약
- 이상안의 90%는 새 도구가 아니라 이미 깔린 OMC 스킬 + 비어있는 Claude Code 훅을 켜는 것이다. 미실현 가치 전부가 settings.json 훅 하나에 몰려 있다.
- 강점 둘(거짓완료·컨텍스트 오염)은 이미 코드로 막혀 있다. 5점축에 더 붓지 말고 약점(시작 게이트·자동 강제·자기개선)에 집중한다.
- 메모리가 아니라 코드를 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를 ‘재시도’로 다루면 안 되는 이유는?
연결
- 하네스엔지니어링이란
- HOME
- 종합 청사진: 2_통합하네스_설계안 · 개선 백로그: 1_내패턴_개선백로그 · 학습 인사이트: 3_학습인사이트
- 기준선: MINE_개요 · 비교: _비교매트릭스 · 부품 카탈로그: 독창아이디어_모음
- 관련 횡단노트: 40_횡단분석/10_agent-loop · 40_횡단분석/20_context-assembly · 40_횡단분석/30_hooks · 40_횡단분석/60_orchestration · 40_횡단분석/70_guardrails-sandbox · 40_횡단분석/80_verification · 40_횡단분석/90_self-improvement · 40_횡단분석/100_state-memory
[!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)는 자동복구 금지·원인 분류