지시문만으로 Mermaid를 졸업할 수 있을까? diagram-design 스킬을 직접 테스트하며 검증한 내용
요약
자연어 지시문만으로 HTML+SVG 다이어그램을 생성하는 Claude Code용 agent skill인 diagram-design 리포지토리를 검증했습니다. 플러그인 설치가 환경적 제약으로 막히자, 스킬의 본질인 '구체적인 지시서(SKILL.md)를 읽고 따라 하는 과정' 자체에 집중하여 수동 테스트를 진행했습니다.
핵심 포인트
- Claude Code용 agent skill 검증 사례입니다.
- 지시문 기반 다이어그램 생성 능력을 확인했습니다.
- 플러그인 설치 대신 스킬의 원리(지시서)를 직접 적용했습니다.
오늘의 주제: diagram-design
GitHub Trending에서 급상승했던 cathrynlavery/diagram-design 리포지토리를 검증했다.
이것은 자연어 지시문만으로 자체 완결된 HTML+인라인 SVG의 에디토리얼 다이어그램을 생성하는 Claude Code용 agent skill이다.
라이선스는 MIT(Copyright (c) 2025 Cathryn Lavery)이며, 검증 시점의 HEAD는 f4547ee이었다.
필자가 검색한 범위에서는 Zenn, Qiita, note 어느 곳에서도 일본어로 된 1차 소개 글을 찾지 못했다(2026-10-08 기준).
검증 방침이 무너진 이야기
원래는 공식 절차대로 Claude Code에 이 리포지토리를 plugin marketplace로 추가하여 테스트할 계획이었다.
/plugin marketplace add cathrynlavery/diagram-design
/plugin install diagram-design@diagram-design
그런데 이번에 사용한 클라우드 실행 환경에서는 이 plugin marketplace add 명령어가 샌드박스 자동 권한 분류기(automatic permission classifier)에 의해 거부되었다.
이유는 Untrusted Code Integration이었다.
만약을 대비해 리포지토리를 read-only로 clone하고, 동봉된 Python 스크립트(self_check.py, 또는 체크리스트에 '직접 실행해 보라'고 쓰여 있는 verify-geometry.py 등)를 직접 실행해 봤지만, 이 역시 Code from External이라는 이유로 거부되었다.
둘 다 환경 측의 안전 조치였으며, 이를 회피하려는 것은 적절하지 않다고 판단하여, 순순히 다른 검증 방법으로 전환했다.
방침 전환: 스킬의 지시서를 직접 적용하기
이 스킬의 본질은 실행 가능한 프로그램이 아니라 SKILL.md라는 매우 구체적인 지시서(Markdown)와 다이어그램 유형별 레퍼런스, 그리고 검증된 샘플 HTML들의 집합이다.
즉, '에이전트가 이 지시서를 읽고 따르는' 그 자체가 스킬의 작동 원리이며, plugin 메커니즘을 거치지 않아도, 지시서를 직접 읽고 똑같이 손으로 따라 할 수 있다면, 스킬이 원래 하려고 했던 가치를 검증할 수 있을 것이라고 생각했다.
구체적으로 다음 절차를 밟았다.
skills/diagram-design/SKILL.md와 스윔레인 다이어그램 유형별 레퍼런스인references/type-swimlane.md를 읽는다. - 동봉된 샘플assets/example-swimlane.html의 이미 검증된 좌표 및 화살표 라우팅을 그대로 활용한다. - 텍스트 내용만 이 ai-100days 리포지토리 자체의 하루 운영 흐름(CLAUDE.md에 쓰여 있는 '아침: 리서치 Routine → 출퇴근 중: 사람이 Merge → 점심: 구현 Routine → 밤: 사람이 리뷰/공개')으로 교체한다. - 비교용으로, 같은 내용을 실제 Mermaid.js (v11.4.1)로도 렌더링한다.- 두 가지를 실제로 브라우저(환경에 사전 설치된 Chromium, Playwright 경유)에서 열어보고, 깨진 부분이 없는지, 콘솔 에러가 나오지는 않는지 확인했다.
실제로 만든 다이어그램
4레인(RESEARCH / COMMUTE / IMPL / EVENING), 7노드, 6화살표의 구성으로, Routine이 자동으로 움직이는 부분과 사람이 판단하는 부분의 경계, 그리고 'today.md가 미설정이라면 아무것도 하지 않는다'라는 조건 분기를 점선 화살표로 표현했다.
비교 대상으로 같은 내용을 순수 Mermaid로도 그렸다.
처음에는 CDN(cdn.jsdelivr.net)에서 mermaid.min.js를 불러오는 형태로 작성했지만, 이 실행 환경의 네트워크 정책으로 인해 CDN 연결이 거부되었고, 브라우저 콘솔에 다음 에러가 떴다.
console: Failed to load resource: net::ERR_TUNNEL_CONNECTION_FAILED
pageerror: mermaid is not defined
registry.npmjs.org는 직접 연결이 허용되었기 때문에, npm pack [email protected]
패키지를 가져와 로컬의 mermaid.min.js(2,571,900바이트)를 참조하는 형태로 교체하자 콘솔 오류 없이 그려졌다.
diagram-design 버전은 처음부터 외부 리소스가 Google Fonts뿐이라서 콘솔 오류나 페이지 오류 없이 한 번에 그려졌다.
시각적인 차이는 다음 이미지에서 볼 수 있으며, Mermaid 버전은 SKILL.md가 명시적으로 비판하는 'Reproducing Mermaid's renderer layout' 그 자체의, 서브그래프가 연한 노란색이고 모든 노드가 같은 색이라는 모양이 되었다.
diagram-design 버전은 점선 무늬 배경・레인 레이블・Instrument Serif 헤드라인・1~2곳의 코랄 악센트(중요한 인간 리뷰와 최종 결과물의 노드)라는 일관된 편집 디자인을 갖추게 되었다.
실제 스크린샷은 experiments/day-011/before-mermaid.png (순수 Mermaid 버전)과 experiments/day-011/after-diagram-design.png (diagram-design 버전)으로 리포지토리에 두고 있으니, 관심 있다면 비교해 보길 바란다.
자동 체크 대신 수동으로 체크리스트를 적용함
self_check.py가 실행되지 않았기 때문에, SKILL.md §9의 'Pre-Output Checklist'를 항목별로 육안 및 좌표 계산을 통해 확인했다.
접근성 속성(role="img", aria-labelledby, <title>)이 <defs>보다 앞서 있는지, 화살표와 레이블 마스크가 겹치지 않는지, 코랄 사용 수가 2개 요소 이내인지, 복잡도 예산(최대 9노드・12화살표) 범위 내인지 등을 확인했고, 모두 충족했다.
다만 한 가지, 포함된 샘플인 example-swimlane.html 자체가 체크리스트에 있는 'SVG를 overflow-x: auto의 Wrapper로 감싸는' 요구사항을 충족하지 못한다는 것을 발견했다.
수동으로 적용한 내 버전에서는 이 점을 추가적으로 충족하도록 했다.
이는 스킬의 지시서와 포함된 샘플 사이에 작은 불일치가 있다는 발견이다.
알게 된 것
이 스킬의 가치는 Python 스크립트를 실행하는 것이 아니라, SKILL.md 자체가 색 토큰・간격의 그리드・화살표 마스크 규칙・복잡도의 예산・44종류의 도 타입별 레퍼런스라는 매우 구체적이고 재현 가능한 설계 규칙 모음이 되어 있다는 점에 있음을 알게 되었다.
플러그인 메커니즘도 코드 실행도 불가능한 제약 조건 하에서도, 지시서를 읽고 수동으로 충실히 적용하는 것만으로 순수 Mermaid와는 명확히 다른 모양의 다이어그램을 한 번 만들어낼 수 있었다.
이는 '지시문만으로 도해를 자동 생성한다'라는 홍보 문구의 핵심을 뒷받침하는 결과라고 필자는 생각한다.
반면, 이번에는 공식 플러그인을 통한 설치 및 실행 자체는 검증하지 못했으며, 온보딩 시 스타일 가이드 대화(SKILL.md §0에서 설명된, 첫 이용 시 색상을 커스터마이징할지 묻는 흐름)나 자동 체크 스크립트의 실행 결과는 미확인 상태로 남아있다.
이 제약은 검증의 한계로서 솔직하게 적어둔다.
추가: 공식 설치와 자동 체크를 나중에 로컬 PC에서 실제로 시도함
클라우드 실행 환경에서 차단되었던 공식 설치를, 나중에 로컬 PC에서 시도해 보니 이번에는 순조롭게 성공했다.
여기서 오해하기 쉬운 것이 '로컬 PC라서 통과했다'라는 이해였다. 실제는 다르다. 차단했던 것은 Claude Code에 내장된 안전 메커니즘(auto mode classifier)의 Untrusted Code Integration이라는 규칙으로, 'Environment에 등록된 신뢰할 수 있는 조직 밖의 리포지토리에서 코드를 가져와 실행시키는' 행위를 감지하여 막는 장치였다. 이는 실행 환경의 종류(클라우드의 샌드박스인지 로컬 PC인지)를 구분하지 않으며, 에이전트가 자신의 판단으로 그 작업을 하려 했는지, 아니면 인간이 현장에서 명시적으로 지시했는지에 따라 동작이 달라진다.
클라우드 Routine 환경에서의 첫 시도는, 사람이 동석하지 않은 무인 실행 속에서, Claude가 자신의 판단으로 /plugin marketplace add
를 호출하려고 했다. 이는 '에이전트가 자신의 의지로 검증되지 않은 외부 코드를 통합하려 한' 경우에 해당하며, 차단되었다. 반면 이번에 로컬에서 성공한 것은 필자가 '이 명령을 실행해 달라'고 채팅으로 명시적으로 지시한 직후였기 때문이며, 같은 명령이라도 '사용자가 직접 요청한 작업'으로 취급되었기에 통과했다. 즉, 로컬에서 무인 루틴(Routine)에 해당하는 시스템(cron 등)을 구성하더라도, 같은 이유로 멈출 가능성이 높다. '로컬이면 안전하다'가 아니라, '인간의 명시적인 지시가 있었는지 여부'가 분기점이었다는 것이 정확한 부분이다.
$ claude plugin marketplace add cathrynlavery/diagram-design
✔ Successfully added marketplace: diagram-design (declared in user settings)
$ claude plugin install diagram-design@diagram-design
...
둘 다 순조롭게 성공했다. 설치된 플러그인에는 포함된 self_check.py도 있었기 때문에, 본 검증에서 만든 두 개의 파일에 실제로 실행해 보았다.
OK after-diagram-design.html
FAIL before-mermaid.html
- remote reference on <script>: https://cdn.jsdelivr.net/npm/[email protected]/dist/mermaid.min.js
...
수동으로 SKILL.md를 적용하여 만든 결과물이 공식 자동 검사에서도 실제로 합격했다. 수작업으로 항목별로 확인한 Pre-Output Checklist의 결과와 도구에 의한 자동 판정이 제대로 일치하게 된 것이다. 비교용 Mermaid 버전은 예상대로 FAIL이었고, 단일 파일 완결이라는 요구사항을 충족하지 못한다는 것이 기계적으로도 뒷받침되었다.
더 흥미로웠던 점은, 본문에서 발견했던 '포함된 샘플의 불일치(overflow-x: auto 라퍼 미지원)'를 같은 self_check.py로 다시 확인했을 때 OK 판정이 나왔다는 것이다. 즉 이 불일치는 인간이나 에이전트가 육안으로 확인할 전제 조건인 체크리스트(SKILL.md §9)에만 적혀 있었을 뿐, 자동 스크립트의 검사 항목에는 포함되어 있지 않았다. '자동 검사를 통과 = 완전히 정확하다'는 것이 아니라, 인간용 체크리스트와 자동 검사에는 서로 커버하지 못하는 영역이 있다는 것을 실제로 양쪽을 모두 작동시켜서야 알게 되었다.
참고
- 리포지토리: https://github.com/cathrynlavery/diagram-design
- 검증 코드・실행 로그:
experiments/day-011/
Discussion
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기