방학 동안 만든 것. 몇 달째 굴려온 대본 평가 시스템('칼날 위키')을 에이전트 스킬 한 줄로 묶고, 그 스킬을 동료들이 쓰는 웹서비스로 배포하기까지의 기록이다.
1. 칼날 위키가 뭐냐 — 3줄 소개
에이전트가 대본을 잘 읽으려면 기준이 있어야 한다. "재밌다/별로다" 말고, 무엇이 있고 무엇이 없는지를 항목으로 짚을 수 있는 기준. 그래야 평가하고 방향성을 제시할 수 있으니까.
그래서 좋은 대본들을 뜯어 작법을 체크리스트로 뽑았다. 우리는 이걸 렌즈라고 부른다. 이 렌즈를 위키에 쌓고, 에이전트가 그 위에서 새 대본을 채점하게 한다. 대본이 들어오면 렌즈 전 항목을 Y/N으로 판정하고 근거와 위치(몇 화 몇 씬)를 붙여 내놓는다. 그게 칼날 위키다.
지난 시즌 스터디 때 46개였던 렌즈가, 방학 동안 84개가 됐다.
2. 스킬 하나로 묶었다 — /ingest-script
새 대본이 생길 때마다 나는 같은 일을 반복하고 있었다. 저장하고, 분석시키고, 렌즈로 채점시키고, 결과를 위키 문서로 정리하고, 색인 갱신하고. 명령을 예닐곱 번 나눠 치는 수동 조립이었다.
그래서 스킬로 묶었다. /ingest-script 대본파일 — 한 줄이면 이렇게 흐른다:
한국 웹사이트의 프로세스를 보여주는 다이어그램
5~15분. 커피 한 잔 내리고 오면 위키에 새 작품 페이지가 서 있다.
여기서 중요한 건 명령을 한 줄로 줄인 게 아니다. 그 안에 어떤 규칙이 박혀 있느냐다.
잠깐 — 스터디에선 "스킬을 쪼개라"고 배웠는데?
이번 주 수업의 요지는 반대였다. 절차마다 스킬을 나눠두면 고장이 났을 때 어느 칸이 문제인지 바로 짚을 수 있다는 것. 나는 한 줄로 묶었으니 거꾸로 간 것처럼 보인다.
그런데 쪼갠 것과 묶은 것은 층이 다르다.
안은 이미 쪼개져 있다. /ingest-script 안에서 분석자와 채점자는 서로를 못 보는 별개 에이전트고(규칙 ①), 세는 일은 아예 사람이 아닌 스크립트가 하고(규칙 ④), 통과 판정은 코드가 한다. 책임은 네 칸으로 갈라져 있다. 한 줄인 건 내가 치는 명령이지 시스템 내부가 아니다.
그리고 쪼개기의 값은 실제로 그렇게 받았다. 자가채점 사고가 터졌을 때 갈아끼운 건 채점자 한 칸이었다. 대사 구별 항목이 무디다고 판명됐을 때도 그 항목의 채점만 코드로 바꿔 끼웠다. 나머지는 건드리지 않았다. 쪼개져 있지 않았으면 못 했을 일이다.
오히려 나한테 남은 질문은 반대쪽이었다. 쪼갠 걸 사용자한테까지 쪼개서 내밀 이유가 있나? 나는 예닐곱 번 명령을 나눠 치다가 색인 갱신을 빼먹곤 했다. 조립을 사람이 하고 있었던 것이다. 묶는다는 건 그 조립 순서마저 스킬 안에 넣는 일이지, 칸막이를 허무는 게 아니다.
(다만 같은 주에 반대 방향으로도 갔다. 아침 브리핑 파이프라인 쪽은 수집·작성·배달을 각각 떼어냈고, 그 덕에 소스 하나를 버릴 때 나머지를 하나도 안 건드렸다. 쪼갤 자리와 묶을 자리가 따로 있다 — 경계는 "고장을 어디서 격리할 것인가"로 긋는 게 맞았다.)
3. 스킬에 박은 규칙들 — 전부 사고의 흉터다
스킬 파일(SKILL.md)에 실제로 들어 있는 규칙들이다. 하나하나가 사고 한 건에서 나왔다.
① 분석자와 채점자를 분리하고, 서로 못 보게 한다.
분석 에이전트와 채점 에이전트는 각각 새 컨텍스트에서 원문만 본다. 다른 작품의 결과도, 이전 분석도 못 본다.
→ 사고: 예전에 밤새 돌린 실험 로그가 전부 초록불에 전 회차 만점이었다. 까보니 생성을 맡긴 모델이 채점까지 하고 있었다. 자기가 쓰고 자기가 채점하니 만점일 수밖에.
② 새 기준은 정답을 본 뒤에 만들지 않는다.
위키의 진단을 실제 대본회의 판정과 대조했더니 크게 틀린 게 나왔다. 회의에서 정답을 봤으니 그에 맞춰 렌즈를 고치고 싶어졌고, 실제로 2개를 만들었다가 스스로 기각했다.
이유는 간단하다. 답을 보고 만든 기준은 그 시험을 100% 다시 통과한다. 잘 맞히게 된 게 아니라 답을 외운 것이라, 다음 대본에선 또 틀린다. 그래서 관문을 두 개 세웠다 — 새 렌즈는 ①그 사건과 무관한 다른 작품에서도 통하는지 먼저 확인하고, ②다음 회의 전에 미리 기준을 확정해 봉인한 뒤 회의 결과와 맞춰본다. 둘 다 통과해야 정식 채택이다.
③ 판단은 에이전트가, 최종 확정은 사람이.
점수에는 "에이전트 채점"이라는 꼬리표가 강제로 붙는다(꼬리표 없는 점수는 시스템이 차단). 내가 이의를 걸어 고치면 내 꼬리표로 바뀌고, 그게 항상 최종이다. 에이전트는 내 점수를 절대 못 되돌린다.
④ 숫자 세는 일은 AI에게 안 맡긴다.
렌즈에는 '가설'과 '확정' 등급이 있다. 어떤 작법이 서로 다른 작품 3편에서 발견되면 가설에서 확정으로 승급한다. 그러려면 "지금까지 몇 편에서 나왔나"를 계속 세야 하는데, 이 집계는 AI가 아니라 별도 스크립트가 한다. AI는 "이 작품에 이 작법이 있나 없나"만 판단하고, 세는 건 기계가 한다. LLM에게 카운팅을 시키면 언젠가 반드시 틀린다.
⑤ 에이전트가 "실패했다"고 해도 안 믿는다.
1순위는 산출물 파일이 실제로 있는지 확인(있으면 완료 — 알림이 거짓말한 것). 없으면 같은 명령을 재시도하지 않고 작업을 쪼개서 다시 보낸다. 큰 작품은 처음부터 4파트로 분할 호출.
⑥ 채점 결과를 한 번 물어보고 확정하지 않는다.
같은 대본을 세 번 채점해 답이 갈리는지 본다. 갈리면 3표 합의로 확정하고, 판정이 갈린 렌즈 목록은 따로 모은다 — 그게 곧 정의가 모호한 렌즈라서 §4 교정 루프의 다음 재료가 된다.
→ 계기: 23기 자연어회계처리님의 사례글([파레토 — 하네스를 꽉 잡는다고 좋은 게 아니다]). 검증 레이어를 새로 붙이는 실험은 폐기 판정이 났는데, 곁가지에서 하나가 건져졌다 — 같은 판정을 세 번 돌려 3표 합의로 바꾸니 회수율은 그대로인데 사람 검토 부담만 줄었다. 저자의 문장: "뭔가를 더 붙여서 얻은 게 아니라, 불안정한 판정을 걷어내서 얻은 개선입니다."
→ 우리한테 걸린 이유: 규칙 ①은 누가 채점하는지를 막았지만, 같은 채점자가 매번 같은 답을 내는지는 한 번도 안 봤다. 우리 채점은 정답 대조가 안 되는 판단형이라, 판정이 흔들려도 흔들린다는 사실 자체를 알 방법이 없다.
→ 재기도 전에 나온 것: 지금까지 쌓인 재생산 107편의 판정 기록을 전수로 열었다. 107편 전부 통과 — 떨어진 게 하나도 없었다. 그중 24편은 한 항목만 더 어긋났으면 탈락인 문턱 통과, 6편은 옛 허용치로 통과(러너 하나가 기준을 하드코딩해 두고 있었다), 22편은 원본 기준선이 적용된 적조차 없었다 — "전작품 적용 완료"라고 기록해 둔 채로. 여기에 이미 아는 사실이 겹친다. 씬 순서를 일부러 뒤섞은 대본을 넣어봤을 때 채점기가 잘 못 잡아냈다. 무딘 칼로 재면 뭐든 통과한다.
→ 지금: 문턱 5편 + 만점 2편을 골라 3번씩 재채점 중이다. 결과는 셋 중 하나 — ⓐ 다 같음(전원 통과는 진짜) / ⓑ 문턱만 갈림(그 구간에만 3표) / ⓒ 만점까지 갈림(107편 전부 재검토). 결과를 보기 전에 판정 기준부터 적어뒀다 — 규칙 ②를, 규칙을 만드는 일 자체에도 적용한 것이다.
돌아보면 이 스킬은 기능 목록이 아니라 사고 이력의 박제다. 그리고 이게 스킬을 만드는 진짜 이유라고 생각한다 — 매번 잔소리로 붙일 수는 없는 규칙들을, 한 번 박아두고 자동으로 적용받는 것.
4. 스킬 바깥에 교정 루프가 하나 더 필요했다
스킬은 실행기다. 시키면 정해진 규칙대로 돌린다. 그런데 그 규칙 자체가 틀렸으면? 스킬은 틀린 채로 완벽하게 돌아간다.
그래서 스킬 바깥에 교정 루프를 하나 더 뒀다. 위키의 진단을 실제 대본회의 판정과 매번 대조하는 것이다.