증거로 짓는 빌드 머신, Claude Code 플러그인The evidence-grounded build machine, a Claude Code plugin

상상하지
않는다.
It doesn't
imagine.

Visigner v2는 디자인을 감으로 그리지 않습니다. 실제 페이지 42장의 캡처 증거로 빌드를 접지하고, 레시피가 뒷받침하지 않는 숫자는 기계가 거부합니다. 랜딩과 상세페이지, 앱 UI, 브랜드, 토큰까지 전부 이 규율 위에서. Visigner v2 doesn't design from vibes. Builds are grounded in captured evidence from 42 real pages, and any number the recipe can't back is mechanically refused. Landing pages, Korean detail pages, app UI, brand, tokens: all on that discipline.

설치. 이게 전부입니다Install. This is all of it claude code
plugin marketplace add elon-choo/visigner
plugin install visigner@visigner
macOS와 Linux, Windows에서 동작하고 API 키가 필요 없습니다. 제거는 /plugin uninstall 한 줄. Runs on macOS, Linux, Windows. No API key. Remove with one /plugin uninstall.
근거 블록Grounding block● 라이브● Live
$ librarian-inject '{"category":
  "saas-marketing-site"}' --variance 8
Retrieved exemplar: resend
role: positive · score: 0.86
directive: imitate THIS exemplar's
technique, not a generic guideline
이 페이지를 만들 때 실제로 실행된 검색입니다. 다크 그라운드와 대형 세리프가 이 근거에서 나왔습니다. The retrieval that actually ran for this page. Its dark ground and big serif came from this evidence.
빌드 판정Build verdict● 라이브● Live
$ anti-ai-eval.js docs/index.html
verdict: clean · tells: 0/22
$ anti-pattern-check.js --category
machine hits: HIGH 0 · exit 0
지금 읽는 이 파일의 판정. 저장소를 클론해 같은 명령을 돌리면 같은 값이 나와야 합니다. The verdict on this very file. Clone the repo, run the same commands, expect the same values.

전과 후, 같은 요청, 다른 기계Before and after: same ask, different machine

v1은 만든 뒤에 채점했습니다. v2는 만들기 전에 실제 페이지의 증거로 접지하고, 만든 뒤에 모든 숫자와 라벨이 그 증거로 소급되는지 검사합니다. 소급이 안 되면 아래처럼 됩니다. v1 graded after the fact. v2 grounds the build in real-page evidence before code, then checks that every number and label traces back to that evidence after. When it doesn't trace, this happens.

제출된 주장 · 근거 없음Submitted claim · unsupported

누적 판매액 9,999,999원 돌파
999명이 선택한 디자인
출처: 없음. 레시피에 존재하지 않는 수치.Source: none. Numbers absent from the recipe.

근거 있는 빌드 · 소급 가능Grounded build · traceable

캡처 레코드가 인용하는 실측 수치만 사용only numbers the captured record cites
색과 간격, 서체는 레시피의 실측 토큰colors, spacing, type from measured tokens
소급 안 되는 수치는 페이지에 싣지 않는다. 그게 규칙.A number that can't trace doesn't ship. That's the rule.
$ node build-honesty-check.js page.html --recipe recipe.md
REFUSING — build contains concrete metric content that does not trace to its recipe or brief;
do not ship or invent support for it.
UNSUPPORTED number "9,999,999" · UNSUPPORTED number "999" · exit 1

빌드 정직성 게이트, build-honesty-check.jsThe build-honesty gate, build-honesty-check.js

지어낸 숫자는,
여기서 끝납니다.
Fabricated numbers
stop here.

9,999,999원

한국형 표기까지 봅니다. 9,999,999원이나 999명처럼 단위가 붙은 수치도 레시피에 없으면 exit 1. 이 게이트는 저장소의 회귀 테스트가 매 푸시마다 고정합니다. Korean unit-adjacent forms included: 9,999,999원 or 999명 exit 1 when the recipe can't back them. Pinned by this repo's regression tests on every push.

근거의 출처Where the evidence lives

상상이 아니라,
캡처입니다
Captured,
not imagined

빌드가 접지되는 코퍼스입니다. 실제로 렌더해 타일과 본문, 실측 스타일까지 뜬 페이지 42장. 잘된 페이지만이 아니라 반면교사도 기록합니다. 첫 한국 positive 상세페이지가 이번 v2에 들어왔습니다. The corpus a build grounds into: 42 pages actually rendered and captured, tiles to body text to measured styles. Not just the good ones. Negative exemplars are on file too, and the first Korean-positive detail page landed in v2.

stripeSaaS 마케팅SaaS marketing모범positive
linearSaaS 마케팅SaaS marketing모범positive
resendSaaS 마케팅SaaS marketing모범positive이 페이지의 근거 ·86retrieved ·86
raycastSaaS 마케팅SaaS marketing모범positive
vercelSaaS 마케팅SaaS marketing모범positive
supabaseSaaS 마케팅SaaS marketing모범positive
29cm·mongdol한국 상세페이지Korean detail page첫 한국 모범first Korean positive
29cm·hata한국 상세페이지Korean detail page중립neutral
teenage·eng커머스 제품 상세commerce product page모범positive
pudding에디토리얼editorial모범positive
wadiz·400620한국 크라우드펀딩Korean crowdfunding반면교사negative
wadiz·403454한국 크라우드펀딩Korean crowdfunding반면교사negative

레퍼런스에 판단력을 달았습니다References, with judgment attached

심각도 상severity high reasoning/saas-marketing-site.json

캡처는 "이렇게 생겼다"만 압니다. v2의 추론 사이드카는 카테고리마다 언제 적용하고 언제 피할지를 붙입니다. if/then 규칙과 안티패턴, 12개 카테고리 전부. 아래는 이 페이지가 실제로 따른 규칙입니다. A capture only knows what a page looked like. The v2 reasoning sidecar attaches when to apply and when to avoid: if/then rules plus anti-patterns, for all 12 categories. Below are the rules this very page was built under.

if_data_heavy → 제품의 실제 상태를 읽히게 보여라. 블러와 글래스 효과는 비본질 프레임에만.Show a readable real product state; reserve blur or glass for nonessential framing.
if_enterprise_buyers → 보안과 컴플라이언스, 고객 증거는 먼 푸터가 아니라 제품 메커니즘 옆에 둬라.Place security, compliance, and customer proof beside the mechanism, not in a distant footer.
if_new_category → 추상적 플랫폼 장점을 말하기 전에, 전과 후의 워크플로부터 설명하라.Explain the before-and-after workflow before naming abstract platform benefits.
워크플로를 못 가르치는 불투명 스크린샷opaque screenshots that teach nothing 제품 증거를 대신하는 그라디언트 광택 블롭gradient or glossy blobs standing in for the product 내러티브로 합쳐지지 않는 기능 카드 그리드feature grids that never add up to a narrative

설명 말고, 페이지를 보여드립니다Enough describing. Here are the pages.

아래 세 장은 플러그인 안에 실제로 들어 있는 스타터 페이지입니다. 설치하면 skills/detail-page/assets/starter/에 그대로 딸려오고, 브리프에 맞춰 갈아끼우는 출발점입니다. 썸네일은 그 파일을 지금 그대로 렌더해서 찍은 화면이지, 상상해서 그린 목업이 아닙니다. These three are starter pages that actually ship inside the plugin, installed to skills/detail-page/assets/starter/ as the starting point you replace per brief. Each thumbnail is that file rendered as it stands — not a mockup drawn from imagination.

skills/detail-page/assets/starter/landing.html 렌더 화면. 'Marrow' 시간 추적 제품의 마케팅 랜딩 상단으로, 세리프 대형 헤드라인과 어두운 터미널 목업, 그 아래 로고 바가 보인다.
starter/landing.html 마케팅 랜딩marketing landing
서구권 마케팅 랜딩. 세리프 대형 헤드라인, 제품을 실제로 보여주는 터미널 목업, 로고 바, 기능 섹션이 한 파일에 들어 있습니다. A Latin-first marketing landing. Big serif headline, a terminal mock that shows the product doing its job, a logo bar and a feature section — one file.
skills/detail-page/assets/starter/pricing.html 렌더 화면. 'Cadence' 요금제 페이지로, 월간·연간 토글과 3단 플랜 카드, 그 아래 줄 단위 비교표가 보인다.
starter/pricing.html 요금제 비교plan comparison
요금제 비교 페이지. 월간과 연간 토글, 3단 플랜 카드, 그리고 플랜을 줄 단위로 맞대는 비교표까지. A plan-comparison pricing page. Monthly and annual toggle, three plan cards, and a table that puts the plans side by side, line by line.
skills/detail-page/assets/starter/settings.html 렌더 화면. 앱 설정 화면으로, 이메일 입력란의 붉은 검증 에러와 읽기 전용 필드, 켜짐·꺼짐·잠금 상태의 토글이 보인다.
starter/settings.html 앱 설정 화면app settings screen
앱 설정 화면. 잘 되는 상태만 그린 게 아니라 검증 에러와 읽기 전용 필드, 켜짐과 꺼짐과 잠금까지 토글 상태를 미리 그려 뒀습니다. An app settings screen. Not just the happy path: a validation error, read-only fields, and toggles already drawn in their on, off and locked states.

캡처 조건: 1280×1600 뷰포트에서 2배 스케일로 렌더한 뒤 512×640으로 리샘플했고, 세 파일 모두 콘솔 에러 0으로 로드됐습니다. 직접 확인하려면 설치 후 skills/detail-page/assets/starter/의 파일을 브라우저로 여세요. Capture: rendered at a 1280×1600 viewport at 2× scale, resampled to 512×640; all three loaded with 0 console errors. To check for yourself, open the files in skills/detail-page/assets/starter/ after installing.

무엇을 파는 가게인지
한 장 적어 넣으면 됩니다.
Write down what the
business actually is.

스타터를 손으로 고치는 대신, 조립기가 부품 40개 중에서 골라 페이지를 세웁니다. 아래는 그렇게 나온 결과를 그대로 찍은 화면입니다. 여기 나오는 가게들은 예시로 지어낸 곳이고, 각 페이지 하단에 그렇게 적혀 있습니다. Instead of editing a starter by hand, the composer picks from 40 modules and stands the page up. Below is what came out, photographed as it stands. The businesses in them are invented examples, and each page says so in its own footer.

브리프에서 조립된 동네 로스터리 원두 구독 페이지의 상단. 어두운 화면에 로스팅 요일을 말하는 한국어 헤드라인과 주황 버튼이 있고, 그 아래로 요일별 구독 흐름이 번호가 붙은 단계로 이어진다.
case-cafe-subscription 게이트 통과gate: pass
원두 정기구독. 무슨 요일에 볶아 무슨 요일에 도착하는지가 첫 문장인 페이지. 히어로 · 구독 흐름 · 요금제 · 자주 묻는 질문 · 푸터, 다섯 섹션. A coffee subscription. A page whose first sentence is which day the beans are roasted and which day they arrive. Five sections: hero, flow, plans, questions, footer.
브리프에서 조립된 재활 중심 필라테스 스튜디오 페이지의 상단. 화면을 가득 채우는 히어로 아래에 크기가 서로 다른 카드가 격자로 놓여 수업 방식을 설명한다.
case-pilates-studio 게이트 통과gate: pass
재활 필라테스 스튜디오. 같은 카탈로그인데 앞 장과 얼굴이 다릅니다. 다른 모듈을 골랐기 때문입니다. 여섯 섹션. A rehab pilates studio. Same catalog, different face from the page beside it, because it picked different modules. Six sections.
브리프에서 조립된 영문 SaaS 배포 체크리스트 제품 페이지의 상단. 왼쪽 카피와 오른쪽 로그 패널로 나뉜 히어로 아래에 기능 카드가 좌우 비대칭 격자로 놓인다.
case-saas-release 게이트 통과gate: pass
영문 SaaS 제품 페이지. 브리프를 영어로 쓰면 페이지도 영어로 나옵니다. 한글이 한 글자도 섞이지 않습니다. An English SaaS product page. Write the brief in English and the page comes out in English, with not one Hangul character mixed in.
바로 앞 SaaS 페이지와 상단이 같지만, 기능 섹션이 끝나자마자 같은 제목과 같은 카드가 그대로 한 번 더 나타난다.

그리고 이건, 통과하지 못한 조립본입니다. And this is the build that did not pass.

바로 위 SaaS 브리프에 섹션 하나를 그대로 한 번 더 붙인 것입니다. 조립 자체는 됩니다. 조립기는 문법을 집행하지 않으니까요. 막는 쪽은 그다음에 도는 게이트고, 무엇을 어겼는지 이름을 붙여 알려줍니다. It is the SaaS brief above with one section repeated verbatim. It assembles fine, because the assembler does not enforce the grammar. What stops it is the gate that runs next, and it names what was broken.

  • adjacent-same-type이웃한 두 섹션이 같은 종류입니다two neighbouring sections are the same type
  • adjacent-layout-archetype둘 다 같은 배치를 씁니다both use the same layout
  • adjacent-variant-diversity갈라진 축이 하나도 없습니다not one axis differs between them
  • type-archetype-repeat같은 조합이 페이지에서 두 번 나옵니다the same pairing appears twice on the page

node scripts/grammar-lint.js composer/case-saas-release-refused/selection.json 종료 코드 1. 통과한 세 건은 0. exits 1. The three that passed exit 0.

설치하면 skills/detail-page/factory/에 부품 40개와 조립기, 그리고 위 네 건의 브리프가 그대로 들어옵니다. 직접 돌려보려면 node scripts/composer-run.js composer/case-cafe-subscription/brief.json composer/case-cafe-subscription, 게이트는 node scripts/grammar-lint.js composer/<run>/selection.json. 앞의 세 건은 0, 거부본은 1로 끝납니다. 같은 브리프를 다시 넣으면 바이트까지 같은 HTML이 나옵니다. 각 타일의 선택 파일 해시와 페이지 해시, 두 종료 코드는 factory/site-build/shots/g54k/manifest.json에 적혀 있습니다. Installing brings skills/detail-page/factory/ with it: 40 modules, the composer, and the four briefs above. To run one yourself: node scripts/composer-run.js composer/case-cafe-subscription/brief.json composer/case-cafe-subscription; for the gate, node scripts/grammar-lint.js composer/<run>/selection.json. The first three exit 0, the refused one exits 1. Feed the same brief again and the same HTML comes back, byte for byte. Each tile's selection hash, page hash and both exit codes are recorded in factory/site-build/shots/g54k/manifest.json.

숫자 조작을 거부하는 도구가
제 숫자를 지어내면, 끝입니다.
A fabrication-refusing tool that
fabricates its own stats is done for.

그래서 이 페이지의 모든 수치는 출처를 답니다. 재현은 지금 명령을 돌리면 다시 나오는 값이고, 기록변경 이력the changelog과 git 이력에 남은 값입니다. So every figure on this page carries provenance. Rerun means the command returns it right now. Record means it lives in the changelog and git history.

12 캡처 레코드. 실측 스타일과 타일, 본문, 출처 봉투까지 스키마 검증 통과.Captured records, schema-validated down to their provenance envelopes. 재현rerun ls references/corpus/records | wc -l
175 테스트, 전부 그린. 검출기 22종의 분리 검증과 정직성 게이트의 우회 시도까지 매 푸시 고정.Tests, all green, pinning 22 detectors' separation and the honesty gate's bypass attempts on every push. 재현rerun node --test skills/detail-page/scripts/tests/
12 추론 카테고리. if/then 결정 규칙과 안티패턴 테이블. 중복 JSON 키까지 검증기가 거부.Reasoning categories, if/then rules plus anti-pattern tables; the validator even rejects duplicate JSON keys. 재현rerun node reasoning-validate.js → PASS 12/12
82 ↑73 독립 크리틱 점수. 실사진 carrying 재빌드를, 만든 쪽이 아닌 별도 심사 에이전트가 판정.Independent critic score on the real-photo rebuild, judged by a separate critic agent, never the builder. 기록record 변경 이력 v2.0.0, "rescored 82/100 (was 73)"changelog v2.0.0, "rescored 82/100 (was 73)"
~41k 활성화당 토큰 절감. 스킬 7개의 본문을 필요할 때만 읽는 참조 문서 10개로 이전. 내용 무손실 검증.Tokens saved per activation: 7 skill bodies moved to 10 on-demand references, verbatim-verified. 기록record 변경 이력 v2.0.0, thin-skill refactorchangelog v2.0.0, thin-skill refactor
0 API 키. 코어는 빌트인 Node로 돕니다. 키를 읽지도, 저장하지도 않습니다.API keys. The core runs on built-in Node; it never reads or stores your keys. 재현rerun 설치 과정에 키 입력 단계 자체가 없습니다there is no key step in the install at all

설치 두 줄. 그다음은 전부 자동Two lines. Everything after is automatic

다음 저장부터,
당신의 페이지도 이 규율로.
From your next save,
your pages get this discipline.

*.html을 저장하는 순간 채점이 자동으로 돌고, 픽셀 비평용 브라우저가 없으면 백그라운드에서 한 번 알아서 설치됩니다. 외울 명령은 없습니다. Save an *.html and the grade fires on its own. If the pixel-critique browser is missing it installs itself once, in the background. Nothing to memorize.

설치install

클로드 코드 v2.1.100 이상claude code v2.1.100+
plugin marketplace add elon-choo/visigner
plugin install visigner@visigner
잃을 게 없습니다. 제거는 /plugin uninstall 한 줄. Nothing to lose. Remove with one /plugin uninstall.