목록
도판: C.D. FRIEDRICH
TWO MEN CONTEMPLATING THE MOON
c.1825 · MET CC0 · 1비트 베이어
프로젝트읽기 42026.07.07제작 기록

AI가 완료했다고 하면 검사 95개부터 돌리는 도구를 만들었다

지시하고 의심하는 노동이 싫어서 감시자를 만들었다. 먼저 규칙을 못 박고, 역할을 나누고, 검사 95개를 쌓았다. 그런데 어느 날, 내 프로젝트를 내가 설명할 수 없었다.

AI에게 일을 시키는 시간보다, 시킨 일이 정말 됐는지 되짚는 시간이 길었다.

A를 지시하면 A가 아닌 게 온다. 큰 방향을 짚어두고 자잘한 선택을 몇 번 하다 보면 어느새 B가 되어 있다. 컨텍스트가 차면 품질이 내려가고, 모델은 최종 목표를 모른 채 표류한다. 그리고 가장 싫었던 것 — 근거 없이 “완료했습니다”라고 말한다. 거짓말, 조기 종료, 자기 채점.

이 의심 노동을 외주 줄 수 없을까. Metaforge는 그 질문에서 시작했다.

MFH — 실행 중의 감시자

처음 만든 건 MFH 하나였다. AI가 실행하는 동안 세 가지만 묻는 통제층이다.

정말 근거가 있는가. 범위를 벗어나지 않았는가. 완료라고 말해도 되는가.

이 세 질문은 코드를 쓰는 에이전트 위에 얹힌다. 작업관리자 쪽에 붙는 지침이다. 지금 저장소에서 이 층은 검사로 산다. bun run product:quality 한 줄이 검사 95개를 차례로 돌린다. scripts/ 아래 검사 스크립트는 157개, 문서로 풀면 체크 항목 186개다.

그중 내가 제일 아끼는 검사는 goal-trace 검증이다. 결과의 타입이 세 개로 고정되어 있다.

type GoalTraceOutcome = 'validated' | 'rejected' | 'blocked';

그리고 이 검사는 기록 묶음에 세 종류가 전부 있어야 통과한다. rejected가 하나도 없으면 검사가 실패한다. 전부 validated로 채워진 보고서는 여기서 그대로 떨어진다.

Meta — 실행 전에 못 박는 것

MFH는 실행 중을 지켰지만, 애초에 의도가 흐리면 감시할 기준도 없다. 그래서 Meta를 만들었다. AI가 일하기 전에 의도·스코프·문맥·결정·완성 기준을 고정하는 층이다.

영감은 세 군데서 왔다. Ouroboros라는 오픈소스, Depersonalization, 그리고 소크라테스 사고법. 모호한 걸 없애고 규칙과 최종 목표를 먼저 못 박는다 — 이인증(離人症)의 분리된 사고처럼, 실행하는 나와 판정하는 나를 갈라놓는 구조다.

목표는 자기 인증이 불가능하다. validate-goals는 요구된 검증 커맨드 전부의 통과 기록이 없으면 어떤 목표도 validated로 만들어주지 않는다. exit 1.

Orchestra — 셋 중 유일하게 런타임에 배선된 층

그다음 오케스트레이션을 배웠고, 에이전트 팀을 운영시키는 층을 붙였다. 지금 저장소에서 유일하게 런타임에 배선된 층이 이것이다 — src/services/orchestra/ 34개 파일, 6,138줄. Meta와 MFH는 문서와 스키마와 검사로만 존재한다. 배선된 층과 아직 문서뿐인 층을 저장소가 스스로 갈라서 적어뒀다.

이 층에서 제일 중요한 건 증거 판정기다. 다섯 축 — 테스트를 실제로 돌렸는지, 고친 범위가 최소인지, 시킨 일 안에 있는지, 되돌릴 수 있는지, 내가 이해할 수 있는지 — 으로 초록·노랑·빨강을 매긴다. 코드 주석에는 이렇게 박아뒀다.

The arbiter does NOT auto-promote anything; it produces a recommendation that the Human Gate renders.

판정기는 추천까지만 하고, 승격 버튼은 사람이 누르게 배선했다.

검사들은 출처를 인용한다. OpenTelemetry식 추적, OPA식 정책 판정, OpenAI의 에이전트 평가, NIST의 AI 위험 관리 문서. 세상이 이미 굴려본 구조를 가져와 내 저장소에 맞게 줄였다. 이 방식에 나중에 미메시스 엔지니어링이라는 이름을 붙인다.

미메시스 — 남이 이미 굴려본 구조를 가져오기

여기까지 만들고 알았다. 좋은데, 너무 무겁다. 느리다.

검사 95개는 안전했지만, 한 걸음 옮길 때마다 95개를 다 통과시켜야 했다. 그때 붙인 이름이 미메시스 엔지니어링이다. 매번 처음부터 규칙을 쌓는 대신, 이미 굴러가는 원본이 어떤 규칙으로 도는지 찾아 가져온다. 그때 내가 붙인 명제는 이거였다 — 보장된 품질과 성능은 모방에서 나온다.

저장소의 docs/MIMESIS_ENGINEERING.md에는 일곱 칸이 있다. 원본 찾기 → 구조 뽑기 → 내 프로젝트에 맞추기 → Orchestra 실행 → MFH 증거 검사 → Meta 기록 갱신 → 계속·축소·확장·중단. 마지막 칸이 정지 스위치다. 모방도 멈출 조건을 같이 적어 놓고 시작한다.

그리고 어느 날 알아차렸다. 내 사고방식과 해결책을 AI 에이전트에 설계해 넣고 있었다. MFH의 세 질문, 증거 판정기의 다섯 축, 미메시스의 일곱 칸 — 세 층 다 내가 결과물을 받아 들 때 밟던 순서를 그대로 옮겨 적은 것들이다.

검사 95개 옆에서 길을 잃다

정직하게 적는다. 올해 6월 말, 나는 한 커뮤니티에 이렇게 썼다.

한 달 동안 자동 실행에만 의존했더니, 내 프로젝트인데 이해가 0이 됐다. 브라우저에 보이는 화면만 보고 괜찮다 하고 넘어갔다. 이제는 내가 뭘 모르는지도 모른다.

“내가 이해할 수 있는지”는 증거 판정기 다섯 축 중 하나로 이미 들어가 있었다. 그 축의 판정은 사람이 하게 돼 있었고, 그 사람이 나였다.

돌아온 답 중 하나가 오래 남았다. 요지는 이렇다 — 생성을 멈추고, 이해 안 되는 파일 하나를 골라 설명할 수 있을 때까지 읽어라. 도구는 체크리스트로 배우지 말고 진짜 질문이 생기는 순간에 배워라. 그리고,

AI는 확률적으로 설명한다. 하지만 브레이크포인트, 실패하는 테스트, 네트워크 로그는 이번, 이 코드에서 실제로 참인 것을 말한다. 목표는 AI를 끊는 게 아니라, AI가 말로 빠져나갈 수 없는 근거를 항상 하나는 쥐고 있는 것이다.

이건 내가 기계에 넣으려던 것과 같은 문장이다. 증거 검사의 사람 버전. 다만 나는 그 검사를 AI 쪽에만 걸어 뒀다.

지금 — 병합

Metaforge는 지금 흩어진 세 층을 한 제품으로 병합하는 중이다. MFH의 실행 중 통제, Meta의 사전 고정, OpenClaude에 구현한 Orchestrator OS. 저장소는 2026년 5월 26일에 만들어졌고, 별은 18개다. README에 먼저 적어뒀다 — 별 18개를 채택의 증거로 읽지 말 것.

기반 런타임은 Claude Code CLI 계열 오픈소스에서 파생했다(43만 줄). 내 몫으로 올라간 건 검사 스크립트와 스키마와 문서, 그리고 오케스트라 층 6,138줄이다. 어느 줄이 어디서 왔는지는 CHANGELOG에 갈라 적어 뒀다. 출처를 숨기면 증거 검사를 만든 의미가 없으니까.

검사 95개는 AI가 낸 결과를 본다. 내가 그 결과를 읽을 수 있는지는 보지 않는다. 그건 시스템을 다 짓고 한 달을 더 쓴 다음에야 알았다.

도판REMBRANDT · ARISTOTLE WITH A BUST OF HOMER · 1653 · MET CC0 · 1비트 베이어
이 페이지의 도판 두 장은 메트로폴리탄 미술관 공개 이미지(MET CC0)다. 출처는 각 캡션에 적었다.
프로젝트 · 2026.07.07 · 글 오영웅 · 글 목록 →
다른 글
  1. 우린 콘텐츠를 만들지 않고 찍어낸다.프로젝트 · 2026.08.16
  2. ballast: AI와 함께 일을 잘하는 방법프로젝트 · 2026.08.16
  3. QuantFlow에서 Alpha Court로 — 실패를 다시 읽었다프로젝트 · 2026.05.27
구독새 글은 RSS로RSS →