플랫폼 속으로
AI 에이전트가 새 스킬을 익히는 법 - 그리고 뒷정리까지
사실만 기억하는 에이전트는 일하는 방법을 매번 처음부터 다시 짜낸다. Olano 에이전트는 그 방법을 적어 둔다. 이 글은 그 뒤에 있는 설계에 관한 것이다. 반복되는 일이 어떻게 재사용 가능한 문서화된 절차가 되는지, 자기가 쓰지 않은 스킬을 원본을 단 한 번도 덮어쓰지 않고 어떻게 개선하는지, 학습된 사본이 원본이 상류에서 갱신되는 날을 어떻게 살아남는지 - 그리고 왜 이 모든 과정이 개선해야 할 시스템을 조용히 망가뜨릴 수 없는지.
기억은 무엇이 사실인지 말한다. 스킬은 일이 어떻게 되는지 말한다.
AI 기억을 둘러싼 이야기는 대개 사실에서 멈춘다. 사실은 남겨 둘 값이 있다. 가격, 에스컬레이션 규칙, 까다로운 거래처가 누구인지. 그 층 전체를 다룬 글이 AI 에이전트는 어떻게 기억하는가이다. 정말 유용하다. 그래도 역량과 같은 것은 아니다.
역량은 절차의 문제다. 월요일 보고서는 정해진 순서로, 정해진 출처에서, 정해진 유의사항과 함께 조립된다. 환불 문의는 누가 답하기 전에 세 가지와 맞춰 본다. 분기 공급사 점검은 매번 같은 여섯 개 숫자를 뽑는다. 사실은 완벽하게 갖췄으나 절차가 없는 에이전트는 그 각각을 매번 조금씩 다르게 처리하고, 팀이 알아채는 것은 바로 그 흔들림이다.
그래서 Olano 에이전트는 기억 옆에 두 번째 종류의 산출물을 둔다. 스킬이다. 스킬은 SKILL.md 파일 하나를 담은 작은 폴더다. 이름, 한 줄 설명, 언제 꺼내 쓸지 알려 주는 트리거, 그리고 번호가 붙은 단계들. 어떤 스킬은 플랫폼에 함께 들어 있다. 어떤 것은 스킬 팩이나 마켓플레이스에서 온다. 어떤 것은 직접 쓴다. 그리고 어떤 것은 에이전트가 실제로 해 본 일에서 스스로를 위해 쓴다.
이 글이 다루는 것은 마지막 부류다.
학습된 스킬은 어디에서 오는가
에이전트의 한 턴 한 턴은 기록에 덧붙여진다. 백그라운드 처리가 일정한 주기로 그 기록을 읽는다. 가장 활발한 설정에서는 매시간, 가장 느슨한 설정에서는 네 시간마다. 그리고 읽는 것은 아직 읽지 않은 부분뿐이며, 기록마다 바이트 오프셋으로 따라간다. 같은 내용이 다시 분석되는 일은 없고, 두 실행 사이에 파일이 늘었다는 이유로 건너뛰는 일도 없다.
거기서부터, 이 처리는 일부러 잘 촉발되지 않게 만들어져 있다.
- 새 턴이 네 개보다 적으면 아무것도 하지 않는다. 오프셋은 그래도 확정한다. 그 턴들이 쌓여서 나중 실행이 과하게 해석하지 않도록 하기 위해서다.
- 깊은 추론 등급에서 돌거나, 아예 돌지 않는다. 값싼 대체 모델은 없다. 에이전트마다 깊은 실행의 하루 상한이 있다. 주기 프리셋에 따라 대략 여섯 번, 열두 번, 스물네 번. 상한이나 지출 예산이 소진되면 그 주기는 건너뛰고 다음번에 다시 시도하며, 오프셋은 확정하지 않고 남긴다. 질이 떨어진 분석은 분석이 없는 것보다 나쁘다. 자신만만하게 틀린 절차를 만들어 내기 때문이다.
- 기억이 다시 쓰이는 동안에는 물러선다. 기억 정리 처리가 잠금을 잡는다. 증류하는 쪽은 그것을 보고, 통째로 다시 쓰이는 중인 파일에 덧붙이는 대신 물러난다.
실제로 돌 때는 사실이 먼저 기억에 들어간다. 그다음, 스킬 학습이 켜져 있으면 같은 턴들이 두 번째 처리로 넘어간다.
정찰은 기록보다 먼저 라이브러리를 읽는다
학습 라이브러리가 쓰레기장이 되지 않는 것은 이 대목 덕분이다. 스킬 정찰에게 건네지는 것은 대화 하나와 「무엇을 배웠나?」라는 질문이 아니다. 건네지는 것은 대화와, 그 에이전트가 이미 가진 모든 스킬의 목록이다. 관리형 스킬과 서드파티 스킬, 즉 에이전트 자신의 작업 공간 밖에 있어 파일 도구로는 보이지 않는 것들까지 포함한다. 그리고 묻는다. 빠진 것이 있다면 무엇인가.
돌려주는 후보마다 동작이 붙어 있고, 세 동작 중 둘은 새 스킬을 전혀 만들지 않는다.
- skip - 그 능력은 이미 갖춰져 있다. 가장 흔한 결과이며, 이것은 성공이다.
- update - 기존 스킬이 거의 덮고 있어 더 날카롭게 다듬으면 된다. 후보가 대상을 지목한다.
- create - 진짜로 새롭다. 이때만 스킬이 쓰인다.
새 스킬은 이어서 두 번째 검증을 지난다. 거의 같은 이름이 있는지 훑고, 있으면 멈추고, 없으면 frontmatter가 올바른, 구조가 정돈된 SKILL.md를 쓴다. 이 검증이 끝까지 가지 못하면, 시스템은 후보를 잃는 대신 곧바로 써 둔다.
자기가 쓰지 않은 스킬을 개선하기
흥미로운 쪽은 개선이다. 가장 뻔한 구현이 바로 틀린 구현이기 때문이다.
설치한 스킬은 한 장의 문서가 아니다. 여러 파일로 된 실무 지침서일 수 있다. SKILL.md에 스크립트, 참조 표, 양식, 템플릿까지. 게다가 소유는 상류에 있다. 그것이 온 팩이 갱신되면 그 폴더는 통째로 교체된다. 그러니 그런 스킬을 제자리에서 다시 써서 「개선」한 에이전트는 한 번에 두 가지를 잘못했다. 지침서를 요약으로 짜 넣은 것, 그리고 자기 개선을 다음 갱신이 지나갈 길목에 그대로 놓아둔 것이다. 그 갱신은 개선을 조용히 지운다.
Olano는 대신 분기한다. 에이전트가 자기 것이 아닌 스킬을 처음 개선할 때는 이렇게 된다.
- 폴더 전체가 바이트 단위로 에이전트의 학습 라이브러리에 복제된다. 내부 경로 참조는 사본이 새 위치에서도 동작하도록 다시 쓰인다.
- 사본은 원본과 똑같은 이름을 그대로 쓴다. 그래서 에이전트가 스킬을 불러올 때 사본은 원본을 대체하는 것이 아니라 가린다. 원본 파일은 디스크에서 한 번도 손대지 않는다.
- 그 옆에 출처 기록이 쓰인다. 분기 시점 원본의 파일별 지문, 같은 시점 사본의 파일별 지문, 그리고 원래 SKILL.md 파일의 절 구조.
- 시작 상태의 손대지 않은 스냅샷은 따로 보관되어, 나중에 병합 기준으로 쓰인다.
이후의 개선은 모두 사본에 덧붙이는 방식으로 적용된다. 제자리 덮어쓰기 설계로는 가질 수 없는 두 성질이 여기서 나온다. 「이 개선이 무언가를 잃었는가」가 기록된 기준선에 비춰 검증할 수 있는 질문이 된다. 관련 없는 두 문서 사이의 흐릿한 비교가 아니다. 그리고 「원본이 상류에서 바뀌었는가」에 언제까지나 답할 수 있다.
보존 게이트
스스로를 고치는 시스템에서 모두가 걱정하는 고장 방식은 점진적이고 조용한 퇴화다. 지날 때마다 조금 짧아지고 조금 싱거워져, 결국 잘 돌던 것이 상투적인 한 단락이 된다. 그런 일은 없을 것이라고 약속하는 것은 공학의 답이 아니다.
그래서 스킬을 불러올 때마다 학습된 사본을 자기 자신의 기록된 시작 상태와 맞춰 본다. 다음 중 하나라도 해당하면 통과하지 못한다.
- 분기 시점에 있던 파일이 지금 없다.
- 본문 파일이 원래 크기의 절반 아래로 줄었다(약 0.5 KB 미만 파일은 제외한다. 작은 파일은 크기가 크게 달라지는 것이 당연하기 때문이다).
- SKILL.md 파일이 원본 절 제목의 3분의 1보다 많이 잃었다.
통과하지 못한 사본은 격리된다. 가리기를 멈추고 원본이 다시 쓰인다. 에이전트가 잃는 것은 개선 하나이고, 동작하는 스킬이 아니다. 게다가 이 게이트는 기계가 쓴 사본만 의도적으로 대상으로 삼는다. 사람이 손으로 쓴 학습 스킬은 결코 격리되지 않는다. 의도한 덮어쓰기는 더 짧더라도 우선해야 하기 때문이다.
발밑에서 원본이 바뀔 때
상류 스킬은 언젠가 갱신된다. 팩 갱신, 마켓플레이스 업데이트, 또는 팀의 수정. 이제 두 계보가 모두 움직인 상태이지만, 출처 기록이 있어 추측이 아닌 진짜 3-way 병합이 가능하다. 해결은 파일 단위이고, 먼저 결정적으로 한다. 결정적인 답이 없는 곳에서만 모델에 묻는다.
| 원본 | 학습된 사본 | 어떻게 되는가 |
|---|---|---|
| 변경 없음 | 무엇이든 | 학습된 사본을 둔다. 할 일 없음. |
| 변경됨 | 손대지 않음 | 상류의 새 판을 가져오고, 내부 경로 참조를 다시 쓰고, 출처를 새 원본 지문으로 다시 찍는다. |
| 삭제됨 | 손대지 않음 | 학습된 사본에서도 지운다. 상류가 이유가 있어 없앤 것이고, 이쪽에도 반대할 근거가 없다. |
| 삭제됨 | 변경됨 | 학습된 사본을 두고 충돌 메모를 붙인다. 누군가 살펴봐야 할 건이고, 그때까지 버려지는 것은 없다. |
| 변경됨 | 변경됨 - 본문 | 기록된 기준에 대한 3-way 병합. 깔끔하게 병합되면 적용한다. 진짜 충돌은 학습된 사본을 두고, 의미 조정은 라이브러리 처리에 넘긴다. |
| 변경됨 | 변경됨 - 스크립트 또는 바이너리 | 학습된 사본을 두고 표시한다. 코드는 결코 자동 병합하지 않는다. 조용히 망가진 스크립트는 낡은 스크립트보다 나쁘다. |
그 뒤 지문과 기준 스냅샷은 병합된 상태로 갱신된다. 바로 이것이 루프를 수렴시킨다. 같은 어긋남이 되풀이해 보고되지 않고, 보존 게이트는 아주 오래된 기준이 아니라 새 기준에 대해 계속 작동한다. 지금 게이트를 통과하지 못하는 사본은 병합에서 아예 제외된다. 퇴화한 사본을 다시 병합하는 것은 그것을 세탁해 들여보내는 일이기 때문이다.
라이브러리 전체를 한 번에
스킬을 하나씩 검증하는 것은 라이브러리를 일관되게 유지하는 것과 다르다. 그래서 별도의 처리가 자기 일정에 따라 그 에이전트의 스킬을 전부 읽고, 모음 전체를 하나의 작업 단위로 다룬다. 중복과 거의 중복을 하나의 정본으로 합치되 이름은 가장 좋은 것, 트리거는 가장 분명한 것, 단계는 합집합으로 한다. 합쳐서 비운 폴더는 지우고, 원본이 어긋난 사본은 다시 병합하고, 살아남은 것은 개선한다.
이 경계는 권고가 아니라 강제다. 이 처리에게 원본과 관리형 스킬은 읽기 전용이다. 편집, 병합, 삭제는 학습 라이브러리 안에서만 할 수 있다. 시작하기 전에 손댈 수 있는 모든 파일의 스냅샷을 남기고, 끝나면 무엇을 바꿨는지 되돌리기 버튼 하나와 함께 보고한다.
작업 공간 자체에도 같은 처리
에이전트 자신의 설정도 글이며, 몇 달에 걸쳐 조금씩 쓰인 글은 똑같이 쌓인다. 같은 지시가 세 곳에서 세 가지로 쓰이고, 선호가 엉뚱한 파일에 적히고, 같은 메모가 열한 날치 일지에 잇달아 나타나고, 이따금 조용히 서로 어긋나는 지시가 둘 놓인다.
그것을 맡는 것이 작업 공간 정리 처리다. 에이전트의 정체성, 행동, 지시, 장기 기억 파일과 최근 두 주의 일지를 읽고 제자리에서 다시 쓴다. 표현만 다른 중복을 합치고, 모순을 없애고, 관련된 내용을 분명한 제목 아래 모으고, 내용을 원래 있어야 할 파일로 옮긴다. 일지의 중복 제거가 가장 과감한 것은 반복이 거기에 가장 빨리 모이기 때문이다.
그것이 따르는 지시는 한 문장뿐이지만, 그 한 문장이 모든 무게를 진다. 에이전트의 목소리와 고유한 지시 하나하나를 지켜라. 합치는 것은 되지만, 결코 지우지 말라. 라이브러리 처리와 마찬가지로, 대상 파일은 먼저 스냅샷을 남기고, 결과는 원클릭 되돌리기와 함께 보고된다.
두 가지 방침, 그 차이가 중요하다
이 루프의 모든 것이 같은 방식으로 다뤄지지는 않으며, 그 선 긋기는 편의가 아니라 의도다.
- 에이전트에게 무엇을 하라고 하는지를 바꾸는 일은 제안에 그친다. The pass that reviews recent work and concludes an agent's instructions should be sharper does not edit those instructions. It writes grounded proposals into a review queue, and they wait - even with Fully Autonomous on, which otherwise lets new skills, memory and tidy-ups apply on their own. Nothing rewrites an agent's instructions because a background job thought it should, unless a deployment owner has explicitly lifted that hold for the agent.
- 손실 없는 정리는 스냅샷과 되돌리기를 붙여 바로 적용된다. 기억 중복 제거, 똑같은 학습 스킬 둘을 하나로 합치기, 반복된 메모 합치기. 이것들은 에이전트가 하는 일을 바꾸지 않고, 적힌 것이 얼마나 정돈됐는지만 바꾼다. 하나하나에 사람의 클릭을 요구하면 읽지 않고 승인하는 습관을 들이게 되고, 그것은 정말 중요한 대기열에 가장 나쁜 결과다. 그래서 스냅샷을 남긴 뒤 바로 적용하고, 실행마다 무엇을 바꿨는지 되돌리기와 함께 보고한다.
이 모두를 끌 수 있다. 증류, 스킬 학습, 라이브러리 관리, 작업 공간 정리, 기억 정리. 각각이 독립된 스위치이고, 배포 전체에 설정할 수 있으며, 에이전트 단위로 양방향 덮어쓰기가 된다. 그래서 「이 에이전트만 빼고 전부 끔」이 실제로 설정 가능한 상태다. 그 위에 마스터 스위치가 있고, 일정대로 돌릴지 누가 요청할 때만 돌릴지에 대한 별도의 선택이 있다. 주기 프리셋(느슨함, 균형, 적극)은 일정과 하루 깊은 추론 상한을 함께 움직이며, 모두 같은 배포의 다른 모든 것을 다스리는 엄격한 지출 통제.
완전한 루프 한 바퀴는 이렇게 보인다
이 복리는 느리고 구체적이다. 운영 에이전트가 세 주 내리 손으로 만든 보고서는 네 번째 주에 문서화된 절차로 존재한다. 업종에 한 발 모자랐던 팩 스킬은 이쪽의 수정을 담은 채로, 공급사의 다음 갱신도 눌리지 않고 받아들인다. 겹치는 안내로 네 페이지까지 부풀었던 지시 파일은 겹치지 않는 두 페이지가 되고, 지운 판에만 있던 문장은 남긴 판에 그대로 남아 있다.
이것은 무엇이 아닌가
모델 가중치를 학습하거나 미세 조정하거나 손보지 않는다. 이 루프 전체는 모델보다 한 층 위에서, 자사만의 격리된 배포 안에 평범한 말로 쓰인 산출물에 작용한다. 스킬, 기억 항목, 지시 제안. 모두 파일이다. 팀은 그것을 읽고, 손으로 고치고, 승인하고, 되돌리고, 누가 언제 무엇을 바꿨는지 감사할 수 있다.
이것은 우리가 우회하고 있는 한계가 아니다. 오히려 이 루프를 믿어야만 하는 것이 아니라 다스릴 수 있는 것으로 만드는 이유다. 그리고 같은 이유로, 아래의 모델은 에이전트가 배운 것을 잃지 않고 바꿔 낄 수 있다.
함께 읽을 글
「플랫폼의 안쪽」 시리즈의 나머지, 그리고 더 깊이 들어가는 설명서 장들.
자주 묻는 질문
스킬이란 무엇이고, 기억과 어떻게 다릅니까?
기억은 귀사에 관해 무엇이 사실인지를 담습니다. 가격, 사람, 결정, 선호. 스킬은 어떤 일이 어떻게 되는지를 담습니다. 이름, 설명, 언제 꺼내 쓸지 알려 주는 트리거, 번호가 붙은 단계로 된 짧은 문서 절차입니다. 기억은 에이전트가 같은 질문을 두 번 하지 않게 합니다. 스킬은 같은 절차를 두 번 다시 만들어 내고 그때마다 조금씩 다르게 하는 일을 막습니다.
에이전트가 우리가 준 스킬을 다시 씁니까?
아니요. 귀사에서 온 것, 스킬 팩에서 온 것, 마켓플레이스에서 온 것은 읽기 전용 원본이며 편집되거나 삭제되지 않습니다. 하나를 개선할 때는 스킬 폴더 전체를 학습 라이브러리로 복제하고 그 사본을 편집합니다. 사본은 원본의 이름을 그대로 쓰므로 스킬을 불러올 때 우선합니다. 원본 파일은 디스크에서 손대지 않은 채 남고, 바로 그래서 나중의 상류 갱신이 사라지지 않고 병합될 수 있습니다.
학습된 스킬이 더 나쁜 요약으로 퇴화하는 것을 무엇이 막습니까?
스킬을 불러올 때 돌아가는 보존 게이트입니다. 학습된 사본은 자기 자신의 기록된 시작 상태와 맞춰집니다. 본문 파일이 원래 크기의 절반 아래로 줄었거나, 원래 절 제목의 3분의 1보다 많이 사라졌거나, 처음에 있던 파일이 지금 없다면, 그 사본은 격리되고 원본이 대신 쓰입니다. 약속이 아니라 구조적인 점검입니다. 그리고 사람이 손으로 쓴 사본은 제외됩니다. 의도한 덮어쓰기는 계속 우선하기 때문입니다.
원래 스킬이 나중에 갱신되면 어떻게 됩니까?
분기 시점 상태의 스냅샷에 대해, 파일 단위로 3-way 병합을 합니다. 상류가 바꾸고 학습된 사본이 한 번도 손대지 않은 파일은 상류에서 가져옵니다. 학습된 사본이 바꾸고 상류가 손대지 않은 파일은 그대로 둡니다. 양쪽이 모두 바뀐 곳에서는 본문을 공통 기준에 대해 병합하고, 진짜 충돌은 라이브러리 처리에 넘겨 조정합니다. 스크립트와 바이너리는 결코 자동 병합하지 않습니다. 학습된 사본을 두고 표시합니다. 조용히 망가진 스크립트가 낡은 것보다 나쁘기 때문입니다.
제게 묻지 않고 바뀌는 것이 있습니까?
무엇이 바뀌는지에 따라 다르고, 그 선 긋기는 의도적입니다. 에이전트에게 무엇을 하라고 하는지를 바꾸는 것, 즉 지시와 행동은 제안으로 검토 대기열에 쓰이며 스스로 적용되는 일이 없습니다. 손실 없는 정리, 곧 기억 중복 제거, 중복된 학습 스킬 병합, 반복된 메모 합치기는 바로 적용될 수 있지만 스냅샷을 남긴 뒤에만 그렇고, 그런 실행은 모두 무엇을 바꿨는지 원클릭 되돌리기와 함께 보고합니다. 이 동작들은 하나씩 따로 끌 수도 있고, 배포 전체로도, 특정 에이전트 하나만으로도 설정할 수 있습니다.
이것은 제 데이터로 AI 모델을 다시 학습시키는 것입니까?
아니요. 모델 가중치를 학습하거나 미세 조정하지 않습니다. 이 루프가 만들어 내는 모든 것은 귀사 배포 안의 평범한 markdown 파일입니다. 스킬 하나, 기억 항목 하나, 지시 변경 제안 하나. 팀은 그것을 읽고, 비교하고, 손으로 고치고, 승인하고, 되돌릴 수 있습니다. 바로 그 읽을 수 있음이 핵심이며, 개선 루프를 믿어야만 하는 것이 아니라 다스릴 수 있는 것으로 만듭니다.
배운 것을 적어 두는 시스템을 도입하십시오
아래에 있는 일이 진짜여야 복리가 의미를 갖습니다. 상담을 예약해 주십시오. 업무 흐름을 그리고, 견적을 내고, 승인해 주신 뒤에만 만들기 시작합니다.