1import{c as j,a as k,t as $}from"../chunks/disclose-version.DE-liGRC.js";import{f as K,s as t,c as a,g as r,r as e,t as P,n as F,p as Z,a as D}from"../chunks/runtime.vEvs2zhv.js";import{l as G,a as B,i as J,s as g}from"../chunks/props.CdrK0jyI.js";import{I as q,d as R,e as E,s as I,i as N}from"../chunks/Icon.VaO0A4Wf.js";import{M as Q}from"../chunks/MetaTags.BewDlfzo.js";import{A as H}from"../chunks/arrow-up-right.BRxiKkMY.js";import{a as U}from"../chunks/assistants.CQy0qsMD.js";import{B as X}from"../chunks/BrandIcon.BsRlbekB.js";import{c as ee}from"../chunks/svelte-component.CiFqmCp_.js";import{A as te}from"../chunks/arrow-right.BrcQa09R.js";import{S as ae}from"../chunks/sparkles.Bto876ma.js";import"../chunks/legacy.B3rupc9m.js";import{C as W}from"../chunks/CodeBlock.CzBzBA-N.js";const L="https://github.com/vale-cli/agent-tools/blob/main/skills",re=[{name:"setup",summary:"Install Vale, write a .vale.ini that matches the formats actually present, sync the styles, and get a first run.",guard:"Points Vale at the prose rather than the whole repository, and reports the first-run count instead of hiding it behind MinAlertLevel.",path:`${L}/setup/SKILL.md`},{name:"fix",summary:"Fix alerts a file at a time, applying the replacement each rule defines, one pull request per file.",guard:"Error level by default, markup preserved, one branch per file, and never silencing a rule to make the run pass.",path:`${L}/fix/SKILL.md`},{name:"triage",summary:"Turn a first run on an existing corpus into a decision per rule: fix, downgrade, or switch off.",guard:"Reports which few rules produce most of the output, so the answer is a plan rather than a raised alert level.",path:`${L}/triage/SKILL.md`},{name:"vocab",summary:"Add project terms to a vocabulary so spell check accepts them, and commit it as the source it is.",guard:"The alternative â disabling Vale.Spelling over one product name â stops checking every other word in the repository.",path:`${L}/vocab/SKILL.md`},{name:"ci",summary:"Run Vale in GitHub Actions, a pre-commit hook, or any other runner, with pinned versions.",guard:"Says plainly whether the job is advisory or blocking, since only error sets a non-zero exit code.",path:`${L}/ci/SKILL.md`}];function se(b,s){const u=G(s,["children","$$slots","$$events","$$legacy"]);q(b,B({name:"zap"},()=>u,{iconNode:[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"}]],children:(m,c)=>{var l=j(),x=K(l);R(x,s,"default",{}),k(m,l)},$$slots:{default:!0}}))}function le(b,s){const u=G(s,["children","$$slots","$$events","$$legacy"]);q(b,B({name:"server"},()=>u,{iconNode:[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18"}]],children:(m,c)=>{var l=j(),x=K(l);R(x,s,"default",{}),k(m,l)},$$slots:{default:!0}}))}var oe=$('<div class="flex flex-col rounded-xl border border-border bg-card p-6"><div class="flex items-center justify-between gap-3"><span class="inline-flex rounded-lg bg-lime-500/10 p-2 text-lime-600 dark:text-lime-400"><!></span> <span class="rounded-md bg-muted px-2 py-0.5 font-mono text-[10.5px] font-bold uppercase tracking-wider text-muted-foreground"> </span></div> <h3 class="mt-4 text-lg font-semibold"> </h3> <p class="mt-2 flex-1 text-sm leading-6 text-muted-foreground"> </p> <a class="mt-4 inline-flex items-center gap-1.5 text-sm font-semibold text-lime-600 hover:underline dark:text-lime-400"> <!></a></div>'),ie=$(`<div id="ai" class="mx-auto max-w-7xl scroll-mt-24 px-6 pt-7 lg:px-8"><div class="mx-auto max-w-2xl sm:text-center"><h2 class="text-base/7 font-semibold text-lime-600 dark:text-lime-400">Vale for agents</h2> <p class="mt-2 text-pretty text-4xl font-semibold tracking-tight sm:text-balance sm:text-5xl">Your assistant writes the docs. Something should check them.</p> <p class="mt-6 text-lg/8 text-neutral-500">A model will write you plausible prose and plausible linter rules with equal confidence. Vale 2 is what tells it which of those actually hold up—in the same turn, not in review.</p></div> <div class="mx-auto mt-14 max-w-5xl"><div class="grid gap-4 sm:grid-cols-3"></div> <div class="mt-8 rounded-xl border border-border bg-muted/30 p-5 sm:p-6"><div class="flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1"><h3 class="text-sm font-semibold">All three, in Claude Code</h3> <p class="text-xs text-muted-foreground">Other clients can read <code class="font-mono">skills/</code> directly.</p></div> <!> <p class="mt-3 text-sm text-muted-foreground">The skills and the hook need nothing but the Vale binary. The MCP server is the one paid 3 piece — it runs on <a href="/cms" class="font-medium text-foreground underline decoration-lime-500/40 underline-offset-4 hover:text-lime-600 dar
3k:hover:text-lime-400">Vale CMS</a>, and everything else works without it.</p></div></div></div>`);function ne(b,s){const u=[{icon:ae,title:"Skills",cost:"Free",body:"Setup, fixing alerts, triaging a noisy first run, vocabularies, and CI. Each one runs the CLI in your repository and ends with a report.",href:"#skill-list",cta:"Browse the skills",external:!1},{icon:se,title:"Edit hook",cost:"Free",body:"Lints each prose file the moment your assistant writes it and hands back only the error-level alerts, so mistakes get fixed in the same turn they were made.",href:"https://github.com/vale-cli/agent-tools",cta:"See the hook",external:!0},{icon:le,title:"MCP server",cost:"Vale CMS",body:"The engine itself, as tools an assistant can call â so a rule it writes gets compiled, tested, and costed before it reaches your repository.",href:"/cms#mcp",cta:"What it can check",external:!1}];var p=ie(),m=t(a(p),2),c=a(m);E(c,21,()=>u,_=>_.title,(_,o)=>{var S=oe(),C=a(S),y=a(C),i=a(y);ee(i,()=>r(o).icon,(v,Y)=>{Y(v,{class:"size-5"})}),e(y);var n=t(y,2),f=a(n,!0);e(n),e(C);var d=t(C,2),w=a(d,!0);e(d);var A=t(d,2),M=a(A,!0);e(A);var h=t(A,2),T=a(h),V=t(T);{var z=v=>{H(v,{class:"size-3.5"})},O=v=>{te(v,{class:"size-3.5"})};J(V,v=>{r(o).external?v(z):v(O,!1)})}e(h),e(S),P(()=>{g(f,r(o).cost),g(w,r(o).title),g(M,r(o).body),I(h,"href",r(o).href),I(h,"target",r(o).external?"_blank":void 0),I(h,"rel",r(o).external?"noreferrer":void 0),g(T,`${r(o).cta??""} `)}),k(_,S)}),e(c);var l=t(c,2),x=t(a(l),2);W(x,{get html(){return s.installHtml},get code(){return s.install},class:"mt-3"}),F(2),e(l),e(m),e(p),k(b,p)}var de=$('<a target="_blank" rel="noreferrer" class="inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm font-medium transition-colors hover:border-lime-500/40 hover:text-lime-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-lime-500 dark:hover:text-lime-400"><!> <!></a>'),me=$('<li><a target="_blank" rel="noreferrer" class="group flex h-full flex-col rounded-2xl border border-border bg-card p-6 transition-all duration-200 hover:-translate-y-0.5 hover:border-lime-500/40 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-lime-500"><div class="flex items-start justify-between gap-3"><h2 class="font-mono text-sm font-semibold"><span class="text-muted-foreground">/vale:</span> </h2> <!></div> <p class="mt-2 text-sm leading-relaxed"> </p> <p class="mt-2 text-sm leading-relaxed text-muted-foreground"> </p></a></li>'),ce=$(`<!> <div class="mx-auto max-w-5xl px-6 py-16 sm:py-20 lg:px-8"><div class="mx-auto max-w-2xl sm:text-center"><h1 class="text-base/7 font-semibold text-lime-600 dark:text-lime-400">Agent skills</h1> <p class="mt-2 text-pretty text-4xl font-semibold tracking-tight sm:text-balance sm:text-5xl">Hand the setup to your assistant.</p> <p class="mt-6 text-lg/8 text-neutral-500">Each of these is a <code class="font-mono text-base">SKILL.md</code> that a coding agent reads 4 while working in your repository. They run the Vale CLI, edit your files, and open your pull request—nothing 5 to sign up for.</p></div> <div class="mx-auto mt-10 max-w-3xl rounded-2xl border border-border bg-card p-6"><h2 class="text-sm font-semibold">Get started</h2> <p class="mt-2 text-sm leading-relaxed text-muted-foreground">In Claude Code, install the plugin—the second command restarts the session, which is 6 what registers the linting hook and the MCP server alongside the skills:</p> <!> <p class="mt-3 text-sm leading-relaxed text-muted-foreground">Then type <code class="font-mono">/vale:</code> and the five below should complete. For an 7 assistant that reads skills from a folder, copy one into <code class="font-mono">.claude/skills/</code> instead; for one with no skill support, hand it <a href="/AGENTS.md" class="font-medium text-lime-600 hover:underline dark:text-lime-400">AGENTS.md</a>, which covers the same ground as prose.</p> <div class="mt-4 flex flex-wrap gap-3"></div> <p class="mt-4 text-sm leading-relaxed text-muted-foreground">Want the engine itself rather than the CLI—scaffolding rules, auditing a style, diffing
8 a rule change across a corpus? That is what <a href="/cms" class="font-medium text-lime-600 hover:underline dark:text-lime-400">Vale CMS</a> and its MCP server are for. These skills stay on the command line.</p></div> <ul id="skill-list" class="mx-auto mt-8 grid max-w-3xl scroll-mt-24 gap-4"></ul></div> <div class="mt-16 border-t border-border/60 pb-20 pt-10"><!></div>`,1);function Ce(b,s){Z(s,!0);const u="Agent skills for Vale: setup, fixing alerts, triaging a first run, vocabularies, and CI. Free, local, and driven by the CLI.";var p=ce(),m=K(p);Q(m,{title:"Agent skills â Vale",description:u,canonical:"https://vale.sh/skills",openGraph:{url:"https://vale.sh/skills",title:"Agent skills",description:u}});var c=t(m,2),l=t(a(c),2),x=t(a(l),4);W(x,{get html(){return s.data.installHtml},get code(){return s.data.install},class:"mt-3"});var _=t(x,4);E(_,21,()=>U,N,(y,i)=>{var n=de(),f=a(n);X(f,{get name(){return r(i).label},get slug(){return r(i).slug},size:"h-3.5 w-3.5",class:"opacity-80"});var d=t(f),w=t(d);H(w,{class:"h-3.5 w-3.5"}),e(n),P(()=>{I(n,"href",r(i).href),g(d,` ${r(i).label??""} `)}),k(y,n)}),e(_),F(2),e(l);var o=t(l,2);E(o,21,()=>re,N,(y,i)=>{var n=me(),f=a(n),d=a(f),w=a(d),A=t(a(w),1,!0);e(w);var M=t(w,2);H(M,{class:"h-4 w-4 shrink-0 text-muted-foreground transition-colors group-hover:text-lime-600 dark:group-hover:text-lime-400"}),e(d);var h=t(d,2),T=a(h,!0);e(h);var V=t(h,2),z=a(V,!0);e(V),e(f),e(n),P(()=>{I(f,"href",r(i).path),g(A,r(i).name),g(T,r(i).summary),g(z,r(i).guard)}),k(y,n)}),e(o),e(c);var S=t(c,2),C=a(S);ne(C,{get install(){return s.data.install},get installHtml(){return s.data.installHtml}}),e(S),k(b,p),D()}export{Ce as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.