Harness Engineering — Skill to Agent

스킬은 어떤 모델로 돌지
고를 수가 없다

스킬(skill)은 AI에게 절차를 알려주는 문서입니다. 그런데 이 문서에는 어떤 모델을 쓸지 적는 칸이 없고, 대화창 안에서 그대로 실행돼 탐색 기록이 대화를 밀어냅니다. 그래서 18개에 별도 에이전트(agent)를 붙였습니다. 처음엔 반쪽이었습니다 — 옮긴 것이 절차가 아니라 실행할 자리뿐이었거든요. 그걸 확인하고 세 번에 걸쳐 메운 기록입니다.

18에이전트를 붙인 스킬
0처음 옮긴 절차 줄
3메우기까지 걸린 단계
93%스킬 본문 감소
2게이트를 뚫은 방법
스킬은 어떤 모델을 쓸지 고를 수 없다

스킬은 절차를 적은 문서입니다. AI가 그 문서를 읽고 대화창 안에서 그대로 실행합니다. 여기서 문제가 둘 나옵니다. 첫째, 실행 중 나온 탐색 기록과 긴 출력이 전부 대화에 쌓입니다. 대화에 담을 수 있는 양(컨텍스트 윈도우)은 정해져 있으니, 정작 중요한 앞부분이 밀려납니다. 둘째, 스킬 문서에는 모델을 지정하는 칸이 없습니다. 무거운 분석이든 가벼운 변환이든 같은 모델로 돌아갑니다.

같은 일을 두 방식으로 — 대화창에 무엇이 쌓이는가 이전 · 스킬을 대화창에서 그대로 실행 절차 문서를 읽는다 탐색·검색·명령을 실행한다 그 기록이 전부 대화에 남는다 모델은 고를 수 없다 — 지정하는 칸이 없다 대화가 밀려난다 앞부분이 사라지고 판단 품질이 떨어진다 이후 · 무거운 구간만 별도 에이전트에게 에이전트가 자기 대화창에서 실행한다 원본 결과는 파일로 남긴다 돌려주는 건 판정과 파일 경로뿐 역할별로 모델을 지정할 수 있다 대화는 그대로 남는다 탐색 기록이 아니라 결론만 들어온다 옮긴 것은 스킬 전체가 아니다 스킬은 진입점과 절차서로 남고, 무거운 실행 구간만 에이전트에게 넘어간다
한 일 — 실행할 자리만 떼어냈다

에이전트 18개가 새로 생겼습니다. 다만 옮긴 것은 일하는 방법이 아니라 일할 자리였습니다. 얻은 것은 딱 세 가지 — 대화창이 안 더러워지고, 역할마다 모델을 정할 수 있고, 쓸 수 있는 도구를 미리 좁힐 수 있습니다.

① 대화창 격리

탐색 기록이 안 쌓인다

에이전트는 자기 대화창에서 돌고, 돌아오는 것은 판정과 파일 경로뿐입니다. 판정하는 쪽은 격리가 본질이기도 합니다 — 만든 사람의 설명을 안 듣고 산출물만 봐야 자기채점이 안 됩니다.

18
에이전트 수
14
공통 계약 줄
② 모델 지정

이게 진짜 이유다

판정·분석하는 8개는 상위 등급, 정해진 절차를 많이 돌리는 10개는 중간 등급. 스킬 문서에는 이 칸이 아예 없습니다 — 무거운 분석이든 가벼운 변환이든 같은 모델로 돌아갑니다.

8 / 10
상위 / 중간
1M
고정 컨텍스트
③ 도구 제한

에이전트마다 다르다

에이전트마다 쓸 수 있는 도구를 미리 정해뒀습니다. 18개 전부 목록이 붙어 있고, 판정만 하는 에이전트는 읽기 전용입니다. 외부 지식을 모으는 에이전트는 이 기록 이후에 쓰기와 실행을 떼어내 읽기와 검색만 남겼습니다 — 믿을 수 없는 외부 내용을 다루는 역할이라서.

36
바뀐 파일
+846
추가된 줄

돌려주는 형식도 계약으로 못 박았습니다. 이 계약 14줄이 에이전트 18개 파일에 들어간 내용의 사실상 전부입니다 — 그게 다음 절의 문제입니다.

에이전트가 끝난 뒤 — 무엇이 어디로 가는가 에이전트 자기 대화창에서 실행 원본 파일로 저장 판정 + 경로 대화창으로 다시 열지 않는다 필요하면 경로를 넘긴다 계약 세 줄 원본 출력을 그대로 돌려주지 않는다 · 파일로 남기고 경로만 돌려준다 호출한 쪽은 그 파일을 다시 읽지 않는다 · 다시 시킬 땐 새 에이전트를 띄운다
마지막 줄이 중요합니다. 같은 에이전트를 다시 부르면 이전 대화가 남아 있어 판단이 오염됩니다. 그래서 재실행은 항상 새로 띄웁니다.
안 한 일 — 절차는 한 줄도 옮기지 않았다

이 기록을 쓰면서 실제 파일을 세어 봤습니다. 에이전트 18개의 본문은 16개가 서로 완전히 똑같았습니다. 위의 계약 14줄이 전부이고, 원래 스킬이 갖고 있던 절차는 한 줄도 넘어가지 않았습니다.

원래 스킬 절차 분량 (메움① 직전) 에이전트에 옮겨진 양 에이전트 본문의 정체
외부 지식 수집 1,678 0 공통 계약 14줄 + 나중에 붙은 보안 문구 23줄
테스트 시나리오 작성 937 0 공통 계약 14줄 — 고유 내용 없음
스킬 채점 770 0 공통 계약 14줄 — 고유 내용 없음
자가개선 분석 543 0 공통 계약 14줄 — 고유 내용 없음
나머지 14개 각 수백 줄 0 18개 중 승격 직후 16개가 고유 줄 0줄 — 글자까지 동일
그래서 이건

"스킬을 에이전트로 바꿨다"기보다 "스킬 앞에 실행용 봉투를 씌웠다"가 정확합니다. 규칙과 절차는 스킬에 그대로 있고, 에이전트가 새로 가진 것은 어떤 모델로 돌지·어떤 도구를 쓸지·무엇을 돌려줄지 세 가지뿐입니다. 이게 나쁜 설계는 아닙니다 — 다만 그 봉투에 절차서로 가는 길이 빠져 있었습니다.

메움 ① — 절차서로 가는 길을 적어 넣었다

절차가 스킬에 남은 것 자체는 괜찮습니다. 정본이 하나여야 어긋나지 않으니까요. 문제는 에이전트 18개 어디에도 "그 스킬을 읽어라"는 말이 없었다는 것입니다. 스킬이 일을 넘길 때 쓰는 예시 문장도 빈칸이었습니다. 그 상태로 부르면 에이전트는 자기가 무슨 순서로 일해야 하는지 모릅니다.

1

부른다

스킬이 "이 구간은 에이전트에게 넘겨라"라며 에이전트를 부릅니다. 넘기는 문장은 예시 그대로 빈칸이었습니다 — 무엇을 어떤 순서로 하라는 내용이 없습니다.

2

에이전트에겐 절차가 없다

에이전트 파일에는 "결과를 어떻게 돌려줄지"만 적혀 있습니다. 무슨 일을 어떻게 하는지는 없습니다. 그러면 남는 선택지는 하나 — 알아서 지어내는 것입니다.

3

길을 적어 넣었다

에이전트 18개에 "네 절차서는 이 파일이다. 시작할 때 먼저 읽어라. 못 읽으면 짐작으로 하지 말고 그 사실을 돌려줘라"를 넣었습니다. 절차를 복사하지는 않았습니다 — 두 벌이 되면 반드시 어긋나기 때문입니다.

4

힌트 없이 시켜봤다

채점 기준을 한 마디도 알려주지 않고 채점을 시켰습니다. 에이전트는 자기 절차서를 가장 먼저 읽었고, 그 문서가 정해둔 8개 축·120점 만점 형식 그대로 결과를 냈습니다. 제가 준 지시에는 그 형식이 없었으니, 스스로 읽었다는 증거입니다.

고백

이 구멍은 이 페이지를 쓰다가 발견했습니다. 처음 이 글은 "무거운 실행 구간 18개를 떼어냈다"고 적혀 있었는데, 그게 사실인지 파일을 세어 보다가 절차가 한 줄도 안 옮겨졌다는 걸 알았습니다. 기록을 쓰는 일이 기록 대상을 고치게 만든 셈입니다. 다만 여기까지는 "읽어라"라는 문장일 뿐이었습니다 — 안 읽고 지어내도 아무것도 막지 않았습니다. 그 다음 두 번이 그걸 메웁니다.

메움 ② — 문장을 검문소로 바꿨다

"절차서를 읽어라"는 에이전트 파일에 적힌 글일 뿐이라, 안 읽고 지어내도 아무 일도 일어나지 않았습니다. 그래서 에이전트가 일을 마치는 순간에 걸리는 훅(hook)을 걸었습니다. 종료 직전에 검사하는 검문소인 셈입니다. 자기 절차서를 읽은 기록이 없으면 그 자리에서 종료를 막고, 읽어야 할 파일 경로를 알려줍니다.

막는 시점

일을 끝내려 할 때

에이전트가 종료를 선언하는 순간 그 에이전트의 작업 기록을 훑습니다. 자기 절차서를 읽은 흔적이 없으면 종료를 거부합니다. 시작을 막는 게 아니라 끝을 막습니다 — 읽을 기회를 주고 나서 확인하는 것입니다.

대상 목록

적어두지 않는다

어떤 에이전트를 검사할지 목록으로 박아두면 시간이 지나며 반드시 어긋납니다. 그래서 에이전트 파일에 절차서 표시가 붙어 있는지를 그때그때 훑어 대상을 정합니다. 새 에이전트가 늘어도 목록을 고칠 필요가 없습니다.

막다가 갇히지 않기

한 번만 막는다

같은 에이전트를 계속 막으면 영원히 못 끝내는 무한 루프가 됩니다. 그래서 한 에이전트당 한 번만 막고, 그 뒤에도 안 지키면 경고만 남기고 통과시킵니다. 기록을 읽을 수 없는 상황(파일 없음·해석 실패)도 전부 통과입니다 — 확실한 위반만 막습니다.

실제 발화

등록 이후 지금까지 11번 작동해 1번 막고 10번 통과시켰습니다(7월 28일 실측, 계속 늘어납니다). 문장이던 규칙이 처음으로 실제 동작이 된 지점입니다.

메움 ③ — 절차를 아예 꺼내, 대화창에서 못 읽게 했다

검문소까지 세워도 한 가지가 남습니다. 스킬 파일 안에 절차 전문이 그대로 있으니, 그 스킬을 부르는 것만으로 수백 줄이 대화창에 쏟아집니다. 그래서 절차를 별도 파일로 꺼냈습니다(PROCEDURE.md). 스킬 파일에는 "무엇을 누구에게 시킬지"만 남고, 절차 전문은 에이전트만 읽습니다.

스킬 전 (메움③ 직전) 꺼낸 절차
외부 지식 수집 1,681 50 1,642
테스트 시나리오 작성 940 31 920
스킬 채점 773 30 753
자가개선 분석 546 32 525
18개 합계 8,709 606 8,300줄이 밖으로 — 93% 감소

앞의 "안 한 일" 표와 숫자가 3줄씩 다른 것은 재는 시점이 달라서입니다. 그 표는 메움① 직전, 이 표는 메움③ 직전을 잽니다. 그 사이에 메움①이 스킬마다 "이 파일이 절차서다"라는 3줄을 넣었습니다.

여기서 성질이 바뀐다

①과 ②는 "읽어라"를 지시하고 검사하는 방식이었습니다. ③은 다릅니다 — 대화창에서 그냥 실행하는 것이 아예 불가능해집니다. 절차가 그 파일에 없으니 읽을 것이 없기 때문입니다. 규칙을 지키게 만드는 대신, 어길 방법을 없앤 쪽입니다.

적대 리뷰가 잡은 권한 상승 경로

다른 모델(GPT)에게 이 변경을 8라운드에 걸쳐 반박시켰습니다. 그중 하나는 제가 만든 구멍이었습니다. 자동 반영이 건드릴 수 있는 폴더 목록에 스킬 폴더를 넣어둔 것입니다.

1
스킬 문서에 문장을 덧붙일 수 있었다

외부에서 수집한 내용을 규칙으로 반영하는 자동 경로가 있습니다. 그 경로가 쓸 수 있는 폴더에 스킬 폴더가 들어 있었습니다. 즉 수집한 웹 문서가 기존 스킬 문서 끝에 문장을 붙일 수 있었습니다.

2
붙은 문장은 읽는 순간 지시가 된다

스킬은 절차서입니다. 그 문서를 읽은 에이전트는 적힌 대로 행동합니다. 그러니 덧붙은 문장은 설명이 아니라 명령이 됩니다. 웹에서 주워온 글이 하네스를 조종할 수 있는 길이 열려 있었던 셈입니다.

3
쓸 수 있는 폴더를 좁혔다

자동 반영이 손댈 수 있는 곳을 지식 폴더와 규칙 폴더 둘로 줄이고, 스킬 변경은 자동 반영 대상에서 뺐습니다. 스킬을 고치려면 사람이 검토해야 합니다.

4
검문소를 "읽은 척"으로 통과할 수 있었다

위에서 세운 검문소는 "절차서를 읽었는가"만 봤습니다. 그래서 파일을 열되 맨 첫 줄만 읽어도 통과됐습니다. 절차를 하나도 못 봤는데 읽은 것으로 집계된 것입니다. 이제는 분량 제한 없이 읽거나 최소 200줄 이상 읽어야 인정합니다.

5
검사 대상이 0개여도 통과였다

구조 검사기가 잘못된 경로를 보면 "검사한 스킬 0개, 문제 없음"으로 초록불이 떴습니다. 아무것도 안 봤는데 합격입니다. 이제는 검사 대상이 0개면 측정 실패로 간주해 멈춥니다 — 못 재는 것과 문제 없는 것은 다릅니다.

부수 수정

같은 리뷰에서 되돌리기 범위도 고쳤습니다. 여러 제안을 한꺼번에 되돌리던 것을 제안 하나 단위로 바꿨습니다. 그러지 않으면 뒤 제안이 실패했을 때 앞서 성공한 변경까지 사라져, 기록에는 성공이 남고 실제 파일은 되돌아간 상태가 됩니다.

닫지 못한 것

전부 해결했다고 쓰면 그게 거짓 보고입니다. 구조적으로 남은 것과 아직 확인하지 못한 것을 나눠 적습니다.

항목 상태 내용
파일 바꿔치기 잔존 경로가 안전한지 확인한 직후에 그 경로를 다른 곳으로 바꿔치기하면 검사를 통과합니다. 셸 스크립트로는 확인과 사용을 한 동작으로 묶을 수 없어 원리적으로 남습니다. 대신 그 자동 경로 자체를 기본 차단으로 돌렸습니다.
위임 지시의 강제력 닫음 문장이던 위임 지시가 검문소와 구조 두 겹으로 바뀌었습니다. 절차서를 안 읽으면 종료가 막히고, 절차 자체가 스킬 파일 밖으로 나가 대화창에서 그냥 실행하는 것이 불가능해졌습니다.
효과 측정 부분 스킬을 부를 때 들어오는 양은 잽니다 — 8,709줄 → 606줄. 다만 이건 파일 크기이지 실제 작업 품질이 아닙니다. 같은 일을 승격 전후로 돌려 비교한 적은 아직 없습니다.
맥락 전달 비용 상충 에이전트는 지금까지의 대화를 모릅니다. 필요한 경로·수치를 일일이 넘겨줘야 합니다. 넘기는 걸 빠뜨리면 에이전트가 처음부터 헤매고, 그 비용이 격리로 얻은 이득을 깎습니다.
목록 미등록 남음 공유용 미리보기 이미지는 이번에 만들었습니다. 다만 아직 첫 화면 목록에 올리지 않아, 주소를 직접 알아야 들어올 수 있습니다.
절차서 연결 닫음 에이전트가 자기 절차서를 읽으라는 말이 없던 문제는 이 글을 쓰다가 발견해 메웠습니다. 지금은 에이전트마다 자기 절차서 경로를 갖고 있어, 위 표의 "고유 0줄"은 승격 직후의 값이지 현재 상태가 아닙니다. 안 읽고 지어내는 것을 막는 장치는 메움 ②와 ③에서 붙였습니다.
한 줄 요약

옮긴 것은 절차가 아니라 실행할 자리였습니다. 처음엔 그게 반쪽인 줄도 몰랐고, 파일을 세어 보고서야 절차가 한 줄도 안 옮겨진 걸 알았습니다. 그래서 세 번에 걸쳐 메웠습니다 — 길을 적어 넣고, 안 읽으면 못 끝내게 막고, 끝내 절차를 파일 밖으로 꺼내 대화창에서 읽을 수 없게 했습니다. 마지막 것만이 규칙이 아니라 구조입니다.