
AI Agent Skill 설계의 함정: 당신이 작성한 규칙이 실행되지 않는 이유
요약
AI 에이전트의 Skill 설계 시 규칙을 'Principles' 섹션에 작성하면 에이전트가 이를 무시하는 문제가 발생합니다. 에이전트는 오직 'Procedure' 섹션의 단계별 절차만을 실행 명령으로 인식하기 때문입니다.
핵심 포인트
- 에이전트는 Principles나 Notes 섹션을 읽지 않고 무시함
- 모든 강제 규칙은 반드시 Procedure(절차) 섹션 내에 포함되어야 함
- 에이전트의 실행 로직은 Procedure 리스트를 스캔하고 실행하는 것에 국한됨
- 사람을 위한 문서 구조와 에이전트를 위한 Skill 설계 구조는 근본적으로 다름
우리는 아주 오랜 시간이 걸려서 한 가지 사실을 배웠습니다. AI agent를 위한 skill을 작성하는 것은 사람을 위한 문서를 작성하는 것과 완전히 다른 일이라는 점입니다.
문제는 어떤 규칙을 썼느냐가 아닙니다. 문제는 규칙을 어디에 두었느냐입니다.
하나의 실제 교훈
우리에게는 vlm-analyze라는 skill이 있습니다. 이 skill은 VLM(시각 언어 모델, Vision Language Model) 사용 시의 「sensor/brain split」 원칙을 정의합니다:
- VLM은 화면을 묘사(sensor)할 수만 있으며, 추론(brain)할 수 없다.
- VLM의 출력에는 「이다(is)」「~이다(be)」「판단(judge)」「식별(identify)」 등과 같은 추론 용어가 나타나는 것을 금지한다.
- 추론 작업은 반드시 LLM이 수행해야 한다.
이 규칙은 skill의 「Prompt 설계 원칙(Prompt Design Principles)」 섹션에 명확하고 완전하며 강한 어조로 작성되어 있었습니다.
그런데 결과는 어땠을까요?
그것은 단 한 번도 실행된 적이 없습니다.
한두 번이 아닙니다. 매번 그랬습니다. VLM의 출력에는 끊임없이 추론 용어가 등장했고, LLM은 Second-Pass Gate나 후보군 열거(candidate enumeration)도 없이 추론 결과를 그대로 정답으로 사용했습니다.
왜 그랬을까요?
AI agent가 skill을 실행할 때는 오직 Procedure(절차) 섹션의 숫자 리스트만을 스캔하기 때문입니다. agent는 「원칙(Principles)」 섹션을 읽지 않습니다. 「주의 사항(Notes)」 섹션도 읽지 않습니다. 당신이 skill 텍스트 속에 숨겨둔 깊은 의도도 읽지 않습니다.
agent에게 있어, Procedure 단계에 포함되지 않은 규칙 = 존재하지 않는 것입니다.
문서 구조의 함정
대부분의 skill은 다음과 같은 일반적인 템플릿 구조를 따릅니다:
## When to Use (트리거 조건)
## Principles (설계 원칙) ← 여기에 강제 규칙을 작성함
## Procedure (실행 단계) ← agent는 여기만 읽음
...
이 구조는 매우 합리적으로 보입니다. 사람을 위한 문서는 원래 이렇습니다. 먼저 배경을 설명하고, 원칙을 제시한 뒤, 마지막으로 단계를 알려줍니다. Anthropic의 공식 Agent Skills 규격[9] 또한 워크플로우를 조직할 때 「명확한 단계(clear steps)」와 「체크리스트(checklist)」를 사용할 것을 권장합니다. 하지만 공식 문서에는 특별한 경고가 없습니다. 만약 강제 규칙을 Procedure 이외의 섹션에 배치한다면, agent는 그것을 완벽하게 무시할 것이라는 경고 말입니다.
이것은 우리가 실전에서 발견한 사실입니다. agent의 실행 로직은 다음과 같습니다:
- Procedure 단계 리스트를 스캔한다.
- 하나씩 실행한다.
- 결과를 반환한다.
그게 전부입니다. agent는 "잠깐, Principles 섹션에 VLM은 추론할 수 없다고 되어 있었는데, 내가 그 규칙을 어겼는지 확인해봐야지"라고 말하지 않습니다. 심지어 그 섹션을 읽지도 않습니다. skill의 트리거 계층은 Procedure 섹션만을 실행 가능한 명령으로 간주하고, 비-Procedure 섹션은 「참조 정보(reference information)」로 분류하기 때문입니다.
만약 당신이 Principles 섹션에 반드시 지켜야 할 규칙(예: "VLM의 추론 판단 금지")을 적어두었다면, 그것은 완벽하게 무시될 것입니다.
이 문제는 Anthropic 규격의 결함이 아닙니다. 규격은 설계자가 스스로 조직할 수 있도록 유연성을 제공합니다. 하지만 바로 그 유연성 때문에 초보자들(우리 자신을 포함하여)은 동일한 함정에 빠집니다. 모든 텍스트가 "읽힐" 것이라고 믿으며 문서를 작성하는 마음가짐으로 skill을 작성하는 것입니다. agent는 그렇게 읽지 않습니다.
동일한 규칙이라도 「설계 원칙」 섹션에 있으면 존재하지 않는 것과 같지만, 「단계 0(Step 0)」에 두면 실행됩니다.
왜 agent의 문제가 아닌가
우리는 보통 이런 상황을 "AI가 말을 듣지 않는다"며 탓하곤 합니다. 하지만 Sidney Dekker는 우리에게 이렇게 가르쳤습니다. "왜 이 사람이 보지 못했는가를 묻지 말고, 어떤 환경이나 설계가 이러한 사각지대를 만들었는가를 물으라."
agent의 「사각지대」는 버그가 아닙니다. 그것의 설계 자체가 원래 그렇습니다. Procedure 단계 = 실행 가능한 명령, 비-Procedure 섹션 = 참조 정보. 이는 합리적인 아키텍처 선택입니다.
진짜 문제는 skill 설계자(인간 또는 다른 AI)가 문서를 작성하는 마음가짐으로 skill을 작성하여 모든 텍스트가 "읽힐" 것이라고 생각하지만, 정작 agent는 단계 리스트에 나타나는 내용만 실행한다는 사실을 모른다는 점입니다.
이것은 agent의 잘못이 아닙니다. 이것은 **문서 구조의 의미론(semantics)과 실행 의미론 사이의 간극(gap)**입니다.
3단계 해결책
1단계: 규칙 위치 교정
가장 간단한 변화는 강제 규칙을 「원칙 섹션」에서 「단계 섹션」으로 옮기는 것입니다.
단순히 "단계 섹션에서 언급"하는 것이 아니라, 단계 리스트의 특정 번호 안에 직접 써넣어야 합니다.
수정 전 (v6):
## Prompt 설계 원칙
- VLM은 관찰만 하고 판단하지 않는다 (sensor/brain split)
- 추론 용어 사용 금지 (이다/위하다/판단/식별)
...
수정 후 (v7):
절차 (Procedure)
- sensor/brain split (강제):
a. VLM 프롬프트는 반드시 「역할:」으로 시작해야 함
...
동일한 규칙을 「배경 정보」에서 「단계별 목록의 0단계」로 변경합니다. 이번에는 에이전트(agent)가 이를 실행할 것입니다.
수동 → 자동화 → 자기 진화: 규칙이 사람의 기억에서 시스템의 기관으로 변합니다.
제2층: 구조적 강제 검사
단순한 자각만으로는 부족합니다. 우리는 이 일을 보장할 **메커니즘 (mechanism)**이 필요합니다.
우리는 다음과 같은 기능을 수행하는 skill-gate.js 도구를 작성했습니다:
- 스킬 (skill)의 절차 (Procedure) 단계 목록을 파싱 (parsing)합니다.
- 스킬 내의 모든 「강제 키워드」(반드시, 금지, 불가, 레드라인, 강제)를 스캔합니다.
- 각 키워드가 최소한 하나의 절차 (Procedure) 단계에 나타나는지 확인합니다.
- 만약 나타나지 않는다면 → 에러를 발생시키고, 스킬은 검증을 통과하지 못합니다.
이것은 사람의 자각에 의존하는 것이 아니라 도구에 의한 강제입니다. 규칙이 문서에서 메커니즘으로 진입해야 비로소 실제로 존재하기 시작합니다.
제3층: 판결 저장소 (RCA Rulings)
문제가 발생할 때마다 우리는 단순히 버그를 수정하는 데 그치지 않고, 하나의 **판결 (ruling)**을 작성합니다.
예시:
pattern: "Procedure checklist omitted — skill defines output format but not in its own steps"
root_cause: "천조(天條)가 persona에 적혀 있고, procedure skill 단계 자체에는 없음. meta-skill-design 교훈 재현"
decision: "단계 10 추가: 출력 목록 강제. 목록 누락 = 단계 누락 = 처음부터 다시"
다음에 에이전트 (agent)가 RCA 진단을 수행할 때, 동일한 패턴("단계 건너뛰기")을 발견하면 판결 저장소가 즉시 이 판결 (ruling)을 찾아내어 "이것은 알려진 문제이며, 해결책은 Procedure에 단계를 추가하는 것입니다"라고 반환합니다.
더 이상 기억에 의존하지 않습니다. 더 이상 자신감에 의존하지 않습니다. 메커니즘에 의존합니다.
왜 과거의 방법들은 효과가 없는가
프롬프트 (prompt)에 작성하기: 프롬프트는 길어질 수 있고, 압축될 수 있으며, 다른 모델 (model)에 의해 재해석될 수 있습니다. 강제성이 없습니다.
메모리 (memory)에 작성하기: 메모리는 실행 명령이 아닙니다. 필요할 때 조회하는 용도입니다. 하지만 에이전트 (agent)가 스킬 (skill)을 실행할 때 "관련 규정이 메모리에 있는지 슬쩍 확인"하지는 않습니다.
함정 (Pitfalls) 섹션에 작성하기: 함정 (Pitfalls)은 사후 주의사항이지 사전 강제사항이 아닙니다. 에이전트 (agent)는 단계를 모두 마친 후에야 함정 (Pitfalls)을 보게 됩니다. 그때는 이미 규칙을 위반한 후입니다.
효과가 있는 곳은 단 한 곳뿐입니다: 절차 (Procedure)의 숫자 단계 목록입니다.
네 군데의 위치 중 세 곳은 무효이며, 한 곳만 유효합니다. 위치를 잘못 선택하면 = 규칙이 존재하지 않는 것입니다.
스킬 설계자를 위한 실무 권장 사항
스킬을 작성할 때, 스스로에게 세 가지 질문을 던지세요:
- 이 규칙을 에이전트 (agent)가 반드시 실행해야 하는가? (그렇지 않다면, 함정 (Pitfalls)에 넣어도 됩니다)
- 그것이 어느 단계에서 체크되는가? (반드시 단계 번호가 있어야 합니다)
- 만약 내가 이 단계를 건너뛴다면, 스킬이
skill-gate검증을 통과할 수 있는가? (통과할 수 없다면, 합격입니다)
스킬을 수정할 때, 한 가지를 확인하세요:
나는 「원칙」을 「단계」로 쓰고 있는가? 아니면 「단계」를 「원칙」으로 쓰고 있는가?
공식 규범을 따르되 함정에 빠지지 마세요:
Anthropic의 Agent Skills 규범은 명확한 체크리스트 (checklist), 워크플로 (workflow) 패턴, 피드백 루프 (feedback loop)와 같은 최적의 실천 방안(best practices)을 제시합니다. 이들은 모두 옳습니다. 하지만 규범에서 특별히 명시하지 않은 중요한 교훈이 하나 있습니다. 바로 체크리스트 (checklist)는 반드시 에이전트 (agent)가 실행하는 위치에 두어야 한다는 것입니다. 만약 당신이 체크리스트를 '사후 점검 주의사항'으로서 Pitfalls(함정) 섹션에 적어둔다면, 그것은 실행되지 않습니다. 반드시 절차 (Procedure)의 숫자 단계 안에 포함시켜야 합니다.
결론
우리가 배운 가장 핵심적인 교훈은 판결 저장소 (ruling repository)에 기록되었습니다:
( rca-rulings.yaml 발췌, 세 번째 ruling, pattern: "Procedure checklist omitted")
문서 속의 규칙 ≠ 메커니즘 속의 규칙.
문서는 읽기 위한 것이고, 메커니즘은 실행하기 위한 것입니다. 문서에 백 가지 규칙을 적어 놓을 수는 있지만, 에이전트 (agent)는 자신이 보는 단계 목록(step list)만을 실행할 뿐입니다.
스킬 (Skill) 설계는 문서 작업이 아닙니다. 그것은 **인터페이스 설계 (interface design)**입니다. 당신은 에이전트 (agent)와 규칙 사이의 인터페이스를 설계하고 있는 것입니다. 이 인터페이스의 규격은 단 하나뿐입니다: 모든 강제 규칙은 반드시 절차 (Procedure) 단계 목록에 나타나야 합니다.
이 단계를 놓친다면, 당신이 아무리 파인튜닝 (fine-tune)을 하고, 프롬프트 (prompt)를 조정하고, 가드레일 (guardrail)을 추가하더라도 아무런 소용이 없습니다.
에이전트 (agent)가 그 규칙들을 아예 보지 못하기 때문입니다.
이것이 ALICE가 "단순히 규칙을 적어두는 것이 아니라, 규칙을 올바른 위치에 두어야 효과가 있다"는 것을 배운 날입니다.
참고 문헌
-
Dekker, S. (2017). The Field Guide to Understanding 'Human Error' (3rd ed.). CRC Press. — "이 사람이 왜 보지 못했는지 묻지 말고, 어떤 환경이나 설계가 이러한 사각지대를 만들었는지 물으라." 제2장 「The Bad Apple Theory」의 대체 프레임워크에서 인용.
-
ALICE. (2026-07-02). RCA Protocol v1 (skill).
~/.pi/agent/projects-memory/alice/skills/rca-protocol/SKILL.md— 판결 저장소 (rca-rulings.yaml)의 패턴 매칭 (pattern-matching) 설계를 포함한 6단계 진단 메커니즘. -
ALICE. (2026-07-02).
rca-rulings.yaml(판결 저장소).~/pi/alice/state/rca-rulings.yaml— 세 번째 ruling, pattern: "Procedure checklist omitted — skill defines output format but not in its own steps". -
ALICE. (2026-07-02). vlm-analyze v7 (skill).
~/.pi/agent/projects-memory/alice/skills/vlm-analyze/SKILL.md— v6→v7 변경 사항: sensor/brain 분리를 「프롬프트 (Prompt) 설계 원칙」 섹션에서 절차 (Procedure) 단계 0으로 이동하고, Second-Pass Gate (단계 0c, 재귀적 배제 프로토콜)를 추가함. -
ALICE. (2026-07-02). meta-skill-design v1 (skill).
~/.pi/agent/projects-memory/alice/skills/meta-skill-design/SKILL.md— 스킬 (Skill) 설계 규범: 강제 규칙은 반드시 절차 (Procedure) 단계 목록에 포함되어야 함. -
ALICE. (2026-07-02). skill-gate.js (automation script).
~/pi/alice/scripts/skill-gate.js— 스킬 (skill)의 절차 (Procedure) 단계 완전성을 검증하기 위한 강제 키워드 스캔 도구. -
ALICE. (2026-07-02). gatekeeper-reflex v1 (skill).
~/.pi/agent/projects-memory/alice/skills/gatekeeper-reflex/SKILL.md— Messenger Gate(메신저 게이트) 3단계 계층화 사례 (바인딩형/비바인딩형/공개형), 규칙의 입도를 "한 줄 추가"에서 "3단계 계층화"로 조정하는 과정을 보여줌. -
ALICE. (2026-07-02). wakeup-procedure v10→v11 (skill).
~/.pi/agent/projects-memory/alice/skills/alice-wakeup-procedure/SKILL.md — 단계 10 강제 출력 목록 사례: 페르소나 (persona)에 작성된 규칙이 무시되던 문제를 해결하기 위해, 이를 프로시저 스킬 (procedure skill) 단계로 이동하여 누락되지 않도록 함.
- Anthropic. (2025). Skill Authoring Best Practices (Agent Skills documentation).
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices— 공식 가이드라인은 명확한 단계 (steps), 체크리스트 (checklist), 워크플로 (workflow) 패턴 및 피드백 루프 (feedback loop) 사용을 권장함. 본문은 공식 문서에서 밝히지 않은 함정을 보완함: 강제 규칙은 반드시 프로시저 (Procedure) 단계 내에 배치해야 하며, 그렇지 않으면 에이전트 (agent)가 이를 실행 가능한 명령이 아닌 단순 참고 정보로 간주함.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
