Configuration Reference - Customize Wire
You opened wire.yml to change one thing and now you're not sure which setting controls what you're trying to fix.
Wire reads configuration from three places: `wire.yml`, environment variables in `.env`, and prompt files scattered through your docs directory. Most problems trace back to one of those three. The tricky part is that some settings look like they belong in `wire.yml` but actually live in `.env`, and vice versa. Which of these is closest to where you are right now?
Wire's news behavior is controlled by `refresh_days` under `extra.wire`. Each topic section gets its own interval in days. The part that surprises most operators: setting a topic to `0` doesn't mean "refresh constantly." It means "never fetch news for this topic at all." That's intentional for auto-generated pages like comparisons. So if a section is getting no news updates, check whether it's set to `0` before assuming something is broken.
Wire needs three environment variables to function. `ANTHROPIC_API_KEY` is required for everything. The two Google variables are only required if you're pulling data from Google Search Console. A common setup mistake: the `.env` file goes in the Wire installation directory, not your site directory. If Wire is running but returning authentication errors, the file is probably in the wrong place. Once you confirm the location, the variable names are straightforward.
Wire looks for prompt files in your docs directory before falling back to its built-in prompts. The site-wide file is `_styleguide.md` in the root of `docs/`. Topic-specific overrides go in `docs/{topic}/` and only affect that section. The complication: if you place a `_styleguide.md` in a topic subdirectory instead of the root, Wire treats it as a topic-level override, not a global one. Your rules apply to that section only. Everything else still runs on the defaults.
Wire's visual layer runs entirely through CSS custom properties. You set color and font values in `wire.yml` under `theme:`, and Wire injects them as a `<style>` block into every page. You never edit the CSS file directly. The part that catches operators: there are ten CSS variables, but `wire.yml` only exposes five of them directly. The rest (`--primary-dark`, `--primary-light`, hover states, border radius) are derived or set in `wire.css`. If your hover states look wrong, that's why.
Wire stores its GSC database at `{site_dir}/.wire/gsc.db`. That directory is created automatically on the first `data` run. If the database isn't appearing, the `data` command hasn't run yet, or it ran against a different site directory than you expected. The `.wire/` directory also holds batch progress files and cached newsweek extracts. If you're seeing stale data, a cached extract file from a previous run may be the cause. Check the filename dates before re-running.
Wire reads configuration from three sources: wire.yml in your site directory, environment variables in .env, and prompt files in your docs directory. This reference covers every option.
wire.yml - Site Configuration
# Required
site_name: My Site
docs_dir: docs
# Recommended
site_url: https://example.com
description: What your site is about.
templates_dir: templates
output_dir: site
# Navigation (optional — auto-discovered if omitted)
nav:
- index.md
- Insights:
- Content Strategy: insights/content-strategy/index.md
- SEO Fundamentals: insights/seo-fundamentals/index.md
# Build exclusions (optional)
exclude:
- ".*/_.*\\.md$"
- ".*/drafts/.*"
# Wire-specific settings (all optional)
extra:
wire:
refresh_days:
products: 21
services: 60
guides: 120
comparisons: 0
default_refresh_days: 21
reword_tiers:
full: 20
light: 30
max_articles: 20
rate_limit_delay: 1
min_opportunity_score: 15
newsweek_batch_chars: 150000
Wire Settings Reference
All settings under extra.wire are optional. Defaults are shown.
News Freshness
refresh_days:
products: 21 # Check every 3 weeks
services: 60 # Every 2 months
guides: 120 # Every 4 months
comparisons: 0 # Never (auto-generated)
default_refresh_days: 21 # Fallback for unknown topics
Set a topic to 0 to disable news gathering entirely. This is useful for auto-generated content (comparisons, hub pages) that should not receive news updates.
Reword Tiers
reword_tiers:
full: 20 # Top 20% get full SEO rewrite
light: 30 # Next 30% get title + description only
# Bottom 50% are skipped
Adjust these percentages based on your editorial capacity. More aggressive tiers (full: 40, light: 40) cost more but touch more pages. Conservative tiers (full: 10, light: 20) save budget.
Content Limits
| Setting | Default | What it controls |
|---|---|---|
max_articles |
20 | Maximum articles fetched per news search |
rate_limit_delay |
1 | Seconds between API calls |
min_opportunity_score |
15 | Minimum score for keyword opportunities |
newsweek_batch_chars |
150000 | Max characters per newsweek extract batch |
Environment Variables
Set these in .env in the Wire installation directory.
| Variable | Required | Purpose |
|---|---|---|
ANTHROPIC_API_KEY |
Yes | Claude API access |
GOOGLE_CLIENT_ID |
For GSC | Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
For GSC | Google OAuth client secret |
Prompt Overrides
Wire looks for prompt files in your docs directory before falling back to built-in prompts. Place these files to customize Claude's behavior.
| File | Location | Purpose |
|---|---|---|
_styleguide.md |
docs/ |
Site-wide editorial rules (prepended to all prompts) |
_create.md |
docs/{topic}/ |
Custom create prompt for a topic |
_update.md |
docs/{topic}/ |
Custom update/refine prompt |
_seo.md |
docs/{topic}/ |
Custom SEO reword prompt |
_expand.md |
docs/{topic}/ |
Custom expand prompt |
See the prompt engineering guide for details on writing effective prompts.
Theming - Customize the Look
Wire's CSS uses CSS custom properties (variables) for all visual tokens. You change the look of your entire site by setting a few values in wire.yml. No CSS editing required.
theme:
primary_color: "#059669" # Links, buttons, active states
accent_color: "#f59e0b" # Highlights, accents
text_color: "#1a1a2e" # Body text
font_family: "'Inter', sans-serif"
code_font: "'JetBrains Mono', monospace"
Wire injects these as CSS custom properties into every page. The base stylesheet reads from these variables, so one change propagates everywhere.
How it works
The base.html template generates a <style> block from your theme config:
<style>
:root {
--primary: #059669;
--accent: #f59e0b;
}
</style>
This overrides the defaults in wire.css. You never edit the CSS file directly. You configure through wire.yml.
Available CSS variables
| Variable | Default | What it controls |
|---|---|---|
--primary |
#1a56db |
Links, buttons, active nav items, logo |
--primary-dark |
#1040a8 |
Hover states for primary elements |
--primary-light |
#e8effc |
Active nav background, callout background |
--accent |
#059669 |
Command prompt color, success states |
--text |
#111827 |
Body text, headings |
--text-muted |
#6b7280 |
Secondary text, sidebar labels |
--bg |
#fff |
Page background |
--bg-subtle |
#f9fafb |
Sidebar, table headers, code blocks |
--border |
#e5e7eb |
Borders, table lines, dividers |
--radius |
8px |
Border radius on cards, code blocks |
Custom CSS
For changes beyond color and typography, add a custom CSS file:
# wire.yml — not yet implemented, coming soon
theme:
custom_css: assets/css/custom.css
For now, create docs/assets/css/custom.css and add a <link> in your base.html template after wire.css. Your overrides take precedence.
Example: Agency with teal brand
theme:
primary_color: "#0d9488"
accent_color: "#f59e0b"
font_family: "'Source Sans Pro', sans-serif"
Three lines. The entire site matches the brand. No CSS editing, no designer needed.
Frontmatter-Driven Metadata
Pages can override metadata defaults through frontmatter:
---
title: About Us
description: Learn about our team and mission.
og_type: website # Default: article
template: custom.html # Default: page.html
---
The og_type field controls the Open Graph type meta tag. Most pages should use article (the default). Set website for the homepage, product for product pages.
The template field lets individual pages use different Jinja2 templates. This is useful for landing pages, contact forms, or any page that needs a different layout.
Build Configuration
The build system reads from the same wire.yml:
| Setting | Default | Purpose |
|---|---|---|
docs_dir |
docs |
Markdown source directory |
templates_dir |
templates |
Jinja2 templates directory |
output_dir |
site |
HTML output directory |
exclude |
(see above) | Regex patterns for files to skip |
Navigation
If nav is specified in wire.yml, Wire uses that exact structure for the sidebar. If omitted, Wire auto-discovers topics from the directory structure and builds navigation automatically.
# Explicit navigation
nav:
- index.md
- Insights:
- Content Strategy: insights/content-strategy/index.md
# Or omit nav entirely for auto-discovery
Database Location
The GSC database lives at {site_dir}/.wire/gsc.db. This directory is created automatically on first data run. Add .wire/ to your .gitignore.
Progress tracking files for batch operations also live in .wire/:
.wire/
gsc.db # GSC keyword database
progress-news-products.json # Batch progress tracking
progress-refine-products.json
newsweek_extracts_2026-03-10.md # Cached newsweek extracts