You have a site with content in it. You're not sure if Wire will work with how it's already organized, or what you have to set up before you can run anything.

Wire needs three things to run: a config file, a templates directory, and markdown content in a docs directory. If your site already has markdown files in folders, Wire can probably work with what you have. The question is whether you're starting from scratch or migrating something that already exists. That changes which path makes sense. There's also a difference between getting Wire running and getting the most out of it, which involves Google Search Console. Which situation are you in?

Running `python -m wire.chief init` from your site directory generates everything: `wire.yml`, `_styleguide.md`, templates, and a `.env` template. If you have an existing `mkdocs.yml`, Wire reads it and migrates your site name, URL, docs directory, and theme settings automatically. That part is fast. The part that trips people up is what happens after init: Wire has generated a structure, but your actual content still needs to match it. Specifically, every subdirectory that should become a topic needs an `index.md` with a `title:` in its frontmatter.

Wire discovers topics automatically, but only if your directories follow a specific pattern. A subdirectory becomes a topic when it contains an `index.md` with a `title:` in the frontmatter. If that file is missing or the frontmatter has no title, Wire skips the directory entirely without an error. This means you can have a folder full of content that Wire silently ignores. The slug Wire uses is the directory name, and the topic is the parent directory. If your current folder names have spaces or uppercase letters, that affects your URLs.

Wire uses a two-layer prompt system. A `_styleguide.md` in your docs root applies to every page on the site. A `_create.md` or `_update.md` inside a specific topic directory overrides the default for that topic only. Wire prepends the styleguide to every prompt automatically, so topic-level files add to it rather than replace it. The complication: if your styleguide and topic prompt give conflicting instructions, Claude follows the topic prompt. That's usually what you want, but it means a site-wide rule you consider non-negotiable needs to be in both places.

GSC integration is optional, but without it Wire skips keyword analysis, cannibalization detection, opportunity scoring, and content gap detection. Those four capabilities are what make the audit actionable rather than structural. To connect GSC, your site needs to be verified in Google Search Console, and you add OAuth credentials to the `.env` file Wire generated. Then you run `python -m wire.chief data` before `audit`. If you skip `data`, the audit still runs but returns only structural findings: missing H1 tags, broken links, thin content, heading violations.

The first week follows a specific sequence: `data` and `audit` on day one, `deduplicate` on day two, `sanitize` on day three, `enrich` on day four, `build` on day five. The order matters because `deduplicate` needs the keyword data from `data`, and `enrich` is the only step with API costs ($0.06 per page). For a 100-page site, total cost runs under $10. What surprises most people is that `sanitize` costs nothing because it only rewrites internal links, no API calls. Running it before `enrich` means you're not paying to enrich pages that still have broken links.

Wire's sweet spot is 50 to 2,000 pages of informational or commercial content. Below 50 pages, manual SEO is faster. Above 2,000, the architecture assumptions start to break. Wire is not built for e-commerce catalogs with thousands of near-identical product templates, single-page applications, or sites where content comes from a database like job boards or real estate listings. The sites that get the most value share one characteristic that isn't about size: they compete for search traffic in a defined niche, meaning the same terms appear across multiple pages, which is exactly what cannibalization detection is designed to find.

Wire works with any site that has markdown content in a structured directory. The init command generates everything you need, or you can create the config manually.

Quick Start with Init

cd /path/to/my-site
python -m wire.chief init

Wire generates wire.yml, _styleguide.md, templates, and a .env template. If mkdocs.yml exists, Wire migrates settings from it: site name, URL, docs directory, theme colors, and extra.wire configuration.

Manual Setup

Create three things in your site directory:

  1. A wire.yml config file
  2. A templates/ directory with at least base.html and page.html
  3. A docs/ directory with markdown content
# wire.yml
site_name: My Agency Blog
site_url: https://blog.agency.com
description: B2B marketing insights and case studies.
docs_dir: docs
templates_dir: templates
output_dir: site

Wire auto-discovers topics from your docs directory. Any subdirectory containing an index.md with a title: in frontmatter becomes a topic.

Content Structure

Wire expects this file layout:

docs/
  index.md                          # Homepage
  insights/                          # Topic: insights
    index.md                        # Topic index page
    content-strategy/
      index.md                      # Content page
    seo-fundamentals/
      index.md                      # Content page
  case-studies/                      # Topic: case-studies
    index.md
    client-a/
      index.md

Every index.md needs YAML frontmatter with at least title. Wire uses the directory name as the slug and the parent directory as the topic.

Customizing Prompts

Wire's built-in prompts work for most sites. To customize how Claude writes for a specific topic, create a prompt override.

docs/
  _styleguide.md                    # Site-wide editorial rules
  insights/
    _create.md                      # Custom create prompt for insights topic
    _update.md                      # Custom update prompt for insights topic

Place _styleguide.md in your docs root for site-wide rules. Place _{action}.md in any topic directory for topic-specific instructions. Wire prepends the styleguide to every prompt automatically.

See the prompt engineering guide for details on writing effective prompts.

Wire Configuration

Optional settings go under extra.wire in your wire.yml:

extra:
  wire:
    refresh_days:
      insights: 30
      case-studies: 90
    default_refresh_days: 60
    reword_tiers:
      full: 20
      light: 30
    max_articles: 20
    rate_limit_delay: 1
    min_opportunity_score: 15

See the configuration reference for all available options.

Templates

Wire uses Jinja2 templates. The minimum template set:

  • base.html: HTML skeleton with head, body, header, nav, main, footer
  • page.html: extends base, renders article content
  • partials/header.html: site header with logo and navigation
  • partials/nav.html: sidebar navigation
  • partials/footer.html: site footer

Templates receive a page object (title, description, html, url, reading_time, word_count, meta), a nav list (sections with children), and a site dict (name, url, description).

Building

cd /path/to/my-site
python -m wire.build --site .

The output goes to site/ by default. Deploy it to any static hosting: Netlify, Vercel, S3, SiteGround, or a simple web server.

Connecting GSC

If your site is verified in Google Search Console, add OAuth credentials to .env and run python -m wire.chief data. This enables all SEO automation features: keyword analysis, cannibalization detection, opportunity scoring, and content gap detection.

GSC integration is optional. Wire's content pipeline and news intelligence work without it.

What Wire Does on Day One

A new site connected to Wire immediately benefits from three automated capabilities that would take a human team weeks to replicate.

Structural audit. Wire scans every page for the issues that Screaming Frog's 2024 data shows average 3.2 per 100 pages: duplicate titles, missing H1 tags, broken internal links, heading hierarchy violations, thin content, missing meta descriptions. The audit runs in seconds and costs nothing.

Cannibalization detection. If you connect GSC, Wire runs a SQL self-join across all keyword-page combinations to find pages competing for the same search terms. First Page Digital uses 30% shared impressions as the cannibalization threshold. Wire uses a dual signal (overlap ratio + traffic skew) that is more precise. It distinguishes between a dominant page absorbing a weak one (merge) and two pages confusing Google equally (differentiate both).

Content gap identification. Wire finds keywords where search demand exists (impressions) but no page on your site ranks well (best position above 20). These represent opportunities for new content. On a typical 100-page B2B site, Wire identifies 5-15 content gap clusters on the first audit.

The first week with Wire typically follows this pattern:

  1. Day 1: Connect the site, run data and audit. Review findings.
  2. Day 2: Run deduplicate to resolve cannibalization. Review merges with --dry-run first.
  3. Day 3: Run sanitize to fix broken internal links (zero cost, no API calls).
  4. Day 4: Run enrich on the highest-opportunity pages. Cost: $0.06 per page.
  5. Day 5: Run build and deploy.

By end of week one, you have resolved keyword cannibalization, fixed structural issues, and enriched your best pages with targeted keyword content. Total API cost for a 100-page site: under $10.

Sites Wire Works Best With

Wire is built for content-heavy sites where search traffic matters. The sweet spot is 50-2,000 pages of informational or commercial content: product pages, service descriptions, guides, comparisons, industry analysis.

Wire is not the right tool for single-page applications, e-commerce product catalogs with thousands of identical templates, or sites where content is generated from a database (job boards, real estate listings). These sites need different architectures.

The sites that get the most value from Wire share three characteristics: they have enough pages that manual SEO is impractical, they compete for search traffic in a defined niche, and they have (or can get) Google Search Console access for their domain.