On this page
You used to stare at 903 lint issues and wonder where to start. Now you run one command and go make coffee.
What changed for you
python -m wire.chief lint-fix reads your site, finds every lint issue, and fixes them. Page by page, sequentially, using a fast AI model. Redirect links get fixed for free. Content issues cost about a cent per page.
That is the headline. Everything else in v4 exists to make that command trustworthy.
The trust problem
An AI rewriting your pages is only useful if it does not make things worse. Wire v4 solves this with three layers.
Layer 1: Wire refuses to build bad output. Before v4, a missing author or a leaked secret key would silently pass. Now Wire catches both. It catches legal pages stuffed into the header nav. It catches landing pages with no components. It catches dates set in the future. Every new gate tells you exactly what is wrong and exactly what to type to fix it.
Layer 2: The AI gets guard-rails. When lint-fix sends your page to Claude Haiku, the prompt says what to fix and what NOT to touch. Do not add HTML tags. Do not append a links section at the bottom. Do not remove existing citations. Do not use em dashes. The AI fixes the listed issues and leaves everything else alone.
Layer 3: Wire checks the result. After fixing, you rebuild. Every lint issue the AI introduced would show up as a new failure. Wire does not ship pages with known issues. Both errors and warnings block deployment. There is no "close enough."
What this means for bots
If you are an AI agent operating a Wire site, your workflow changed.
Before v4: You parsed terminal output, grouped issues by page, built per-page prompts, dispatched agents. It worked but was fragile. Parallel agents destroyed each other's files.
After v4: Run lint-fix. Wire does the grouping, the prompting, and the sequential dispatch internally. You do not need to build your own fix pipeline. The command handles redirect links (free), then content issues (Haiku). One command, one pass, no file conflicts.
Multi-language sites: always pass --lang. Wire refuses without it. The only exception is data, which runs all languages automatically.
python -m wire.chief --lang en lint-fix
What this means for humans
You still own the content decisions. Wire fixes mechanical issues: dashes that look AI-generated, missing sibling links, descriptions that repeat the title, titles that are too long. It does not rewrite your voice, your arguments, or your structure.
Run the free fixes first. sanitize costs nothing and fixes broken internal links. Then lint-fix handles the rest. The expensive step (AI) only runs on pages that still have issues after the free pass.
python -m wire.chief sanitize # free
python -m wire.chief lint-fix # free redirects + ~$0.01/page AI
python -m wire.build # verify
Review the diff before you commit. Wire wrote it, but you publish it.
What breaks when you upgrade
Five things to check after pip install -e .:
1. Author pages. If your site has an authors/ directory, every article now needs author: slug in frontmatter. Wire tells you which pages are missing it and which slugs are available.
2. Legal pages in nav. Impressum and Datenschutz in your nav: config now cause BUILD REFUSED. Remove them. Wire puts them in the footer automatically.
3. The bot/ directory. No longer generated unless you opt in with extra.wire.bot_dir: true in wire.yml. If you relied on /bot/README.md being public, add the flag.
4. footer.links format. Must be a grouped dict, not a flat list. Wire shows the correct format in the error message.
5. All lint issues block. Previously some sites ran with warnings. Now everything blocks. Run lint-fix to clear the backlog. For a 500-page site with 900 issues, expect about $5 and 15 minutes.
What we learned building v4
We shipped a fix that skipped RULE-52 on headings because a customer said title dashes are SEO best practice. Our own documentation, backed by an 80,000-title Zyppy study, said the opposite. We reverted. The lesson is now baked into every Wire skill: read the docs before implementing. If the docs contradict the customer, the docs win.
We also learned that multi-language is hard. Six bugs from one concept. Every feature needs two code paths. We filed a roadmap ticket to unify them. Until then, multi-language works but demands attention.
Wire v4 is 2311 tests, 85 lint rules, and zero tolerance for pages that are not ready. The machine handles the 95% that follows patterns. You handle the 5% that requires judgment. The system knows which is which.
Read the full command reference for the updated protocol, or start with the workflow guide for the recommended sequence. If you are migrating from mkdocs-material, the getting started guide covers the path from first install to first build.