저는 계속해서 Claude Code 안에서 생활하고 있으며, 외부로 데이터를 전송하지 않는 작고 유용한 도구들을 그 안에 두고 싶었습니다. 로그인과 API 키가 필요한 또 다른 SaaS가 아니라, 단순히 내 머신에서 실행되고, 하나의 작업을 잘 수행하며, 내가 신뢰하기 전에 코드를 읽어볼 수 있는 그런 도구 말입니다.
그래서 제가 실제로 사용하는 워크플로우들을 몇 가지 오픈 소스 (open-source) 플러그인으로 패키징하여 하나의 마켓플레이스에 모았습니다. 이것이 첫 번째 기록입니다.
여기서 "로컬 우선(local-first)"이 의미하는 것
제가 스스로 세운 규칙은 다음과 같습니다: 플러그인은 기본적으로 사용자의 머신에서 완전히 실행되어야 합니다. 계정 없음, API 키 없음, 네트워크 호출 없음, 업로드되거나 자동으로 게시되는 것 없음. 만약 플러그인이 진정으로 네트워크가 필요하다면, 다음과 같아야 합니다:
- 명확해야 함,
- 단일 모듈로 격리되어야 함,
- 기본적으로 꺼져 있어야 함,
- 그리고 사용자의 자체 키를 사용해야 함.
그렇게 하면 코드를 grep하여 무엇이 외부 세계와 접촉하는지 정확히 확인할 수 있습니다. 로고나 이력서를 생성하는 도구의 경우, 이러한 검사 가능성 (inspectability)이 중요합니다.
미리 밝히는 두 가지 정직한 예외 사항이 있습니다: docpin은 웹에서 라이브러리 문서(항상 인용됨)를 가져오며, brand-forge는 AI 사진 촬영을 위해 이미지 API를 호출할 수 있는 하나의 선택적(opt-in) 모듈을 가지고 있습니다. 그 외의 모든 것은 로컬(local)입니다.
스위트(suite) 구성 요소
- brand-forge — 브랜드 프로필(색상, 글꼴, 목소리)을 한 번 저장하면, 브랜드에 맞는 로고, 소셜 템플릿, 문서/덱 템플릿을 SVG로 생성합니다. 벡터 출력은 로컬 코드로 그려지므로 결정론적(deterministic)입니다: 동일한 프로필은 항상 동일한 에셋을 생성합니다.
- cv-forge — JSON Resume 스키마에 이력서를 하나 보관하고, 로컬 HTML 템플릿과 브라우저의 인쇄 기능을 사용하여 깔끔하고 ATS 친화적인 PDF를 생성합니다. Node 없음, 키 없음, 네트워크 없음.
- content-multiplier — 단 한 번의 명령으로 하나의 아이디어를 브랜드에 맞는 다채널, 다국어 콘텐츠로 변환합니다.
- docpin — 버전이 일치하고 인용된 문서를 가져옴으로써, 사용자가 설치한 버전의 라이브러리를 기준으로 코드를 근거화(ground)합니다.
- 그리고 같은 정신을 가진 몇 가지 도구가 더 있습니다.
설치하기
모든 것은 Claude Code의 플러그인 시스템을 통해 설치됩니다. 세션에서:
/plugin marketplace add localplugins/plugins
/plugin install brand-forge@localplugins
그 후 /brand-make instagram post "We just shipped"와 같은 자연어 요청을 사용하면, 저장된 브랜드 정보를 활용하여 output/ 디렉토리에 편집 가능한 SVG 파일을 반환합니다.
주목할 만한 몇 가지 설계 선택 사항
LLM 왕복(round-trip) 대신 결정론적 생성 (Deterministic generation). brand-forge의 로고와 템플릿은 모델에게 그려달라고 요청하는 대신, 사용자의 프로필을 바탕으로 일반 코드를 통해 생성됩니다. 이를 통해 결과물을 재현(reproducible)하고, 차이점 비교(diffable) 및 편집(editable)할 수 있으며, 실행할 때마다 결과가 달라지는 드리프트(drift) 현상이 발생하지 않습니다.
네트워크 경계는 단 하나의 파일입니다. brand-forge에서 인터넷에 접속할 수 있는 유일한 모듈은 선택 사항인 이미지 생성기(image generator)뿐입니다. 환경 변수(env var)를 설정하고 직접 키(key)를 제공하지 않는 한 이 기능은 꺼져 있으며, 에셋의 텍스트는 SVG 오버레이로 로컬에서 합성되므로 이미지 프롬프트(image prompt)에 절대 포함되지 않습니다. 코드베이스 전체가 아닌, 단 하나의 파일만 감사(audit)하면 됩니다.
플러그인의 구조 (Plugin anatomy). 각 플러그인은 일반적인 Claude Code 플러그인과 동일합니다. 슬래시 명령어(slash commands), 자연어 요청에서 트리거되는 기술(skills), 때로는 컨텍스트를 로드하는 SessionStart 훅(hook)으로 구성됩니다. brand-forge의 경우 두 개의 서브 에이전트(multi-asset 세트를 계획하는 art-director와 팔레트 및 대비를 브랜드 기준에 맞춰 확인하는 visual-guardian)가 포함되어 있습니다. 직접 플러그인을 제작한다면, 예제로 읽기에 충분할 만큼 규모가 작습니다.
이것이 아닌 것
이 도구는 인간 디자이너의 결과물을 능가하는 디자인 도구가 아니며, 그렇게 되려고 노력하지도 않습니다. 터미널을 벗어나거나 별도의 서비스에 가입하지 않고도, 일관성 있고 브랜드에 부합하며 충분히 괜찮은(good-enough) 에셋과 문서를 얻는 방법입니다. 픽셀 단위의 완벽한 아트 디렉션(art direction)이 필요하다면, 이 도구를 스캐폴딩(scaffolding) 용도로 사용하고 마무리는 수작업으로 진행하세요.
사용해 보기
모든 것은 MIT 라이선스이며 오픈 소스(open source)입니다. Claude Code 자체로 구축되었습니다:
https://github.com/localplugins/plugins
저는 진심으로 다음 두 가지 사항에 대한 피드백을 받고 싶습니다: 무엇이 유용하게 느껴지는지 대(vs) 무엇이 단순한 눈속임(gimmicky)처럼 느껴지는지, 그리고 로컬 우선 (Local-first) 플러그인이 허용될 수 있는 범위의 경계가 어디여야 한다고 생각하시는지입니다. 이슈(Issues)와 댓글(Comments) 모두 환영합니다.