도구를 특정합니다. Claude Code(2026-08 기준)와 그 위에 자동 로드되는 스킬셋(브레인스토밍·플래닝 계열)에서 관찰한 것입니다. 비난이 아니라 구조적 관찰이고, 도구가 특정되어야 실용적입니다. 이후 버전에서 동작이 달라질 수 있습니다.
기계적인 작업 여러 건을 CLI 에이전트에 자율 위임했습니다. 단계가 전부 정해져 있고 판단이 필요 없는 종류의 일이라, 프롬프트에 할 일을 순서대로 적어 넘겼죠.
에이전트가 일을 안 하고 웹 브라우저 목업을 띄우려 했습니다. 다른 시도에서는 계획 문서만 쓰다가 종료했습니다. 지시한 작업은 한 줄도 실행되지 않았습니다.
실패한 게 아니라 다른 일을 하고 있었다
에이전트 환경에 스킬셋이 자동으로 로드되고 있었습니다. 프롬프트가 "무언가를 만들어달라"는 형태로 읽히는 순간 브레인스토밍 → 계획 작성 체인이 트리거되고, 에이전트는 그 흐름을 충실히 따릅니다. 실제 작업 대신 계획을 쓰는 게 그 시점에서는 올바른 행동입니다.
즉 에이전트가 실패한 게 아니라 다른 일을 하고 있었습니다. 이런 실패는 에러가 안 납니다. 종료 코드도 0입니다. 산출물을 열어봐야 "이게 내가 시킨 게 아니다"를 압니다.
해결은 프롬프트 맨 위에 실행 모드를 명시하는 가드 헤더를 붙이는 것이었습니다.
# Execution mode — strict mechanical, no skill detours
You are running as a non-interactive autonomous agent.
Do NOT:
- Load brainstorming / planning / skill-discovery skills
- Offer a "visual companion" or web browser preview
- Ask the user clarifying questions
- Switch to plan mode or write a separate plan document — the plan is below
Do:
- Execute the steps below in order
- Print one line per completed step: `[step N] OK <evidence>`
- On unrecoverable failure: `[step N] HALT <reason>` and stop이걸 붙이고 8개 작업을 일괄로 돌렸더니 7개가 즉시 14단계 자율 완료됐습니다. 나머지 1개는 별개의 이미지 처리 버그로 HALT했습니다 — 가드와 무관한 정상적인 실패입니다.
프롬프트에서 트리거 단어를 피하는 것도 같이 필요했습니다. "explore alternatives", "propose approaches" 같은 표현은 그 자체가 브레인스토밍 진입점입니다. 작업이 기계적이고 단계가 사전에 처방됐다는 걸 문장으로 명시해야 합니다.
그런데 가드가 안 통하는 영역이 있다
기계적 실행에는 가드가 작동합니다. 분석이나 리뷰 작업에는 무력했습니다.
계획 문서의 논리적 허점을 찾아달라는 read-only 작업에, 가드 헤더를 붙이고 추론 강도를 낮추고 입력을 리다이렉트까지 했는데도, 에이전트가 스킬 문서 본문을 표준 출력으로 그대로 뱉기만 하고 추론 단계에 도달하지 못했습니다. 세 번 시도해서 세 번 다 같은 패턴, 종료 코드는 0인데 토큰 사용량이 0이었습니다.
이유는 명확합니다. 기계적 작업은 단계가 명시적이라 브레인스토밍이 끼어들 자리가 없습니다. 그런데 분석 작업은 본질적으로 "탐색"이라 스킬셋이 자기 영역으로 인식합니다. 프롬프트로 그걸 막으려면 작업의 성격 자체를 부정해야 하는데, 그러면 원하는 결과도 안 나옵니다.
| 작업 성격 | 가드 효과 | 이유 |
|---|---|---|
| 기계적 실행, 단계 사전 처방 | 작동 | 탐색 진입점이 없다 |
| 분석 / 리뷰 / 허점 찾기 | 무력 | 작업 자체가 탐색이다 |
정직하게
- 분석 작업의 가드는 실패했고 대안도 우회일 뿐입니다. 출력 포맷을 극단적으로 강제하고(한 줄짜리 finding N개까지), 읽을 파일과 라인을 한정하고, 가드 실패를 가정해 다른 경로로 교차 검증을 준비하는 것 — 셋 다 근본 해결이 아닙니다.
- 설정 파일에 스킬 로더를 끄는 옵션이 없습니다. 도구 쪽 수정이 필요한데 기다리는 것 말고 할 수 있는 게 없습니다.
- "가드를 붙였더니 7/8 성공"은 통제된 비교가 아닙니다. 가드 없이 같은 8개를 돌린 대조군이 없습니다. 첫 시도가 hijack됐고 가드 추가 후 정상 실행됐다는 관찰이 전부입니다.
- 왜 토큰 사용량 0으로 종료 코드 0이 나오는지는 모릅니다. 스킬 문서를 출력하는 단계에서 무언가가 끊기는 것으로 보이지만 확인하지 못했습니다.
자동 로드되는 스킬셋은 대화형 세션에서는 대체로 도움이 됩니다 — 이 devlog의 다른 글들도 그 규율의 덕을 봤습니다. 문제는 비대화형 위임에서 그 기본값이 반대로 작동한다는 점입니다. 당신이 에이전트에 자율 위임을 돌리는데 결과가 "계획서"라면, 에이전트를 탓하기 전에 물어보세요 — 그 프롬프트, "만들어줘"로 읽힙니까, "실행해"로 읽힙니까?