진행률을 목표 대비로 바꾸고 서브에이전트 시스템을 구축한 날

26년 05월 19일

진행률을 목표 대비로 바꾸다

이날은 세 가지 작업을 했는데, 전부 “기계가 인간의 의도를 정확히 포착하게 만드는” 방향이었다.

진행률 표시를 목표 대비로 바꿨고 한국어로 스킬을 부를 수 있게 했고 서브에이전트 시스템을 구축했다.

교육 플랫폼에서 파트 진행률 표시를 바꿨다.

이전에는 전체 진행률 비율만큼 프로그레스바를 채웠다.

학생이 43% 진행했으면 43%를 채웠다.

근데 이게 학생한테 별로 의미가 없다.

완료 기준이 50%인데 43%를 했다면, “거의 다

왔다”는 게 핵심 정보다.

근데 43%를 보면 “아직 멀었나”라고 느낀다.

그래서 완료 기준 대비 비율로 바꿨다.

43%를 했고 완료 기준이 50%면, 86%를 채운 것으로 보여준다.

학생이 완료 기준에 얼마나 가까워지고 있는지가 훨씬 의미 있는 정보다.

세 개 컴포넌트에 같은 계산식을 반영했다.

진행률 바, 파트 항목, 잠금 모달 전부 완료 기준 대비로 바꿨다.

한국어로 스킬을 부를 수 있게

두 번째는 CI 통과 스킬의 한국어 트리거를 추가한 거다.

이전에는 CI 관련 스킬이 영어 키워드로만 트리거됐다.

린트, 타입체크, 테스트 같은 영어 단어가 들어가야 스킬이 발동했다.

근데 한국어로 “CI 통과시켜줘”라고 해도 발동해야 하지 않나. 그래서 한국어 자연어 트리거를 추가했다.

“CI 통과시켜줘”, “CI 고쳐줘”, “CI 깨졌어”, “CI 빨간불” 같은 표현을 인식하게 만들었다.

이건 스킬 탐색 문제다.

에이전트가 어떤 스킬을 언제 부를지 description 매칭에 의존한다.

그러니까 description에 실제 사용자 표현이 포함되어 있어야 한다.

한국어 환경에서는 영어 기능명만으로는 충분하지 않다.

서브에이전트 시스템 구축

가장 큰 작업은 역할별 서브에이전트 시스템을 구축한 거다.

AI 코딩 에이전트 환경에서 단일 에이전트가 전부를 처리하는 건 한계가 있다.

탐색, 수정, 검증, 리뷰를 전부 하나가 하면 집중이 흐려진다.

그래서 역할별로 에이전트를 나눴다.

역할 분리

메인 에이전트가 작업을 조율한다.

그 아래에 전문 역할이 있다.

코드를 탐색하는 에이전트, 코드를 수정하는 에이전트, 검증하는 에이전트, 리뷰하는 에이전트. 각자 자기 역할만 한다.

코드 탐색용 MCP 도구도 연동했다.

심볼 기반 코드 탐색 도구를 써서 에이전트가 코드를 더 정확하게 찾을 수 있게 만들었다.

쓰기 권한 게이트

여기서 가장 중요한 설계 원칙이 있다.

쓰기 권한을 가진 에이전트는 작업 에이전트 딱 하나뿐이다.

나머지는 전부 읽기 전용이다.

왜 이렇게 하느냐. 검증하는 에이전트가 자기가 검증하는 코드를 직접 고칠 수 있으면, 검증의 객관성이 깨진다.

“내가 고친 걸 내가 통과시키는” 꼴이 되니까. 그래서 검증자는 코드를 고칠 수 없다.

오직 판정만 내린다.

수정은 작업 에이전트만 한다.

이 권한 분리가 검증 무결성의 기반이다.

역할을 나누되, 쓰기 권한을 하나로 몰아넣는 게 핵심이다.

컨텍스트 격리

그리고 컨텍스트도 격리했다.

상태가 필요한 구현 작업은 부모 컨텍스트를 분기해서 상속한다.

반면 독립적인 분석이나 검증은 깨끗한 컨텍스트에서 시작한다.

이전 컨텍스트의 영향을 받지 않게. 같은 컨텍스트를 공유하면 판단이 편향될 수 있다.

깨끗한 컨텍스트에서 보면 더 객관적이다.

역할마다 컨텍스트를 다르게 가져가는 게 중요하다.

이 시스템은 이후에 계속 정제됐다. 처음에는 몇 개 역할로 시작했는데, 나중에는 13개 서브에이전트로 발전했다.

근래 핵심 원칙은 이때 잡은 거다.

쓰기 권한 게이트, 컨텍스트 격리, 역할 분리. 이 세 가지가 시스템의 뼈대가 됐다.

마무리

세 작업이 전부 “기계가 인간의 의도를 정확히 포착하게 만드는” 방향이었다.

진행률은 절대량이 아니라 목표 대비 진척도로 바꿨다.

학생이 “얼마나 했나”보다 “완료에 얼마나 가까워지고 있나”가 중요하다.

스킬 트리거는 한국어 자연어를 포착하게 했다.

사용자가 “CI 통과시켜줘”라고 하면 스킬이 발동해야 한다.

description에 실제 사용자 표현이 있어야 한다.

서브에이전트는 역할을 분리해서 각자 자기 역할에 집중하게 했다.

그리고 쓰기 권한을 하나로 몰아넣어서 검증 무결성을 보장했다.

이 원칙이 이후 시스템의 뼈대가 됐다.