TL;DR
- 헤르메스의 스킬 파일은 YAML 프론트매터 + Markdown 본문으로 구성된 사람이 읽을 수 있는 파일이며, 에이전트가 자동 생성하고 인간이 편집·삭제할 수 있다.
- 세션 색인에 SQLite FTS5 키워드 검색을 쓰는 이유는 명확하다. 임베딩보다 재현성이 높고 외부 API 의존 없이 로컬 디버깅이 가능하다.
- 팀 단위에서는 skills 디렉터리를 Git 저장소로 관리하는 것이 스킬 품질 유지의 핵심이다.
시리즈 목차
| 편 | 주제 |
| 1편 | 소개 — 무엇이 다른가 |
| 2편 | 설치 가이드 |
| 3편 | 스킬 시스템 완전 분해 (현재 글) |
| 4편 | 자동화 워크플로우 실전 |
| 5편 | 실무 도입 결론 |
스킬 파일이란 무엇인가
헤르메스 에이전트가 복잡한 작업(도구 호출 5회 이상)을 마치면, 에이전트 자신이 그 작업을 정리한 Markdown 파일을 생성한다. 이것이 스킬 파일이다.
스킬 파일의 핵심은 단순함이다. 에이전트가 작성하지만 사람이 읽고 수정할 수 있다. Git에 커밋할 수 있다. 팀원 간 공유가 된다. PR 리뷰 대상이 된다.
스킬 파일 구조
스킬 파일은 YAML 프론트매터와 Markdown 본문으로 구성된다.
---
name: postgresql-connection-pool-setup
version: 3
created: 2026-05-10T09:23:00Z
last_used: 2026-05-14T14:07:00Z
use_count: 7
trigger_keywords:
- postgresql
- connection pool
- asyncpg
- pgbouncer
confidence: 0.87
목적
PostgreSQL 연결 풀 설정 시 발생하는 일반적인 문제 해결접근법
1. asyncpg 기준 최소 pool_size=5, max_size=20으로 시작
2. PgBouncer 사용 시 transaction 모드 vs session 모드 트레이드오프 확인
3. max_overflow는 트래픽 피크 × 1.5로 계산경계 케이스
too many clients 오류: max_connections 확인 후 PgBouncer 앞단 배치
- 연결 누수: asyncpg context manager 미사용 시 발생.
async with pool.acquire() as conn: 필수
- 타임아웃: command_timeout 기본값 None → 프로덕션에서 30s 명시 권장
검증된 설정 (FastAPI + asyncpg)
asyncpg.create_pool(dsn, min_size=5, max_size=20, command_timeout=30)
use_count: 7은 이 스킬이 7번 재사용됐다는 뜻이다. 에이전트는 재사용할 때마다 스킬을 업데이트하므로, 자주 쓰이는 스킬일수록 정교해진다.
SQLite FTS5: 임베딩 대신 키워드 검색을 선택한 이유
대부분의 AI 에이전트 메모리 시스템은 임베딩 벡터 유사도 검색을 쓴다. 헤르메스는 SQLite FTS5 기반 키워드 검색을 선택했다.
이 결정은 에이전트 실용성 관점에서 몇 가지 강점을 가진다.
재현성. 임베딩 검색은 같은 쿼리도 모델이 바뀌면 결과가 달라진다. FTS5 키워드 매칭은 입력이 같으면 결과가 같다. 에이전트가 “왜 이 스킬을 로드했는가”를 사람이 이해할 수 있다.
정확성. 에러 메시지나 함수명처럼 정확한 문자열로 검색할 때 임베딩보다 FTS5가 더 정확하다. too many clients라는 에러로 검색하면 의미적으로 유사한 결과가 아니라 그 에러를 다룬 스킬을 찾아낸다.
비용. 외부 임베딩 API가 필요 없다. 스킬이 1,000개가 되어도 로컬 SQLite 연산이다.
# 헤르메스 내부 스킬 검색 흐름
작업 요청: "asyncpg 연결 풀 타임아웃 설정"FTS5 쿼리:
SELECT * FROM skills
WHERE skills MATCH 'asyncpg AND (connection OR pool OR timeout)'
ORDER BY rank
→ postgresql-connection-pool-setup.md 로드
→ 처음부터 추론하지 않고 스킬 기반으로 바로 답변
3계층 메모리의 역할 분담
graph LR
A[작업 요청] --> B[Honcho 사용자 모델]
B --> |스택 선호도\n축약어 패턴| C[컨텍스트 보강]
A --> D[SQLite FTS5\n세션 색인]
D --> |관련 과거 세션| C
C --> E[스킬 파일 검색]
E --> |최적 스킬 로드| F[에이전트 실행]
F --> G{도구 호출 5회+?}
G -- Yes --> H[새 스킬 파일 생성/업데이트]
H --> E
G -- No --> I[응답 반환]
Honcho 사용자 모델은 특히 중요하다. 예를 들어 사용자가 Python 코드를 작성할 때 항상 type hint를 붙이는 패턴을 보이면, 이후 코드 생성 작업에서 에이전트가 자동으로 type hint를 포함한다. 명시적으로 요청하지 않아도 된다.
팀 단위 스킬 관리 전략
스킬 파일이 Markdown이라는 점이 팀 워크플로우와 잘 맞는다.
Git 기반 스킬 저장소:
# 팀 스킬 저장소 생성
mkdir team-hermes-skills && cd team-hermes-skills
git init# 헤르메스 config에서 skills 디렉터리를 저장소 경로로 지정
# ~/.hermes/config.yml
skills:
directory: /path/to/team-hermes-skills
auto_generate: true
스킬 품질 관리 체크리스트:
에이전트가 자동 생성한 스킬을 그대로 신뢰하지 않는다. 정기적으로 아래를 확인한다.
1. confidence 점수가 0.7 미만인 스킬은 사람이 검토
2. use_count가 0인 스킬은 1개월 후 삭제 검토
3. 경계 케이스가 비어있는 스킬은 보강 필요
4. deprecated API를 참조하는 스킬은 즉시 업데이트
중요한 한계: 스킬 품질은 LLM의 자기관찰 능력 수준이다. 에이전트가 작업을 잘못 이해하고 스킬을 작성하면, 그 잘못된 스킬이 다음 작업에 영향을 준다. 자동 생성된 스킬을 주기적으로 사람이 검토하는 프로세스가 없으면 기술 부채처럼 쌓일 수 있다.
스킬 직접 작성
에이전트 자동 생성을 기다리지 않고 팀이 직접 스킬 파일을 작성할 수 있다. 토스·카카오처럼 특정 도메인 지식이 많은 팀에서 효과적이다.
---
name: internal-api-auth-pattern
version: 1
created: 2026-05-15T00:00:00Z
trigger_keywords:
- internal api
- service auth
- mtls
confidence: 1.0
목적
사내 서비스 간 인증 패턴 (mTLS 기반)접근법
1. 서비스 계정 인증서는 /etc/ssl/internal/ 경로에 마운트
2. 모든 내부 API 호출은 X-Service-Token 헤더 필수
3. 타임아웃: 연결 2s, 읽기 10s 표준경계 케이스
- 인증서 만료: cert-manager 자동 갱신 정책 확인
- 개발 환경: SKIP_MTLS=true 환경 변수로 우회 (프로덕션 절대 금지)
사내 특수 패턴을 스킬로 미리 작성해두면, 신규 팀원이 에이전트를 사용할 때부터 팀 컨벤션이 반영된 답변을 받는다.
다음 편 예고
4편에서는 스킬 시스템을 토대로 실제 자동화 워크플로우를 구축한다.
- 크론 스케줄링으로 정기 리포트 자동화
- 서브에이전트 병렬 실행
- CI/CD 파이프라인 통합
- GitHub Actions 연동
참고 자료