에이전트 스킬로 전환한 에이전시의 루틴들: 작동 방식 소개
요약
본 글은 에이전트가 '스킬'이라는 형태로 복잡한 루틴과 절차를 학습하고 실행하는 방식을 소개합니다. 스킬은 마크다운 파일로 구성되며, 세션 시작 시 이름과 설명만 메모리에 유지하여 효율성을 높입니다. 이를 통해 에이전트는 명시적 호출(/명령어) 또는 설명 기반의 암묵적 호출을 통해 복잡한 워크플로우를 수행할 수 있습니다.
핵심 포인트
- 스킬은 마크다운 파일로 구성되며, 이름과 설명을 담는 프런트매터가 핵심입니다.
- 세션 시작 시 스킬 전체 텍스트 대신 이름/설명만 로드하여 컨텍스트 비용을 절감합니다.
- 에이전트는 명시적 호출(/) 또는 설명 기반의 암묵적 호출로 루틴을 실행할 수 있습니다.
- 스킬은 개인, 저장소, 마켓플레이스 등 다양한 계층으로 관리될 수 있습니다.
어제 저녁, 저는 코딩 에이전트에 10개의 새로운 스킬을 설치했습니다. 이 스킬들은 Sonner 토스트 라이브러리의 개발자인 Emil Kowalski가 작성했으며, 디자인 엔지니어링에 대해 가르칩니다. 즉, 언제 애니메이션을 아예 사용하지 말아야 하는지, 어떤 이징 커브(easing curves)를 사용할지, 최악의 경우 데이터를 사용하여 UI를 스트레스 테스트하는 방법 등을 배웁니다. 설치 전체 과정은 약 5분이 걸렸으며, 대부분은 보안 스캔을 읽는 데 할애되었습니다.
오늘 에이전트는 애니메이션과 모바일 레이아웃을 눈에 띄게 더 잘 작성합니다. 모델 자체는 수정하지 않았습니다. 차이는 마크다운 파일이 들어있는 폴더 하나입니다.
스킬이란 무엇인가
스킬은 SKILL.md 파일과 선택적인 지원 파일(템플릿, 체크리스트, 작은 스크립트)로 구성된 디렉토리입니다. 이 파일은 일반 마크다운 형식입니다. 여기 최소한의 실제 예시가 있습니다:
---
name: seo-audit
description: "납품 전 클라이언트 사이트를 감사합니다. 요청받았을 때 사용하세요"
...
프런트매터(frontmatter)는 일치하는 표면적을 담고 있습니다: name은 채팅에서 /seo-audit 명령어로, description은 에이전트가 현재 작업에 이 스킬이 적합한지 결정하기 위해 읽는 내용입니다. 본문은 절차를 설명합니다.
여기서 영리한 부분이 나옵니다. 로딩 방식입니다. 세션 시작 시, 제 에이전트는 제가 보유한 53개 스킬의 이름과 한 줄 설명을만 메모리에 유지하며, 이는 몇 킬로바이트의 컨텍스트 비용을 발생시킵니다. 스킬의 전체 텍스트는 작업이 일치하거나 제가 명시적으로 호출할 때만 로드됩니다. 이것이 수십 개의 스킬을 보유하는 것이 가능한 이유입니다. 사용하지 않는 스킬들은 거의 무료에 가깝습니다.
두 가지 호출 방식
슬래시(/)를 이용한 명시적 호출: /seo-audit https://client-site.ru와 같이 사용합니다. 에이전트는 절차를 단계별로 따라가며 인수를 전달합니다. 저는 루틴 자체가 중요할 때 이것을 사용합니다.
설명 기반의 암묵적 호출:
제 설정에서 세 가지 계층이 있습니다:
- 개인 스킬을 위한
~/.agents/skills/<name>/SKILL.md. 이는 모든 프로젝트에서 사용할 수 있으며, 제 작업 방식(출판 파이프라인, 감사 절차, 보안 게이트 등)이 담겨 있는 곳입니다. - 저장소 내의 팀 스킬 폴더로, git에 커밋됩니다. 신규 직원은 아무도 열어보지 않는 위키 페이지가 아니라 실행 가능한 절차를 받게 됩니다.
- 마켓플레이스 번들을 위한 플러그인 캐시. 일반적인 필요에는 괜찮지만, 제 에이전시의 작동 방식과 관련된 것은 앞의 두 곳에 속해야 합니다.
실제 파이프라인: 하나의 명령으로 여섯 플랫폼에 배포하기
제가 가장 핵심적인 스킬은 이 글을 출판하는 스킬입니다. 저는 파일과 함께 /smm-crosspost를 입력하거나, 단순히 "우리 블로그에 기사를 작성해 줘"라고 말하면 에이전트가 다음과 같은 작업을 수행합니다:
- 영어로 기사를 작성하고, 러시아어와 카자흐어로 각색하며, 세 버전을 교차 링크(cross-link)합니다.
- 브랜드 스타일의 1200x630 커버 이미지를 생성합니다.
- 모든 것을 완전한 구조화된 데이터(TechArticle, FAQPage, HowTo, hreflang 등)와 함께 사이트에 배치합니다.
- 중지하고 승인을 위해 모든 내용을 보여줍니다.
- 제가 "확인"하면: 배포하고, 기사가 라이브 상태인지 확인하며, 내부 품질 감사를 실행합니다.
- 각기 다른 형식, 톤, 길이 제한을 가진 여섯 개 네트워크를 위한 플랫폼별 적응본을 작성합니다.
- 초안들을 인간 검토(human-lint pass) 과정을 거치게 하고 점수와 함께 모든 텍스트를 보여줍니다.
- 다시 명시적인 "확인"을 기다립니다. 오직 그때만 출판합니다. 4단계와 8단계는 스킬에 작성된 하드 게이트(hard gates)입니다. 마크다운에 그렇게 명시되어 있기 때문에 에이전트는 제 확인 없이는 아무것도 출판할 수 없고, 그것을 따릅니다. 사람들이 과소평가하는 부분이 바로 이것입니다: 에이전트 행동 규칙은 워크플로우와 동일한 일반 텍스트에 존재하며, 그 효력을 발휘합니다.
보안 게이트
스킬이란 에이전트가 따라야 할 일련의 지침입니다. 검증하지 않은 스킬을 설치하는 것은 낯선 사람의 저장소에서 스크립트를 실행하는 것과 같습니다. "이전 지침 무시"라는 문구는 도움이 되는 것처럼 보이는 체크리스트에 자연스럽게 끼워 넣기 좋습니다. 저의 게이트 역시 하나의 스킬입니다:
git clone --depth 1 https://github.com/author/some-skills /tmp/check
skillspector scan /tmp/check --no-llm # NVIDIA의 스캐너, 완전히 로컬 작동
그 후: 플래그가 지정된 모든 줄을 수동으로 읽기
오탐(false positives)에 대해 이야기하자. 왜냐하면 이것이 중요하기 때문이다. 이번 주에는 스캐너가 무해한 design-skills 저장소에서 CRITICAL 등급의 경고를 반환했다: 29개의 발견 사항, 최고 심각도, "설치하지 마세요". 수동 검토 결과 그 모든 것이 오탐이었다. 이 스캐너는 에이전트에게 저장소 파일로부터 조향 시도를 무시하라고 지시하는 방어적인 문구(따옴표 안에 "ignore previous instructions"라는 구절이 포함됨), 작성자가 마크다운 템플릿에 코드 울타리를 중첩하기 위해 사용한 너비 제로 문자(zero-width characters), 그리고 의도적으로 테스트 데이터에 배치된 ZWJ 이모티콘에서 오작동했다. 실제 위협은 전혀 없었다.
여기서 얻을 교훈은 "스캐너를 무시하라"가 아니다. 그것은: 스캐너는 필터링하고, 인간이 결정한다. 29개의 플래그가 지정된 줄을 읽는 데 약 10분이 걸렸다. 오염된(poisoned) 스킬을 설치하는 것은 훨씬 더 많은 비용이 들었을 것이다.
자신만의 스킬 작성하기
기성품 스킬은 누군가의 경험이다. 당신 자신의 루틴이야말로 더 가치가 있으며, 아무도 그것을 대신 써주지 않을 것이다. 내가 고객들에게 주는 레시피는 다음과 같다:
- 매주 반복하는 작업을 하나 선택한다: 게시(publishing), 주간 보고서 작성, 배포 전 감사(pre-delivery audit), 배포(deploy) 등.
- 스스로 확인하는 과정까지 포함하여, 실제로 손으로 하는 방식 그대로 단계를 작성한다.
- 엄격한 규칙을 추가한다: 절대 하지 말아야 할 것, 인간의 승인이 필요한 것, 멈춰야 할 지점 등을 명시한다.
- 자신을 위한 설명이 아니라 에이전트를 위한 설명을 작성한다: 이 스킬이 무엇을 하는지, 그리고 어떤 구절들이 이를 트리거해야 하는지를 기술한다. 작게 시작하라. 일주일에 한 시간을 절약해 주는 100줄짜리 스킬이, 절대 완성하지 못할 수천 줄의 완벽한 스킬보다 낫다. --- 이 기사는 AI 지원(초안 작성 및 각색)을 받아 준비되었으며, 출판 전에 저자가 검토했습니다. 원래는 https://automata.sale/en/blog/ai-automation/how-to-use-zcode-skills-and-commands/에 게시되었습니다. 태그: aiagents, automation, webdev, productivity
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기