{"_id":"font-lab","_rev":"31-bd6273be89d7556d0a574ccd1fc36431","name":"font-lab","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"font-lab","version":"0.1.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"name":"jmg698"},"license":"MIT","_id":"font-lab@0.1.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"73f45a337e590983b722296f8a12e742b3bee7dc","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.1.0.tgz","fileCount":32,"integrity":"sha512-AVwZOwzMhpKxUg+/H5vQx3u9s1uHPqdAshUQdR/LIP/quPlsYkwofmVG+mnsnTQPs8ImVdr+lpU/LSHFdy5AgA==","signatures":[{"sig":"MEUCIFvQps7Z5W40POST53zUXYx5JEmwuwEHNXuxy7HLYK/EAiEAgjUaqLaroDdruCVRK8At14VIJu6XdMCmMEPB/s6Bma8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205099},"type":"module","engines":{"node":">=18"},"gitHead":"0506516eebd9038065ec7a94fbb5142190fa2c05","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"jmg698","email":"jmg698@gmail.com"},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.3.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.1.0_1782566793563_0.5855216347294347","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"font-lab","version":"0.2.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"name":"jmg698"},"license":"MIT","_id":"font-lab@0.2.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"95877b8d7ac2259ad708c800bc068a9e2b729be8","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.2.0.tgz","fileCount":32,"integrity":"sha512-RiOiXEIVg59xTQP/1bgIYNckP8UJN0cvtQAlaW81EqXKGOhOnFuyTy55GvAPyIGyXqLsFGTqjRTl6y8FnW3o3A==","signatures":[{"sig":"MEQCIBGXWsTBPt49Re06d0dkY/v7GYPUvJNuCAevYdmELd/3AiBppMO2b6Ni5phAm9SAzrlSKUDlDcCz9chpD3F7hono8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205099},"type":"module","engines":{"node":">=18"},"gitHead":"0506516eebd9038065ec7a94fbb5142190fa2c05","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"jmg698","email":"jmg698@gmail.com"},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.3.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.2.0_1782577096114_0.5400050577693516","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"font-lab","version":"0.3.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.3.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"f9e4793acaa70dc2400a1e80b62f7ae7f792159b","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.3.0.tgz","fileCount":34,"integrity":"sha512-2YJm+IBt7Z2jB8vv21NmGGA8LbunBmgr8dd5Xn7Ni3rvcCSsv/FaQDxVzj4/AakFyj5GaMPk3aN34jxQH2OaLw==","signatures":[{"sig":"MEUCIGGEgP+bF4APRvaDFhLYYgzboFHzuZfncAfymAEtKKXrAiEApfnIcfwguEpSfm0Q1gCTmnvtWRaNbXVonAzClC+q718=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":217905},"type":"module","engines":{"node":">=18"},"gitHead":"707e87b5750111d4523879bf533f92572f8084c7","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.17.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.3.0_1782658184028_0.06630180719131218","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"font-lab","version":"0.4.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.4.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"6126ab0dcfa84027432d60b38d3c3e9ae376bb65","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.4.0.tgz","fileCount":38,"integrity":"sha512-/JGPtnAkWSAQ7AE6sRN3hs5X81/vIMsCeKd7TAZouxaTmqWUirBpJCbuhczg07uVEJyMGC2wjBy0Ee1Ed4F1Ig==","signatures":[{"sig":"MEQCIBAeH+JDqwjrCuInAiP6fEOdXr1wC+juAMfnic1745WYAiAQ6akTng05wBn/eHEvBYfPak/SUj33qvW2ixrnl5N8Kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":265196},"type":"module","engines":{"node":">=18"},"gitHead":"588d61f4dd7a868fe9b08c26a3841b0d16d3fbde","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.4.0_1782792120651_0.8222566979925994","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"font-lab","version":"0.5.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.5.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"06d1dbc0ac04fa389596da96322b54cfe8f47c1c","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.5.0.tgz","fileCount":39,"integrity":"sha512-zDngVO5JQrcHlNG41jD2KguVd/XLvj4lXbovVBuNlQ9FGcN42mZ1ayOztC6eIcwaNuQWe6HIzWa+2AxN6kAMUQ==","signatures":[{"sig":"MEYCIQDDxBTVj8WYOfHwTSXdLb4xj2lPRUj9J7BZFVOzXl94LwIhAKs2Kzx2ukoavW/15z9Hg7Yg1RP56QSlhxhkYA8NNLp1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":281592},"type":"module","engines":{"node":">=18"},"gitHead":"0c7288a15eeda296640e5e7f7ff19ac58250d492","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.5.0_1782821103260_0.0261509840162224","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"font-lab","version":"0.6.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.6.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"2dc8e33432dd3050a21d761dc734fc836398d4d3","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.6.0.tgz","fileCount":41,"integrity":"sha512-dqkGWQ61t+KLqIC+Kb7ZRCEuMB+n8RR4QOMdVTssE/10R1kN9qgCoMYgmSBwGY1XbrP5RECd7sgWRTUWYwUEFg==","signatures":[{"sig":"MEQCIFnUqU7E9atb7IOvN5t4e72VupksPABlaOY2/fdcBaWtAiBDLio9oKFUn8hE77TBAVQXZjFMSqmXKcLTNLjqCmJ6Pg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":290166},"type":"module","engines":{"node":">=18"},"gitHead":"9f85670cc8d3a55d2b3287ff584e5ed5ef08f7b1","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.6.0_1782823340776_0.36123759304879477","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"font-lab","version":"0.7.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.7.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"fba4a6d8a83a70ae164f68b5c55c7d93c2d0f34e","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.7.0.tgz","fileCount":43,"integrity":"sha512-wxVOwIxamiRl9F7vV1aRBT4z6PY/+BzilT4F29nH9ZfSUFJcda/8RnFsbVSABAUsiFmirvJWL54/jB4/pgeSdA==","signatures":[{"sig":"MEYCIQCypEZ6vU+wDQYtq/6rUxO/pOfYOeo8SkGGzBgt/5fp6wIhAK8bGDzR9qdYxHZpeD4OsimJyZVg0QAwxKoSf7KfFWsi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":299280},"type":"module","engines":{"node":">=18"},"gitHead":"5e94e84e8b0b0d560cd3aa0de7c36a2a981bd0e0","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.7.0_1782825872694_0.1205487927770148","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"font-lab","version":"0.8.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.8.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"a3fc4e081b357c7b80200f7766bc93f576994d20","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.8.0.tgz","fileCount":45,"integrity":"sha512-N9/LEezpaj1AJ8TQ2Mt167ess3cS6mpA2t8viE5PuuoDx6630oTbxvLnB93YtIaTM77Lm07AxSVbgsd5qK2X1w==","signatures":[{"sig":"MEUCIQDrSWVdZi/A4mKaYPOlaraEVOdburf5sFvqZ8U27N/heQIgESe/xGsU3JBSeHco/89XWw7F3EhQjAfZxgIQgmYJRic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307921},"type":"module","engines":{"node":">=18"},"gitHead":"4b77430c631967fb3cd6c28e9c9fa207fdec8215","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.8.0_1782848816035_0.7619795767752917","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"font-lab","version":"0.8.1","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.8.1","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"77414d545068592b6d404f26e47a5924f7aebdb0","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.8.1.tgz","fileCount":45,"integrity":"sha512-XoWLRU9kKPGektTzle9TYfhBCgkrMFcNy/j67GoYsk3OcTYfIMy9/oBJ9pTJTK7C8sQw+/ct2EOPicBPm0BydQ==","signatures":[{"sig":"MEYCIQDZk6IOICCA77UKLFs2JVBV5LXB7F0rcv6AFc+XgKS5ZwIhAPHIW7eot6J25c4Nbt3r7RDtwPqQj4sCt0UiaeWH20Cq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":309862},"type":"module","engines":{"node":">=18"},"gitHead":"ffcbe934e5727167ce652fefccf9f1da4e6b525e","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.8.1_1782915464209_0.776784373063405","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"font-lab","version":"0.8.2","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.8.2","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"9bc8f77af557817b47fe8c34f2fa7a6f7e581e91","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.8.2.tgz","fileCount":46,"integrity":"sha512-j0Ae1fd0nXdWFW3V9fGz3rWKc+orG+yNzmp+UFSuwIPUGONnr29vRJ+Y+3pYbk2xaSxHTnURH3CZIyhmJKqplw==","signatures":[{"sig":"MEUCIQCm2xi+gA+DKQMGDmArNlUurBV181xhvH0GqgTR99XikgIgayJudLKamH9HgPfHyzrIIjswWpQPpIJH0xd2/6xIVbI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":360507},"type":"module","engines":{"node":">=18"},"gitHead":"3e6ddba6943ca2a1194aefaca6e6f04451c8322d","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.8.2_1782925712082_0.6892099532501517","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"font-lab","version":"0.9.1","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.9.1","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"a3b27ecaa8cccfaf36c333459e2d40f3b6585a95","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.9.1.tgz","fileCount":49,"integrity":"sha512-WXu8mXYDZqrZO9t2XDIXGEmuTFdbfMXrLV9mjon7weuVqoFrRaW1triLLRNFgDRVhnaV+QWi5scee1XHnWUHTg==","signatures":[{"sig":"MEUCIA1IoXAGyBKX6QBtdNok4umtQUtqD4bXBhEsVribbSLwAiEA8pbDQgIfkCVCWg2j2Z4T3Ek3nDASTrumRuWUrYQRCYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":399439},"type":"module","engines":{"node":">=18"},"gitHead":"4d09c67959573410b0a93ccce94b015fc7bfe0a5","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.9.1_1782996610961_0.01988689368843799","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"font-lab","version":"0.9.2","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.9.2","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"da90972873247d3aad1f8e5bef52d5b362923cbb","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.9.2.tgz","fileCount":52,"integrity":"sha512-lM//KTGMHB9q69VibXpUNGSF0m4pF0niS9GlnF/Y89Cs5KNt+9ViOfoJ5cXSJJm1i1zbDSUo8rlrFF0TL+suNw==","signatures":[{"sig":"MEYCIQDWHt8voraXlZkwwOa0WUzq29MXgRJS9exJadQ2Nef66wIhAK9hU67gJX6FgFCufiVIuMCI+1VBlpqAB/UGTTyNLt1s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":444859},"type":"module","engines":{"node":">=18"},"gitHead":"fe0fd17659152846d3febd0044b9cb9bbe640575","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.9.2_1783043174580_0.42639125594804606","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"font-lab","version":"0.9.3","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.9.3","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"b3ab84ed8dd55f300459e50aabe19e6d948f1927","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.9.3.tgz","fileCount":54,"integrity":"sha512-JUOm8FQUzJxT8FTaIqejiZSd3Ll4fjxo4VdBMCKbOmKcc+1jgkBldCsKXCLtivz6ua4DudijOCQGGV+wG9rEyA==","signatures":[{"sig":"MEUCIQC+aW2gL9F6oeCNc5c8nGowWMR2C/Wpqe+c5JlJT8OQvgIgfjRjhHd90bu3HMw6/9wmR/mCATv1rJ/J5r7vhDMqJY4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.9.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":455749},"type":"module","engines":{"node":">=18"},"gitHead":"d6fb5e4ebb0e50f52e83f997887c478ff7adce2b","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.9.3_1783171849182_0.7404102898950493","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"font-lab","version":"0.10.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.10.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"1097d670599e4ba8a40820f7e97e6724ab749b87","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.10.0.tgz","fileCount":55,"integrity":"sha512-VCUhdNbG+wNwVxhamJTaqLL3CZNdNAaE1XeuKCg6RnfhaHFDJsYyteTeXRwtib6S31jyikoVNj10bIoHbi7OSw==","signatures":[{"sig":"MEUCIQCxExnyguuzJKa+X2IjIP+mmT0pmvLxh/QefUCUaXnjVgIgQlFTYJGgCpwQONtEhvS2N8cxdTbR0JPW3tMFMX40ILQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":507764},"type":"module","engines":{"node":">=18"},"gitHead":"15083ab5b7b7b362b3386b68c5cf875a04a1750d","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.10.0_1783349260558_0.08179768326879855","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"font-lab","version":"0.11.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.11.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"b9eabb85064456d5ea27b534c059b1e0a929dfcc","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.11.0.tgz","fileCount":57,"integrity":"sha512-OZHBRVLPrb0O11PcQfTY34+241qs2mt2PkDaySUrIELXQkoyfid+3WxtaFqT3mkdE21E3wlvEn0dg9FG1IGtvg==","signatures":[{"sig":"MEUCIQDDI75KA1LgKOoSEGYDLjuSa01IltKEwRWcKxZPBQvsdAIgf4ADWGZ0Y6CuD1/gMO1+zYzaiZ+Dfqy9+7o+T4OdXkI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":534698},"type":"module","engines":{"node":">=18"},"gitHead":"f3422b0f7ab5fb6befb231d80744f0103f23d360","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.11.0_1783430538362_0.828344124673932","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"font-lab","version":"0.11.1","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.11.1","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"fcbc0456a9e6549f3e623b4f7bb03ff5cecf4813","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.11.1.tgz","fileCount":57,"integrity":"sha512-0cch0D9VCKld6EerJrq7rcZy4V86oer2nHFpGVAVO+OuVFK71Sdu7a2e2Yvs+Yf0iqp9OyQZax0apo3mv5SHmQ==","signatures":[{"sig":"MEQCIEuN4THO4gxFoaY12mDkGoYaULsadWN3mjnsn7jWJvRBAiAbafGSVRJsEWMPOzGM3LHpNovbHefRmAm3ae4RHhltQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":547948},"type":"module","engines":{"node":">=18"},"gitHead":"e9a708f6a7bc26471ac88f85d74e3e581bf13462","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.11.1_1783439467498_0.4737862530996173","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"font-lab","version":"0.12.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.12.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"d1d15736c2b3b4f268a9e459f5d4523d2a7746e8","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.12.0.tgz","fileCount":58,"integrity":"sha512-kSSlDgdhZcK2dsxkBQA24c+ycVgurAFTtBMzVrDACFTKzp3jHgtetcUS2Inc78BohWu3Jie+sMgULev83xtzXg==","signatures":[{"sig":"MEQCIAkN+23sF64o0F46Mtns82oiCRgZpzd8gQVERXYZBQ4rAiAXBZGhi80S0n1HqN8/XS0ZwogByjmp1oHqvRZjeTHLeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":599057},"type":"module","engines":{"node":">=18"},"gitHead":"3c9297e5437dd9dfeab765864a1dad03101c0b1b","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.12.0_1783521154170_0.34457665432382756","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"font-lab","version":"0.12.1","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.12.1","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"5897d21beef47fa711b90ffddebfeb94251425d3","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.12.1.tgz","fileCount":58,"integrity":"sha512-rOhzgMC52YZjyQvT+qmhzASJVuuwtFb9CuSFa/paTqxPfmglY8OsH4BzIPU7P2rE1PfBanib0LrBC4gRQxgIhw==","signatures":[{"sig":"MEYCIQDW6KsdipTlwKnvK47mEGjle131OkoWpIxic2x42ZpE4wIhAOdEm79OKVz4xsfrhkk+rRFAwI423A4uISnAm9pkeQUk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":601985},"type":"module","engines":{"node":">=18"},"gitHead":"98da4584dd4e5e208894c6bb19a6cd68d0e2c3f4","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.12.1_1783537534568_0.9409592771436084","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"font-lab","version":"0.12.2","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.12.2","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"143dbb418fb242e5f16b3dd84b78abfdc1b0c2b7","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.12.2.tgz","fileCount":58,"integrity":"sha512-Joof2fHX5PROQ9fbwWPDQ7rANyoE6R7zn2eZfo4cfYkpP0ks4tqfg+ksHwlrdtfJIAcBWHugXGYXqFq160Yc5g==","signatures":[{"sig":"MEQCIASqANyO5lFYVpcehM+1aF5Oem88vzjrSE8+WKOgDY8iAiBXcXKx/tFJ5nWIPvnteyIa+bFJOYjbHWernDQvLDT2/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":606800},"type":"module","engines":{"node":">=18"},"gitHead":"bf22ce3e5a5165b89b7d78903e10508318a610f0","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.12.2_1783543663263_0.9852725156532636","host":"s3://npm-registry-packages-npm-production"}},"0.12.3":{"name":"font-lab","version":"0.12.3","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.12.3","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"b00f499428e0e450da9dfd3de009c8011c2d6746","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.12.3.tgz","fileCount":58,"integrity":"sha512-YzU4FF+onhJsd57/gLXi1kCjPXAukaBTI7D6kRkQEY5VNdRqo8iDEDUfWHSefyfz4OegT2UDkvqHS1FCo+DvAA==","signatures":[{"sig":"MEUCIEKDtOg/Nyzc3GtQ1Ph8Yktxuj2gbD57M1M19tidmS7vAiEA6tQPJ9B5opHbiHWd0NRbetyTqxOI/frn5MIsf7OxHsg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.12.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":615800},"type":"module","engines":{"node":">=18"},"gitHead":"2f9c7acc5131cf3fa22a24077a10fdc61efa895a","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.12.3_1783607584600_0.421997530983673","host":"s3://npm-registry-packages-npm-production"}},"0.12.4":{"name":"font-lab","version":"0.12.4","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.12.4","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"6b1418f56ca3b34b2fd414bdc3efc638618581b3","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.12.4.tgz","fileCount":59,"integrity":"sha512-a2XB8HAjsmYYEG9EEp0EmCRx49k4O03NotMVo3ts8ak7iKYiZ9SXHd/G9PXl1Xuz2RSWzrKTRMPPAXYWJO+EAA==","signatures":[{"sig":"MEUCIQCzHjqZlWiiEAW98LnIx/LLS5NRuS95cwXvf2Td8kKtawIgT9WoBkQVvGMFtj+4F6efZis3sUHXAltwCLwu5O42kUQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.12.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":638585},"type":"module","engines":{"node":">=18"},"gitHead":"8cf99b40c708399c027cc2e5d82ac92bb7cbbce3","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.12.4_1783686342213_0.9125417404446603","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"font-lab","version":"0.13.0","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.0","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"e926911d7317bef33b30b46244b65214ada2e61e","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.0.tgz","fileCount":61,"integrity":"sha512-9JkxccEpqjKI0NBx2ugME98GG6YO7dh/M87BR93va5VjTtgwZRvS6e3/LYSpIcchakl1/r7nXGdgMyisJ/4mZw==","signatures":[{"sig":"MEUCIQD6GeAvjbuf5p9kNeClFsBIUmqxW9QoQE1AKOAhBB9vLgIgfd7ZTBX7B6p0Kox5tBcYALJ1OyJROd+WD2aJfkmqlno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":682952},"type":"module","engines":{"node":">=18"},"gitHead":"4f903045ce30e85c2ccc891608c7477f7f167b4e","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.0_1783772936851_0.8283545442897926","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"font-lab","version":"0.13.1","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.1","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"1790e97c06c261c0e8aab11ee19a8128e524847d","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.1.tgz","fileCount":65,"integrity":"sha512-HRwjoDCtojsrXWc4BI8h68oRCJ90fpk/P+jMb8VUd99hphhfJ9GCsSY4MKm77n5V37sV6PUya+JUNEujCIAT6w==","signatures":[{"sig":"MEQCIDpqpz+YRL2EZGKlc9ChXP/gOXQ4Jna5gODKMKYM1BJPAiB9NgYkVpGqbN275i+w2JsD95VOBF2j53Trd07CrU0+4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":741485},"type":"module","engines":{"node":">=18"},"gitHead":"001a21445cd4d6be28da119a429d5eed44f07f61","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.1_1783785151613_0.2975068583523961","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"font-lab","version":"0.13.2","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.2","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"85710924b59025732c964b9331533d2bcdae900e","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.2.tgz","fileCount":65,"integrity":"sha512-tAVfdmOvSpCVC3BvXvPuz25DzlFwFrHWEUQ6b/IRO1bVCafNWvj3sttYxU/CHA/VG7oSHsYowntTRZ4FcTe2/g==","signatures":[{"sig":"MEQCIGUASDfqLsbkD1jYTPPJngQT7XwNMVqw49xOL9Eq7o+QAiA9sTMD4BLSBlSWJ929Q4WMO6VYeX7ZB3uFqUR5hm0T6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":741485},"type":"module","engines":{"node":">=18"},"gitHead":"83d1da1f9136555c15aa176c7852c3da93df1788","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.2_1783829007059_0.9856469010568372","host":"s3://npm-registry-packages-npm-production"}},"0.13.4":{"name":"font-lab","version":"0.13.4","keywords":["fonts","typography","nextjs","next-font","tailwindcss","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.4","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"527c976232990259af80b61297e18319fcb3a250","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.4.tgz","fileCount":65,"integrity":"sha512-XjGCAIZ9fgIiq7PN+yke8PSts+XtW2/n5xyV6Have9V94T4kMtBuTnqeObyGXVv9zoDwilXAKLDiE3fcNE0cow==","signatures":[{"sig":"MEUCIG7Tsrp6vK396OcaeJadEtjM6XhRoHqgkTbmFrGBfrAPAiEAouPWNEi/1OaQWGpzKwyUwCZu2qmjlbSuu8q9M0lVtoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":755046},"type":"module","engines":{"node":">=18"},"gitHead":"a22defa7d02fd55b8dc2e6288bc31f971baa06c4","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography in Next.js + Tailwind apps. Curate tasteful font directions on your real running site, let a human pick, and ship the exact next/font + Tailwind code. Installs as an agent skill + MCP server.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.4_1783877491495_0.47636810682175","host":"s3://npm-registry-packages-npm-production"}},"0.13.5":{"name":"font-lab","version":"0.13.5","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.5","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"578b248be865cde2ded6eab47cd84270dc12d6f8","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.5.tgz","fileCount":65,"integrity":"sha512-I4+RBr1T1bUhJFPm2pM+49Sh8buFXV3uohwtrzCVXEffN7wSAbr3blXcr9Yy9R1tAayF7fu+u4EmuSEDIxhQ3A==","signatures":[{"sig":"MEUCIQC4CM7MWlXeTtKPuf8uCezP/AjjIwPJ+NkXbtS6760hUQIgYI+iRHmfGU+qd7258bnHqHuJ/vH5to68/uHredz9FhY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":776757},"type":"module","engines":{"node":">=18"},"gitHead":"f6adb189824727b3bdff68d9908984dcb418c004","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.5_1784203787745_0.4154159497501435","host":"s3://npm-registry-packages-npm-production"}},"0.13.6":{"name":"font-lab","version":"0.13.6","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.6","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"cec2fbff52f64bbf974b4f571e66320e675e144c","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.6.tgz","fileCount":65,"integrity":"sha512-tkvT59ldF75NunxQER8H2dblZ7NnMMC3V/9L4QtZjXAPaUMVznx5TTdgIMe9C59o/Bvq8bkHkblwhWe8xMZTZw==","signatures":[{"sig":"MEYCIQDZ1myFUz0/H0Ol0gf+hwI1Hpvtu4YXwBaMvwHIDEuusgIhAO1k9BM/AnBYGYv8UaQa8YQ338RCNw9D8PAXMXttmD/n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":791348},"type":"module","engines":{"node":">=18"},"gitHead":"4d610e505521dfdbd4fab4d00cd79b46c7bc864a","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.6_1784213524706_0.28000378310904717","host":"s3://npm-registry-packages-npm-production"}},"0.13.7":{"name":"font-lab","version":"0.13.7","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.7","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"e25e468d6912911e68ae38465305a8c0ea2eb618","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.7.tgz","fileCount":72,"integrity":"sha512-jpMna3cBKXgDqc1UC1Bok24KOm+tSJqZ39qgqn0iavDLoVJPpJjpj5O8L7J37gBT3M0wgZuItOni/jj98DuznA==","signatures":[{"sig":"MEYCIQCiHEg1Y9bP1dFURXS6JOrF1jDlcI2yd7EwO+5jhGYJfAIhAImwtSmxyv7pIWfEXTp1uvyB0ZzqNzWqEsq9tnhgInMm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":903629},"type":"module","engines":{"node":">=18"},"gitHead":"2fd46b054d5d96181489e5b26b2b608d711aa9e4","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.7_1784528879507_0.5348993528082773","host":"s3://npm-registry-packages-npm-production"}},"0.13.8":{"name":"font-lab","version":"0.13.8","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.8","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"a48e9fd67094387e63747bf11be281c61c244e1f","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.8.tgz","fileCount":72,"integrity":"sha512-NLY0vzxsSQfCGFhsBrh8uXbKrh8YidpeFxUdhqFbJyw35Fn7rjcWYMKRv67COqTGh7JpIa96ETsMh06TGjgX6g==","signatures":[{"sig":"MEUCIGifbzaC82KZVZlSkq1OIykxdUQBgUFTVM6lr1uj/7k9AiEAkcSyY7nm0Ebc3BYAjABKSgmY49F/I4a5An9NLlQDHbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":930750},"type":"module","engines":{"node":">=18"},"gitHead":"10ac902e14cdb9df5db68cc58c76206002e935d9","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.8_1784538997613_0.34723479321146145","host":"s3://npm-registry-packages-npm-production"}},"0.13.9":{"name":"font-lab","version":"0.13.9","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"author":{"url":"https://jack-mcgovern.com","name":"Jack McGovern"},"license":"MIT","_id":"font-lab@0.13.9","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"homepage":"https://github.com/jmg698/Font-Lab#readme","bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"bin":{"font-lab":"font-lab.mjs","font-lab-mcp":"mcp.mjs","font-lab-init":"init.mjs","font-lab-undo":"undo.mjs","font-lab-apply":"apply.mjs","font-lab-curate":"curate.mjs","font-lab-rewire":"rewire.mjs","font-lab-select":"select.mjs","font-lab-analyze":"analyze.mjs","font-lab-install":"install.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs"},"dist":{"shasum":"a91ce4fd15a1e9f9ba0801c32260eaec5d0359b8","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-0.13.9.tgz","fileCount":75,"integrity":"sha512-uIzKixzWuSsUALMrrBJB4ys4Pl4+s64NBIL/W5vxdvNp5Kedt3Caj03jOIN6uGAiMowPMRYs0S0hvz7KjPNYvg==","signatures":[{"sig":"MEUCIFtV6HPfflQMlEeWlmBwBSS6i+M7dVY2NCoYGs8Zfsx7AiEAzsyeX7W4y7QcIgEf2o/JbgIwJ0Yp0ZO8qtS1S4ZTawU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@0.13.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":984749},"type":"module","engines":{"node":">=18"},"gitHead":"d88ffc5a53537a5b2ea89382995a2026da68a8f1","mcpName":"io.github.jmg698/font-lab","scripts":{"m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh","gen":"node gen-catalog.mjs","mcp":"node mcp.mjs","undo":"node undo.mjs","apply":"node apply.mjs","setup":"node install.mjs","start":"node font-lab.mjs","curate":"node curate.mjs","rewire":"node rewire.mjs","analyze":"node analyze.mjs","prepack":"node bundle-skill.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"repository":{"url":"git+https://github.com/jmg698/Font-Lab.git","type":"git","directory":"cli"},"_npmVersion":"11.18.0","description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ts-morph":"^28.0.0","source-map":"^0.7.6","@capsizecss/unpack":"^4.0.1","@capsizecss/metrics":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.56.1"},"optionalDependencies":{"playwright-core":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/font-lab_0.13.9_1784820043291_0.930921745370908","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"font-lab","version":"1.0.0","mcpName":"io.github.jmg698/font-lab","type":"module","description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"license":"MIT","author":{"name":"Jack McGovern","url":"https://jack-mcgovern.com"},"homepage":"https://github.com/jmg698/Font-Lab#readme","repository":{"type":"git","url":"git+https://github.com/jmg698/Font-Lab.git","directory":"cli"},"bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"engines":{"node":">=18"},"bin":{"font-lab":"font-lab.mjs","font-lab-install":"install.mjs","font-lab-apply":"apply.mjs","font-lab-undo":"undo.mjs","font-lab-rewire":"rewire.mjs","font-lab-analyze":"analyze.mjs","font-lab-curate":"curate.mjs","font-lab-init":"init.mjs","font-lab-preview":"preview.mjs","font-lab-screenshots":"screenshots.mjs","font-lab-select":"select.mjs","font-lab-mcp":"mcp.mjs"},"publishConfig":{"access":"public"},"scripts":{"gen":"node gen-catalog.mjs","start":"node font-lab.mjs","setup":"node install.mjs","analyze":"node analyze.mjs","curate":"node curate.mjs","apply":"node apply.mjs","undo":"node undo.mjs","rewire":"node rewire.mjs","mcp":"node mcp.mjs","prepack":"node bundle-skill.mjs","m1":"bash run-m1.sh","m2":"bash run-m2.sh","m3":"bash run-m3.sh","m4":"bash run-m4.sh","m5":"bash run-m5.sh","m6":"bash run-m6.sh","m7":"bash run-m7.sh"},"dependencies":{"@capsizecss/metrics":"^3.4.0","@capsizecss/unpack":"^4.0.1","source-map":"^0.7.6","ts-morph":"^28.0.0"},"optionalDependencies":{"playwright-core":"^1.56.1"},"devDependencies":{"playwright":"1.56.1"},"gitHead":"365cbf0cdb96556e137158dc7403e7f4a8bfbd10","_id":"font-lab@1.0.0","_nodeVersion":"24.18.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-xJtX+VJZiYno1OwrcgrVQzO/BfzSKVFmH0jhgTUQ136IeW3Bd5Or2f07pwLLU01kICpfX+0ZxwFBHWbtuVH5QA==","shasum":"f096e0876ef23e7db31e82909c5dd46a6bfca672","tarball":"https://registry.npmjs.org/font-lab/-/font-lab-1.0.0.tgz","fileCount":75,"unpackedSize":993217,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/font-lab@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDfTNItV63FZCb/PzXI+r3FNygmhOXOLnWU+22VomzaPgIhAIY2RCT276oRGAfxIbh4lcZDzQgw+gNftwheag8OUpcF"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5b1ea3ae-d8ca-49c3-a4b8-db305dd652a6"}},"directories":{},"maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/font-lab_1.0.0_1785095074809_0.08202936059180255"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-27T13:26:33.333Z","modified":"2026-07-26T19:44:35.279Z","0.1.0":"2026-06-27T13:26:33.730Z","0.2.0":"2026-06-27T16:18:16.271Z","0.3.0":"2026-06-28T14:49:44.157Z","0.4.0":"2026-06-30T04:02:00.816Z","0.5.0":"2026-06-30T12:05:03.433Z","0.6.0":"2026-06-30T12:42:20.913Z","0.7.0":"2026-06-30T13:24:32.839Z","0.8.0":"2026-06-30T19:46:56.189Z","0.8.1":"2026-07-01T14:17:44.389Z","0.8.2":"2026-07-01T17:08:32.309Z","0.9.1":"2026-07-02T12:50:11.129Z","0.9.2":"2026-07-03T01:46:14.723Z","0.9.3":"2026-07-04T13:30:49.352Z","0.10.0":"2026-07-06T14:47:40.728Z","0.11.0":"2026-07-07T13:22:18.505Z","0.11.1":"2026-07-07T15:51:07.699Z","0.12.0":"2026-07-08T14:32:34.350Z","0.12.1":"2026-07-08T19:05:34.760Z","0.12.2":"2026-07-08T20:47:43.426Z","0.12.3":"2026-07-09T14:33:04.805Z","0.12.4":"2026-07-10T12:25:42.355Z","0.13.0":"2026-07-11T12:28:57.040Z","0.13.1":"2026-07-11T15:52:31.773Z","0.13.2":"2026-07-12T04:03:27.232Z","0.13.4":"2026-07-12T17:31:31.702Z","0.13.5":"2026-07-16T12:09:47.901Z","0.13.6":"2026-07-16T14:52:04.907Z","0.13.7":"2026-07-20T06:27:59.686Z","0.13.8":"2026-07-20T09:16:37.753Z","0.13.9":"2026-07-23T15:20:43.495Z","1.0.0":"2026-07-26T19:44:34.953Z"},"bugs":{"url":"https://github.com/jmg698/Font-Lab/issues"},"author":{"name":"Jack McGovern","url":"https://jack-mcgovern.com"},"license":"MIT","homepage":"https://github.com/jmg698/Font-Lab#readme","keywords":["fonts","typography","nextjs","next-font","tailwindcss","vite","astro","claude","claude-code","mcp","agent","skill"],"repository":{"type":"git","url":"git+https://github.com/jmg698/Font-Lab.git","directory":"cli"},"description":"Font Lab — a decision surface for typography. Curate tasteful font directions on your real running site, let a human pick, and ship the exact code for your stack: next/font + Tailwind on Next.js, self-hosted @font-face on Vite/Astro/Remix/SvelteKit/TanSta","maintainers":[{"name":"jmg698","email":"jmg698@gmail.com"}],"readme":"# Font Lab\n\n[![npm version](https://img.shields.io/npm/v/font-lab.svg)](https://www.npmjs.com/package/font-lab)\n[![npm provenance](https://img.shields.io/badge/npm-provenance-blue.svg)](https://docs.npmjs.com/generating-provenance-statements)\n[![license: MIT](https://img.shields.io/npm/l/font-lab.svg)](https://github.com/jmg698/Font-Lab/blob/main/LICENSE)\n\n![Font Lab — flipping font directions live on a real running site](https://raw.githubusercontent.com/jmg698/Font-Lab/main/docs/assets/font-lab-demo.gif)\n\n*[Watch the full demo →](https://jack-mcgovern.com/fontlab)*\n\n**A decision surface for typography — on any stack with a CSS seam.** AI removed the labor of\nimplementing fonts but deleted the *moment of choice* — and taste only happens at the moment of\nchoice. Font Lab puts it back: it asks what you're going for, hands you a small set of **tailored,\ndistinctive** font directions rendered **live on your own running site** (or as screenshots), lets\na **human pick**, then ships the exact code for your stack — `next/font` + Tailwind on Next.js,\nself-hosted `@font-face` (Tailwind `@theme`, v3 utility overrides, or your own font vars) on\nVite / Astro / Remix / SvelteKit / TanStack / plain CSS — reversibly. The human keeps\nthe taste decision; the agent does the typing.\n\nIt installs as an agent **skill + MCP server** (`npx font-lab install`), so you can just say\n*\"pick better fonts for this site\"* and the agent drives the whole loop. Works headless (screenshots\nin chat, on web or phone) or live (a flip/mix/compare panel on your real site).\n\n**What makes the options good (v2):**\n\n- **It asks first.** `font_lab_start` returns a design brief — framing questions (what feeling?\n  how bold a departure? brand to evoke or avoid?) the agent asks *before* proposing fonts, so the\n  result is tailored to *you*, not a generic default.\n- **It reaches past the defaults.** A built-in anti-generic rubric steers off the overexposed\n  AI-default faces (Inter, Geist, Space Grotesk, …) toward distinctive, designed type — and the\n  menu is *rejected* if it's all generic.\n- **It's not limited to a 41-font catalog.** A **dynamic shippability gate** admits any of ~1,500\n  Google fonts on demand — plus a curated bench of distinctive **open-foundry** faces (Cabinet\n  Grotesk, General Sans, Clash Display, …) — verifying each can ship with **preview == ship**, or\n  flagging an honest \"may render slightly differently\" when it can't. The catalog is a floor, not\n  a ceiling.\n\n> Published from CI with [npm provenance](https://docs.npmjs.com/generating-provenance-statements) —\n> every release is cryptographically traceable to this repo and commit.\n\n## Install (one command)\n\nInside your project (any framework) — or just ask your agent *\"install Font Lab\"*:\n\n```bash\nnpx font-lab install\n```\n\nThis does two things, idempotently and reversibly (the familiar `npx <tool> install`\npattern):\n\n1. **Skill** → copies the `font-lab` skill into `~/.claude/skills/font-lab`, so the agent\n   *discovers* it every session. You just say \"pick new fonts\" and it reaches for Font Lab.\n   On Claude Code it also wires a **turn-start hook** (when font-lab is installed in the\n   project): an undelivered pick surfaces in the agent's context on your next message,\n   whatever you type.\n2. **MCP server** → registers `font-lab` so the agent has the `font_lab_*` tools. The\n   registration is **pinned against version drift**: project-scoped configs run the project's\n   own install (`node node_modules/font-lab/mcp.mjs` — so `npm install` IS the MCP upgrade),\n   and global configs use `npx -y font-lab@latest` (re-resolves per session instead of\n   freezing at the npx cache's first answer). (A newly registered MCP server is picked up on\n   the next session/MCP reload — until then, and any time the server drops, every tool also\n   runs one-shot as `npx font-lab run <tool> '<json-args>'`: the same tool table, the same\n   JSON out. `npx font-lab run` lists them.)\n\n```bash\nnpx font-lab uninstall      # remove the skill, hook, rules, and every MCP entry\n```\n\n## Upgrading\n\n> **Do not use bare `npm install font-lab@latest` to upgrade.** It updates the npm package but\n> leaves the panel code in `app/_fontlab/` stamped at the old version — you'll see a \"stale version\"\n> warning. Font Lab's version lives in four places (the npm package, the panel stamp, the MCP\n> registration, the running `:7777` endpoint), and they update independently.\n\nUse the single upgrade command instead:\n\n```bash\nnpx font-lab upgrade\n```\n\nIt does everything in one pass: installs the new package, re-stamps the panel from the new template\n(keeping your existing directions), re-pins the MCP registration, and shuts down a stale `:7777`\nendpoint. The only manual step left — and it's a **hard gate**: reload your agent session so the\nMCP server restarts. Until then the old server keeps running, and `font_lab_init` **refuses on the\nversion skew** (a skewed init is how broken half-panels used to ship — a 0.11 MCP stamping into a\n0.13 project produced a panel importing files that were never written → Next 500 → white page).\n\nAfter upgrading, `font_lab_status` confirms all four copies are in sync — and\n`font_lab_healthcheck` proves the page actually serves before anyone is told to open it.\n\n**Works across agents, not just Claude Code.** With no `--host`, install **auto-detects** which\nagents you have and wires them all — writing each one's MCP config in the right place and format,\nplus a skill (Claude) or an `AGENTS.md` protocol block (everyone else):\n\n| Host | MCP config | Instructions |\n|---|---|---|\n| Claude Code | project `.mcp.json` | `~/.claude/skills/font-lab` + turn-start hook |\n| Cursor | project `.cursor/mcp.json` (migrates off the old global `~/.cursor/mcp.json`) | `AGENTS.md` + `.cursor/rules/font-lab.mdc` |\n| Codex | `~/.codex/config.toml` | `AGENTS.md` |\n| Windsurf | `~/.codeium/windsurf/mcp_config.json` | `AGENTS.md` |\n| VS Code | `.vscode/mcp.json` (`servers`) | `AGENTS.md` |\n| Gemini CLI | `~/.gemini/settings.json` | `AGENTS.md` |\n\n```bash\nnpx font-lab install --host cursor,codex   # or --host all, or just let it auto-detect\n```\n\nUseful flags: `--host <list|all>` (default: auto-detect), `--project <dir>` (target a project\nother than the cwd), `--no-mcp` / `--no-skill` (do only one half), `--local` (register the MCP\nserver as `node <checkout>/mcp.mjs` for testing an unpublished clone), `--dry-run` (print the\nplan, write nothing). `uninstall` cleans every host.\n\n## How the agent picks fonts (the loop)\n\nOnce installed, just ask *\"use Font Lab to pick fonts.\"* The agent runs a consistent loop:\n\n1. **Start & intake** — `font_lab_start({ projectDir })` analyzes the project and returns the\n   design brief; the agent asks you the framing questions first.\n2. **Compose for your brief** — it composes tailored directions (display + body + mono, each with\n   a rationale), reaching past the overexposed defaults. Any of ~1,500 Google fonts is fair game;\n   `font_lab_check_fonts` confirms a face ships before it's offered. `font_lab_curate` is the\n   no-brief fallback.\n3. **Choose** — headless (`font_lab_screenshot_directions` → pick from images, works anywhere) or\n   live (the flip/mix/compare panel on your real site). On the live path the agent **verifies\n   before inviting**: `font_lab_init` self-checks its stamp and refuses on version skew, then\n   `font_lab_healthcheck` proves the page serves (homepage 200, scaffold complete, `:7777` up,\n   CSP clear — with a paste-ready dev-only patch when a strict CSP would silently block the\n   panel) before you're ever told to open the site. **You always make the pick.**\n4. **Ship** — `font_lab_apply` writes the exact `next/font` + Tailwind code, reversibly\n   (`font_lab_undo`).\n5. **Finish** — click **done ✓** in the panel (or just say so) and the agent runs\n   `font_lab_finish`: the dev-panel scaffolding comes out of the project (your applied fonts and\n   copy edits stay), and you get a git-verified **commit plan** — exactly which files are yours\n   to commit, with ready-to-run `git add` / `git commit` commands. Nothing of Font Lab's lingers:\n   the panel dirs and `.font-lab/` state are **self-ignoring** (a nested `.gitignore`), so\n   `git status` shows your product diff and nothing else, the whole session long.\n\nEvery direction is gated for **preview == ship**: *guaranteed* (byte-for-byte), or *best-effort*\nwith an honest \"may render slightly differently once applied\" note so you decide with eyes open.\n\n**Your pick always reaches the agent** — delivery is layered, not a timing gamble:\nan armed agent (`font_lab_wait`, or `serve --once` parked in the background) gets it in\nseconds; on Claude Code a turn-start hook surfaces it on your next message; and as the\nalways-on floor, an unapplied pick rides **every** `font_lab_*` tool result as\n`pendingHumanPick` — with its ship scope (what auto-ships, what the agent wires, which\nisland routes need a human call) — until an apply lands. Miss every window and you can\nstill just say *\"apply my font pick.\"*\n\n## The choosing moment: Headless vs Live\n\nThis is the heart of Font Lab. **The human always makes the taste decision** — Font Lab's job\nis to hand you a *curated, controlled* menu (never a 1,500-font dump), rendered on your own\nsite, and ship exactly what you pick. There are two ways to present that menu. They are the\nsame loop and the same catalog — only the surface differs.\n\n### 1. Headless — the default, works everywhere\n\nThe agent screenshots your real site in each direction and shows you the images right in the\nchat. You pick one by name (on a phone: just tap it). The agent ships it.\n\n- Works in **every** surface: Claude Code on the web, the iPhone/desktop apps, any MCP agent.\n- No dev server for *anyone* to babysit: if none is reachable, the tool starts your project's\n  own dev command itself (bound to 127.0.0.1, health-checked, stopped after the capture) — this\n  is what makes the loop run unattended in cloud/container sessions.\n- Two images per direction: a chat-sized `heroShot` JPEG (what the agent shows you, phone-\n  friendly) and the full-page PNG for detail.\n- The screenshots are driven through the real preview engine, so **what you see is what ships**\n  (same `next/font` + Tailwind, same metric-matched fallback). The menu is always the set your\n  agent composed for your brief — with none composed, the tool refuses rather than silently\n  photographing a generic starter menu.\n\nTools: `font_lab_compose_directions({ projectDir, directions, brief })` (persists the menu) →\n`font_lab_screenshot_directions({ projectDir })` → show the hero shots → the human picks →\n`font_lab_select({ projectDir, directionId })` → `font_lab_apply` → `font_lab_verify`.\n\n### 2. Live — the full UI, when you want to drive\n\nA real dev-panel on your running site: flip with `← →`, mix a heading from one direction with a\nbody from another (`[ ]`), toggle before/after (`B`), snap between your two finalists (`space`), save a hand-mix as a direction (`S`), and\nsee each face across multiple routes. This is the richest way to choose — and it needs a browser\n*you* can click in, so it runs **locally**: a Mac/Linux terminal, or the integrated terminal in\n**VS Code / Cursor / the Claude Code IDE extension**.\n\nGet the exact commands anytime with `font_lab_live_instructions({ projectDir })`.\n\n### How an agent should offer this\n\n> **Default to Headless.** Present the screenshots first — it works no matter where the user is.\n> Then tell them the full live UI exists: *\"Want to flip, mix, and compare these yourself? I can\n> give you a one-time command to open the full editor locally.\"* Give them the option; never\n> auto-pick. Curated and controlled, with a clear path to expand — that's how Font Lab rolls.\n\n| | Headless (default) | Live (full UI) |\n|---|---|---|\n| Where it runs | anywhere (web, phone, any agent) | local terminal / IDE / Cursor |\n| You interact with | screenshots in chat | a live panel on your site |\n| Mix roles, before/after, multi-route | pick a whole direction | yes — the complete UX |\n| Fidelity | preview == ship | preview == ship |\n| Who decides | **the human** | **the human** |\n\n\n> **Status: M1 + M2 + M3 PASS.**\n> - **M1** (`cli/run-m1.sh`, 16/16): arrow-flip, live display+body+mono swap, Pick →\n>   `selection.json`, re-pick appends to `picks.log.jsonl`.\n> - **M2** (`cli/run-m2.sh`, 19/19): `selection.json` → real `next/font` + Tailwind edits\n>   that **build** and **render** the picked fonts, applied **idempotently** and\n>   **reversibly** (backup-first undo, byte-identical restore). The link nobody else closes.\n> - **M6** (`cli/run-m6.sh`, M1 16/16 + M6 17/17): the **choosing moment polished**, driven in\n>   a real browser. **Mixed picks** (heading from one direction, body from another), **before/\n>   after**, **pin-two-to-compare**, **more-like-this**, refined keyboard UX, and **multi-route\n>   flipping** — the working pairing persists across routes (`/`, `/dense`, `/form`) via\n>   sessionStorage, because a face reads differently on a hero vs. a dense page vs. a form. A\n>   mixed pick ships end to end (verified: Fraunces/Figtree/JetBrains Mono → real `next/font`).\n> - **M5** (`cli/run-m5.sh`, 26/26): the **MCP server + skill** so an agent drives the whole\n>   loop (analyze → curate *or* compose → preview → read the pick → apply). The agent gets the\n>   curated default for free **and can take the wheel** — composing its own directions from the\n>   catalog (option 3) — but only from catalog fonts, so preview == ship still holds. The human\n>   always makes the final pick. Verified over real stdio (initialize / tools-list / tools-call).\n> - **M4** (`cli/run-m4.sh`, 96/96): the **parity catalog + curator**. A 41-font catalog of\n>   variable Google fonts, each gated on *verified* capsize coverage (checked by importing\n>   the metrics) and single-woff2 variable parity. A deterministic, **LLM-free** curator\n>   turns the analysis into ~5 directions — moving off the current fonts, rankable by vibe,\n>   reproducible. Evidence in `cli/out/m4-report.json`.\n> - **M3** (`cli/run-m3.sh`, 60/60): the **real analyzer** reads framework, App vs Pages\n>   Router, Tailwind v3 vs v4, current fonts per role, and font wiring — and feeds both the\n>   codegen branch selection and the panel's before/after. Verified on the in-repo fixtures\n>   **and the real jack-mcgovern.com site**, where it correctly reads `Bricolage Grotesque /\n>   Hanken Grotesk` on `<body>` and codegen **adopts** those project variables to ship a\n>   building, reversible swap. Out-of-branch projects (v3 / Pages / hardcoded) are refused\n>   with a clear reason.\n>\n> Evidence in `cli/out/{m1,m2,m3}-report.json` (+ `cli/out/jack-applied.*` — the actual code\n> Font Lab generated for the real site). Runs on Next 16 + Tailwind v4 + Turbopack.\n\n### Dogfood note — what jack-mcgovern.com taught us (M3)\n\nApplied into the real site, Font Lab **builds and renders**: body fonts swap\nHanken Grotesk → Libre Franklin everywhere they show. The headings keep rendering the body\nfont *both before and after* — because the site's own `@layer base { h1,h2,h3 { font-family:\nvar(--font-display) } }` never resolves (Tailwind v4's `@theme inline` doesn't emit\n`--font-display` as a `:root` variable; only the `font-display` *utility* derefs it). Font\nLab **preserved that behavior faithfully** rather than silently \"fixing\" it — exactly the\nhonesty the WYSIWYG promise requires: we swap the families through the project's own wiring\nand change nothing else.\n\nThat dogfood turned into a feature. The analyzer now ships **coverage diagnostics** so the\ntool *detects* this class of problem instead of being surprised by it:\n\n- **Dead roles.** Under `@theme inline`, Tailwind v4 doesn't publish `--font-*` as a `:root`\n  variable — only the generated `font-*` utilities deref it. A site that hand-writes\n  `font-family: var(--font-display)` (a very common pattern) therefore has *silently broken*\n  display wiring. `analyze` flags it: `⚠ dead display — swap invisible until rewired`.\n- **Other subsystems.** Fonts declared with their own next/font in another route/component\n  (jack's `/gus` uses `--font-fraunces`/`--font-dm-sans`) are reported, so the agent/user\n  knows a global swap's true scope (full per-route flipping is M6).\n\nWhat this audit feeds since v2.0 (see `docs/RFC-ROLES-AND-COVERAGE.md`): the **preview no\nlonger depends on the wiring at all** — the panel censuses the RENDERED page and paints\nvoice clusters, so dead chains and islands preview fine. The wiring audit is **ship-scope\nhonesty**: it tells the pick (and the shipping agent) which roles have a paved auto-apply\nseam and which need agent wiring, and after apply the receipt (`font_lab_verify`) measures\nconvergence on pixels — *by verification*, which is stronger than by construction.\n\n## Run it\n\n```bash\ncd cli && pnpm install            # @capsizecss/metrics + playwright\nbash cli/run-m1.sh                # from the repo root\n```\n\n`run-m1.sh` builds the parity catalog, starts the fixture dev server, and drives the loop\nwith a headless browser, asserting the pick lands on disk. Verdict + assertions in\n`cli/out/m1-report.json`.\n\n## Use it by hand\n\n```bash\nnode cli/analyze.mjs --project <your-project>             # what Font Lab sees (read-only)\nnode cli/curate.mjs  --project <your-project>             # the ~5 directions it would offer\nnode cli/curate.mjs  --project <your-project> --vibe editorial\nnode cli/gen-catalog.mjs                                   # self-host fonts + build catalog\ncd examples/sample-next-site && pnpm dev                   # your dev server\nnode cli/font-lab.mjs --project examples/sample-next-site  # the pick endpoint (:7777)\n```\n\nThen open the dev site: a panel (bottom-right) shows the current state + the curated\ndirections, swapping live on your real content. Keys (M6):\n\n- `←` `→` — flip direction · `↑` `↓` — focus a role · `[` `]` — swap just that role (**mixed\n  picks**: heading from one direction, body from another)\n- `B` — before/after (hold to peek) · `space` — **snap back to the last direction you viewed** (tap repeatedly to compare finalists) · `S` — save a hand-mix as a direction · `X` — inspect (hover the page to identify text; on by default) · `⇧X` — map every role at once · `J` — jump to the focused role on the page · double-click any words — retype them in place (saves to source, reversibly)\n- `Enter` or **Pick** — write the selection\n\nThe working pairing follows you across routes (`/`, `/dense`, `/form`) so you can judge a face\non a hero, a dense page, and a form — \"your real site\" is more than one screen.\n\n### Run it on your own project (`font-lab init`)\n\nOne command makes any live-panel project (Next.js App Router + Tailwind v4 + CSS-variable\nfonts) previewable — it self-hosts the parity bundles, drops in the dev panel, and mounts it\ndev-only in your layout. **On any other framework** (Vite / Astro / Remix / SvelteKit /\nTanStack / Tailwind v3 / var-wired plain CSS): skip `init` — the choosing moment is the\nportable preview (`node cli/preview.mjs --project <dir>`, a self-contained HTML sheet with\nverified screenshots), and `apply` ships the pick via self-hosted `@font-face` through your\nstack's own seam. `analyze`'s `ships` line names the exact path for your project.\n\n```bash\nnode cli/init.mjs --project <your-project>     # scaffold panel + parity bundles (reversible)\ncd <your-project> && <your dev command>        # e.g. next dev / npm run dev\nnode cli/font-lab.mjs --project <your-project> # the pick endpoint (:7777)\n# → flip in the panel, Pick, then `node cli/apply.mjs --project <your-project>`\nnode cli/init.mjs --project <your-project> --undo   # remove the panel scaffolding\n```\n\nThe panel censuses the **rendered** page into voice clusters (heading / body / label, keyed\nby rendered style + structure + provenance) and previews by **painting** clusters through one\ninjected stylesheet — so the flip reaches every heading on every route, including dead\nvariable chains, inline-style brand islands, and system-stack mono that variable overrides\ncould never touch. A role with no auto-ship seam still previews; it's badged *agent wires on\nship*, and the pick records the exact scope. After `apply`, close the loop with the receipt:\n`font_lab_verify` re-renders the site and measures per-voice convergence — anything unreached\ncomes back as a ready-to-execute agent work order. Proven end to end on the real\njack-mcgovern.com (one keystroke repainted 100% of heading/body/label text on `/` *and* the\n`/fontlab` island; repo restored byte-identical — `cli/panel-paint-test.mjs`).\n\n### Fix a dead role (`font-lab rewire`)\n\nIf `analyze` flags a role as **dead** (declared but not actually rendered — a heading rule that\nreads `var(--font-display)` under `@theme inline`), `rewire` points those raw usages at the\npublished leaf var so the font renders. Reversible.\n\n```bash\nnode cli/rewire.mjs --project <your-project>   # var(--font-display) → var(--font-bricolage)\nnode cli/undo.mjs   --project <your-project>   # revert\n```\n\nProven on the real jack-mcgovern.com: headings rendered `Hanken Grotesk` (body font) before →\n`Bricolage Grotesque` after, build-verified, then reverted.\n\n### Let an agent drive it (the easy way)\n\nRegister the server once with Claude Code (user scope = available in every project):\n\n```bash\ncd Font-Lab/cli && pnpm install                     # one-time\nclaude mcp add font-lab -s user -- node \"$(pwd)/mcp.mjs\"\n```\n\nThen, in any supported project, just tell Claude:\n\n> \"Use Font Lab to pick fonts for this site.\"\n\nClaude runs the whole setup — `analyze` → `init` (installs the panel + self-hosts the fonts) →\n`rewire` if headings are dead → starts your dev server + the pick endpoint. **Your only job:**\nopen the site, flip/mix/compare in the panel, and hit **Pick**. Claude reads your pick and\nships it (`apply`), reversibly.\n\nPrefer not to use the CLI? A ready-to-use [`.mcp.json`](../.mcp.json) is committed at the repo\nroot (loads automatically when you open this repo), or copy the entry into another project's\n`.mcp.json` with an absolute path:\n\n```jsonc\n{ \"mcpServers\": { \"font-lab\": { \"command\": \"node\", \"args\": [\"/abs/path/to/cli/mcp.mjs\"] } } }\n```\n\nThe 13 tools (`start`, `analyze`, `list_catalog`, `check_fonts`, `curate`, `compose_directions`,\n`init`, `uninit`, `prepare_preview`, `read_pick`, `apply`, `rewire_dead_roles`, `undo` — all\n`font_lab_*`) and the loop are described in [`../skill/font-lab/SKILL.md`](../skill/font-lab/SKILL.md).\nThe agent starts from a brief and composes its own tailored directions — reaching past the\noverexposed defaults to any shippable font the gate admits — but the **human always makes the\npick**, and every face must clear the **preview == ship** gate. Proven end to end over MCP on the\nreal jack-mcgovern.com.\n\n### Ship the pick (M2)\n\n```bash\nnode cli/apply.mjs --project <your-project>   # selection.json -> next/font + Tailwind edits\nnode cli/undo.mjs  --project <your-project>   # restore the files Font Lab last edited\n```\n\n`apply` edits `app/layout.tsx` (ts-morph: merges the next/font import, rewrites the\nfont consts in a fenced block, merges the `<html>` className) and `app/globals.css`\n(a fenced `@theme` block), backing up every touched file first. Re-running is idempotent;\n`undo` restores byte-for-byte. Run `font-lab --apply` to ship a pick the moment it's made.\n\n## Pieces\n\n| file | role |\n|---|---|\n| `analyzer.mjs` | **the analyzer (M3):** pure, read-only audit of a project — framework, router, Tailwind version, current fonts per role, and wiring. Traces the CSS custom-property graph from `--font-*` back to the next/font const that feeds it. **Coverage diagnostics**: flags dead roles (a swap that won't be visible) and other font subsystems (routes a global swap won't reach) |\n| `analyze.mjs` | thin CLI around the analyzer (`--project`, `--json`) |\n| `catalog.mjs` | **the catalog (M4):** ~41 variable Google fonts as parity bundles — each with a verified capsize slug, a discovered css2 latin query, role suitability, and vibe tags. Pure data; the parity asset |\n| `curator.mjs` | **the curator (M4):** ~12 hand-authored directions + a deterministic `curate(analysis, {vibe, count})` that returns ~5, moving off the current fonts. No runtime LLM |\n| `curate.mjs` | thin CLI to preview the directions for a project (`--project`, `--vibe`, `--count`, `--json`) |\n| `catalog-build.mjs` | reusable `generateCatalog(projectDir, directions, meta)` — self-hosts fonts + computes parity fallbacks + writes the generated module. Built from curated OR agent-composed directions |\n| `gen-catalog.mjs` | CLI: analyzer → curator → `generateCatalog`, bakes the real `current`/`target`/`directions` into `app/_fontlab/catalog.generated.ts` |\n| `engine.mjs` | **the engine facade (M5):** the stable API the MCP wraps — `analyze`, `listCatalog`, `curate`, `composeDirections` (option 3, catalog-gated), `preparePreview`, `readSelection`, `apply`, `undo` |\n| `mcp.mjs` | **the MCP server (M5):** dependency-free JSON-RPC/stdio server exposing the engine as 8 agent tools, descriptions tuned for discoverability |\n| `init.mjs` | **the installer:** scaffolds the panel + parity bundles into a real project and mounts it dev-only in the layout; `--undo` restores byte-for-byte. The last mile to \"your own running site\" |\n| `.mcp.json` (repo root) | ready-to-use MCP registration — open the repo in an MCP client and the `font-lab` server loads |\n| `templates/font-lab-panel.tsx` | the portable dev panel `init` installs — same UX as the fixture's, but swaps through the analyzer's `wiring` so it's honest on any site |\n| `../skill/font-lab/SKILL.md` | the skill manifest — how an agent drives the loop and the rules (human picks; catalog-only; be honest about coverage) |\n| `font-lab.mjs` | the CLI: the localhost write-back endpoint (`POST /select` → `.font-lab/selection.json` + `picks.log.jsonl`); `--apply` ships on pick |\n| `codegen.mjs` | the ship engine (M2+M3): `applySelection` / `undo` — analyzer-gated branch selection, ts-morph + fenced markers, backup-first. Handles both the role-var path and the **adopt-existing-variable** path (real sites) |\n| `commit-plan.mjs` | **the commit moment:** folds Font Lab's edit ledger against real `git status` into the two-pile plan (`ship` vs scaffold/hooks/not-yours) with ready-to-run commands — what `font_lab_finish` and `font_lab_status.commitPlan` return |\n| `apply.mjs` / `undo.mjs` / `rewire.mjs` | thin CLI wrappers around the ship engine (`rewire` fixes dead roles) |\n| `loop-test.mjs` / `apply-test.mjs` / `m3-test.mjs` / `m4-test.mjs` / `m5-test.mjs` / `m6-test.mjs` | headless e2e of the loop (M1), ship engine (M2), analyzer + branch selection (M3), catalog + curator (M4), engine + MCP over stdio (M5), and the polished panel — mixed picks / pin / multi-route — in a real browser (M6) |\n| `run-m1.sh` … `run-m6.sh` | loop test; apply+build+render+idempotency/reversibility; analyzer+codegen; catalog+curator; engine+MCP; mixed-picks/pin/multi-route in a browser |\n\n## The contract it writes\n\n`.font-lab/selection.json` follows the schema in\n[`../docs/ARCHITECTURE.md`](../docs/ARCHITECTURE.md): `direction`, `roles` (display/body/mono with\nfamily/source/weights), `replaces` (current fonts), and `target` (framework/router/Tailwind\nversion/wiring). `picks.log.jsonl` appends every pick — the taste-memory stream the roadmap\nstarts capturing at M1.\n","readmeFilename":"README.md"}