AI 에이전트의 생존 비결 — 컨텍스트 오염을 막는 위임과 스킬 아키텍처
sessions_spawn 기반 위임 구조와 SKILL.md 시스템 설계 실전기
핵심 요약
- 하나의 에이전트에 모든 작업을 넣으면 컨텍스트 오염으로 환각이 발생한다 — 위임이 핵심이다
- spawn 시
model을 반드시 명시해야 한다(버그 #7330). 누락하면 부모 모델을 상속해 비용이 7배 청구된다 - "1 서브에이전트 = 1 태스크 = 최소 컨텍스트" 원칙으로 9b급 모델에서도 완벽한 성공률을 달성했다
배경
"메모리 정리해줘"라는 단순한 명령이 내부적으로는 파일 10개 순독, Retain 태그 파싱, bank/ 4개 파일 병합, 보조 스크립트 7개 실행으로 이어진다. 이를 단일 에이전트 세션에서 처리하면 수만 토큰의 인지 부하가 쌓이고, 결정적 순간에 환각이나 엉뚱한 결론을 낸다. 이것이 '컨텍스트 오염'이다.
본문
sessions_spawn — 도구로서의 위임
{
"agentId": "memory-runner",
"model": "ollama/qwen3.5:9b",
"cleanup": "delete",
"message": "staging/ world-retain-extract.json을 읽고 W태그 항목을 추가하라."
}
핵심 제약: cleanup: "delete". 작업 완료 시 세션을 자동 삭제한다. 이 설정 없이 매일 Reflect(최대 7개 spawn)를 돌리면 한 달이면 200개 넘는 죽은 세션이 Gateway 성능을 저하시킨다.
spawn 가드레일
{
"agents": {
"defaults": {
"subagents": {
"maxConcurrent": 8,
"maxSpawnDepth": 5,
"maxChildrenPerAgent": 10,
"archiveAfterMinutes": 60
}
}
}
}
maxConcurrent: 8은 ollama 병목을 고려한 값이다. maxChildrenPerAgent: 10은 Reflect의 7개 Runner에 여유분을 더한 것이다.
버그 #7330 — 모델 상속 문제 (v2026.3.13 기준)
spawn 시 model을 명시하지 않으면 서브에이전트가 부모의 모델 체인을 그대로 상속한다. memory-runner가 로컬 모델 대신 Gemini Flash로 실행되어, 한 달 내내 API 비용이 예상의 7배가 청구되었다.
해결책: 버그 수정 전까지 spawn 시 model을 반드시 명시.
순차 실행 전략
로컬 ollama는 요청을 큐에 넣고 순서대로 처리한다. 에이전트 7개를 동시 spawn하면 타임아웃 오류 확률이 높아진다.
spawn Runner #1 → [완료 대기] → [sleep 10]
spawn Runner #2 → [완료 대기] → [sleep 10]
...
sessions_list로 폴링하지 말 것 — spawn 도구가 반환하는 완료 이벤트를 믿는 것이 올바른 이벤트 기반 아키텍처다.
스킬(Skills) 시스템
SKILL.md 형식의 마크다운 파일을 skills/ 디렉토리에 넣으면 OpenClaw가 자동 인식한다.
---
name: reflect
description: Reflect 파이프라인 오케스트레이터
disable-model-invocation: true
requires.bins: ["find", "python3"]
---
로딩 우선순위: 워크스페이스 > 사용자 로컬 > 번들. 워크스페이스에 같은 이름의 파일을 만들면 번들 스킬을 오버라이드할 수 있다.
시행착오 / 주의사항
allowAgents로 spawn 범위를 제한하지 않으면 I/O만 해야 할 파이프라인에서 researcher가 spawn되어 멋대로 웹 검색을 실행한다allowBundled설정으로 불필요한 번들 스킬 로딩을 차단해 컨텍스트 낭비를 막는다
마무리
1 sub-agent = 1 task = minimum context. 작은 작업을 위임하는 것이 로컬 모델(9b급)의 안정성을 보장하는 유일한 길이다. 완료 이벤트를 믿고, model을 항상 명시하고, cleanup: delete를 잊지 말 것. Reflect가 매일 새벽 3시에 문제 없이 돌아가는 것이 이 위임 구조의 증거다.
댓글
댓글 쓰기