Documentation

Reno Goat CLI

reno-goat-pp-cli

Install

npx -y @mvanhorn/printing-press-library install reno-goat

Installs the CLI binary and the agent skill for Claude Code, Codex, Cursor, Gemini CLI, Copilot, and more. Add --cli-only or --skill-only for one half. Requires Node.

Documentation

Search, compare, price-watch, and project-track renovation selections across 33 active sources plus 5 tracked stubs from one CLI. Reno Goat focuses on the squishy middle between commodity builder supply and home decor: homeowner-visible products that often need a GC, plumber, electrician, HVAC tech, cabinet installer, or tile/flooring trade to install. It routes plumbing fixtures and bath showroom rows to Ferguson, Floor & Decor, PlumbersStock, FaucetDepot, FaucetList, PlumbTile, Modern Bathroom, KBAuthority, Vintage Tub, Signature Hardware, and QualityBath, HVAC equipment selections to Pioneer Mini Split, Sylvane, IWAe, and The Hardware Hut, appliances to Ferguson, IKEA, GE Appliances, Bray & Scarff, PC Richard, Appliance Factory, Best Buy, Abt, and Homewise Appliance, electrical/lighting selections to Super Bright LEDs, PROLIGHTING, 1000Bulbs, Bees Lighting, Lighting New York, and Lightology, cabinet/door/bath hardware to Rejuvenation, IKEA, and The Hardware Hut, and flooring/tile/surface selections to Floor & Decor, The Hardware Hut, and IKEA. Standalone utilities provide Lowe's autocomplete and store locator. No API keys required.

What It Does

  • Fan-out searchproduct-search "pendant light" hits every active source in parallel and returns normalized results. --room kitchen expands to plumbing + electrical + flooring + hardware + materials + appliances + decor; --category electrical targets Super Bright LEDs, PROLIGHTING, 1000Bulbs, Bees Lighting, Lighting New York, and Lightology.
  • Model intelligencemodel-intel "36 induction cooktop" discovers model/SKU candidates, enriches returned rows from product pages for spec/install PDFs, and probes predictable model pages where that makes sense. Auto mode infers installed-selection categories from queries such as mini split heat pump, thermostat, floor register, linear drain, shower niche, shower door, shower head, shower panel, medicine cabinet, bidet seat, pot filler, cabinet pull, door hinge, grab bar, robe hook, toilet paper holder, towel bar, towel ring, soap dispenser, towel warmer, lighted mirror, vanity light, picture light, ceiling fan, floor warming, recessed light, or bathroom faucet, so the same compound lookup works beyond appliances without a manual category flag. Readable search-result pages can also contribute labeled category model candidates and exact-model price evidence when they expose product-price fields.
  • Source probessource-probe --candidate all checks appliance and bath showroom routes with the current plain HTTP transport and reports readable pages, WAF interstitials, and redirects as explicit evidence before a source is promoted.
  • Price watch — track any product's price in a local SQLite database, poll on a schedule, get alerts when it drops past a threshold.
  • Project tracker — group products into named renovation projects with quantities and cross-store budget totals.
  • Product comparison — side-by-side normalized view of any two or more products, across different retailers.
  • Saved products + stale detection — save products locally; --check-stale re-fetches to catch discontinuation, out-of-stock, or price drift.
  • Spec sheet export — pull normalized product specifications from unstructured retailer pages.
  • Brand cross-reference — see which retailers carry a brand and compare price points.
  • Store locator — find Lowe's, West Elm, and Rejuvenation stores near a ZIP code.
  • Delivery checks — shipping options and availability by postal code (West Elm, Rejuvenation).
  • Deals and promotions — active sales, discount percentages, promo codes.
  • Reviews — product reviews from Ferguson and Article, including ratings and UGC media.
  • Autocomplete — typeahead suggestions from Lowe's, West Elm, and Rejuvenation.

Source Registry

SourceTransportCategoriesStatus
FergusonGraphQLfoundational, appliancesactive
West ElmConstructor.iofurniture, decoractive
RejuvenationConstructor.iofoundational, decoractive
ArticleAPQ GraphQLfurniture, decoractive
Shopify DTC (5 stores)Storefront APIfurniture, decoractive
IKEASIK searchfoundational, appliances, furniture, decoractive
GE AppliancesSearchspringappliancesactive
Bray & ScarffNMG Hasura GraphQLappliancesactive
PC RichardDemandware embedded JSONappliancesactive
Appliance FactoryAVB REST over HTTP/1.1appliancesactive
Best BuyNext SSR product cardsappliancesactive
AbtHTTP/1.1 search and product schemaappliancesactive
Homewise ApplianceBloomreach APIappliancesactive
Floor & DecorAlgoliafoundationalactive
Super Bright LEDsAlgoliafoundational, electricalactive
PROLIGHTINGKlevufoundational, electricalactive
1000BulbsHTML product cardsfoundational, electricalactive
Bees LightingShopify suggestelectricalactive
Lighting New YorkDemandware embedded JSONelectrical, decoractive
LightologyHTML GTM product cardselectrical, decoractive
PlumbersStockNext SSR product cardsplumbingactive
FaucetDepotAlgoliafoundational, plumbingactive
FaucetListShopify suggestplumbingactive
PlumbTileShopify suggestplumbingactive
Modern BathroomShopify suggestplumbingactive
KBAuthoritySearchspring autocomplete HTMLplumbing, decoractive
Vintage TubSearchspringplumbing, decoractive
Signature HardwareDemandware suggestions HTMLplumbing, decoractive
Pioneer Mini SplitShopify suggesthvacactive
SylvaneShopify suggesthvacactive
IWAeHyva product cardshvacactive
The Hardware Hutembedded JSONfoundational, hardware, materialsactive
Lowe'sstandard HTTP (partial)foundational, appliancesstub (autocomplete + stores only)
Home DepotSSR onlyfoundational, appliancesstub
WayfairPerimeterX clearancefoundational, appliances, furniturestub
AllModernPerimeterX clearanceappliances, furniturestub
Restoration HardwareDataDomefoundational, furniturestub

Active sources are queried by the fan-out. Stubs are registered for visibility and future activation.

Lowe's was assessed via the Printing Press printer protocol (probe-reachability + browser-sniff on a Firefox HAR capture). Autocomplete and store locator are standard HTTP (no auth, User-Agent header only). Product search and the recommendation engine (pythia-recs-svc, 14 endpoints) require browser session cookies and are stubbed.

Home Depot was assessed via the same protocol. Every endpoint tested — autocomplete (/complete/search/), store finder (/StoreFinderServices/v2/), GraphQL search (/federation-gateway/graphql) — returned 403 from both stdlib and headered HTTP. A Firefox HAR captured zero requests to www.homedepot.com; Home Depot renders all product and store data server-side with no XHR/fetch API surface. Stubbed with no viable activation path short of an HTML scraping adapter.

Category Routing

Queries are routed to sources by product category:

CategoryActive Sources
foundational (broad fallback)Ferguson, Rejuvenation, IKEA, Floor & Decor, Super Bright LEDs, PROLIGHTING, 1000Bulbs, FaucetDepot, The Hardware Hut
plumbingFerguson, Floor & Decor, PlumbersStock, FaucetDepot, FaucetList, PlumbTile, Modern Bathroom, KBAuthority, Vintage Tub
electricalSuper Bright LEDs, PROLIGHTING, 1000Bulbs, Bees Lighting, Lighting New York, Lightology
hvacPioneer Mini Split, Sylvane, IWAe, The Hardware Hut
flooringFloor & Decor
hardwareThe Hardware Hut, Rejuvenation, IKEA
materialsFloor & Decor, The Hardware Hut, IKEA
appliancesFerguson, IKEA, GE Appliances, Bray & Scarff, PC Richard, Appliance Factory, Best Buy, Abt, Homewise Appliance
furnitureWest Elm, Article, Shopify DTC, IKEA
decorWest Elm, Rejuvenation, Shopify DTC, IKEA, Lighting New York, Lightology, KBAuthority, Vintage Tub

Room shortcuts expand to categories: --room kitchen = plumbing + electrical + flooring + hardware + materials + appliances + decor. --room bathroom = plumbing + electrical + flooring + hardware + materials + decor.

Reno Goat intentionally deprioritizes commodity builder supplies such as lumber, generic pipe/fittings, P-traps, wire nuts, raw service parts, and bulk fasteners unless they are part of a homeowner-selected installed system.

Quick Start

# Verify setup
reno-goat-pp-cli doctor

# Fan-out search across all active sources
reno-goat-pp-cli product-search all "pendant light"

# Compound model lookup with spec docs and model-page probes
reno-goat-pp-cli model-intel "36 induction cooktop" --json

# Probe blocked/readable showroom routes
reno-goat-pp-cli source-probe --candidate all --json

# Search by room (expands to relevant categories + sources)
reno-goat-pp-cli product-search all "faucet" --room kitchen

# Search a single source
reno-goat-pp-cli product-search ferguson-search --query "rainfall showerhead"

# Lowe's autocomplete
reno-goat-pp-cli suggest lowes-suggest "bathroom vanity"

# Find Lowe's stores near you
reno-goat-pp-cli stores lowes-stores 66101

# Get full product details
reno-goat-pp-cli product ferguson-product --url https://www.fergusonhome.com/product/...

# Compare products across retailers
reno-goat-pp-cli compare https://www.westelm.com/... https://www.article.com/...

# Watch a product's price
reno-goat-pp-cli watch add https://www.westelm.com/... --threshold 15

# Start a renovation project with budget tracking
reno-goat-pp-cli project create "kitchen reno"
reno-goat-pp-cli project add "kitchen reno" https://www.fergusonhome.com/... --qty 1
reno-goat-pp-cli project budget "kitchen reno"

Commands

Fan-out search across sources, routed by category.

  • product-search all <query> — fan-out to all active sources
  • product-search all <query> --room kitchen — category-routed fan-out
  • product-search ferguson-search — Ferguson (fixtures, appliances)
  • product-search westelm-search — West Elm (furniture, decor)
  • product-search rejuvenation-search — Rejuvenation (hardware, lighting)
  • product-search article-search — Article (furniture, decor)
  • product-search shopify-search — Shopify DTC stores

model-intel

Compound model lookup for installed-selection decisions.

  • model-intel <category query> — discover product rows, extract model/SKU candidates, collect price/spec/install docs from source rows and returned product pages, and probe predictable model pages
  • model-intel <model> — probe exact model-page candidates and report whether each source is readable, blocked, or missing
  • model-intel <query> — auto-infer installed-selection categories such as HVAC, electrical, plumbing, flooring, hardware, materials, appliances, furniture, or decor from the query
  • model-intel <query> --category hvac --sources routed — force model/SKU extraction against the active source set for a category
  • model-intel <query> --room kitchen --sources routed — expand a room into categories, then search the routed active sources
  • model-intel <query> --sources active — run the extraction pass across every active source
  • model-intel <query> --search-offers=false — skip search-result model and price fallback evidence

Default --sources auto first infers installed-selection categories from the query and routes through Reno Goat's category source map. If no category is inferred, it falls back to the appliance-oriented GE Appliances and Bosch discovery path. Routed and active modes still allow explicit control, so HVAC, electrical, plumbing, flooring, hardware, and finish-material rows can contribute priced model/SKU candidates. For finish selections that do not use appliance-style model numbers, model-intel preserves source product IDs or URL SKU tokens as selection identifiers. Returned rows and search-result offer URLs are enriched from their product pages for linked PDFs; this captures spec/install/dimmer/warranty documents when the retailer exposes them, and filters sibling-model or promo PDFs when a model number is known. AJ Madison model URLs are probed for exact-model or appliance-like records and reported as blocked when PerimeterX/CAPTCHA prevents direct CLI replay.

With --search-offers=true, model-intel also queries readable Brave Search result pages. Category queries can add labeled brave-search:<host> model candidates from product-result fields, while exact-model lookups record product-price fields as fallback offers filtered to exact-model title/URL anchors. The CLI then tries a bounded offer-page enrichment pass; readable offer pages can add model-specific PDFs, while blocked pages are reported in probe_status. These are clearly labeled search-result evidence and are used as fallback discovery when direct retailer pages are WAF-blocked or not yet implemented.

Priced rows can also be enriched from manufacturer product pages when the retailer already supplies a sourceable model row. For Moen shower-valve and trim rows returned by active plumbing sources such as KBAuthority or FaucetDepot, model-intel probes the matching shop.moen.com/products/<model> page, adds the Moen product-page offer where available, and captures canonical assets.moen.com product-specification, instruction-sheet, and exploded-parts PDFs. For Leviton dimmer/control rows returned by active electrical sources such as 1000Bulbs, model-intel probes leviton.com/products/<model> and captures the manufacturer product bulletin plus English instruction-sheet PDF. These are bounded manufacturer enrichment steps, not standalone manufacturer sources.

Manufacturer catalogs that do not expose pricing are used only as model-intel discovery sources, not as active retail sources. Broan-NuTone is the first explicit example: bath-fan and range-hood queries can pull Broan/NuTone model numbers and spec/install PDFs from readable manufacturer pages, then --search-offers=true tries a deterministic bounded batch of exact-model retailer pricing probes so manufacturer-only rows are useful only when paired with sourceable offer evidence.

product

Full product details from any source.

  • product ferguson-product — Ferguson via GraphQL
  • product westelm-product — West Elm
  • product rejuvenation-product — Rejuvenation
  • product article-product — Article via APQ (50+ fields)
  • product shopify-product — Shopify DTC via Storefront API

watch

Track product prices over time in local SQLite.

  • watch add <url> [--threshold 15] — start watching
  • watch list — list watches
  • watch check — poll prices, flag drops
  • watch history <url> — price history

project

Group products into renovation projects with budget tracking.

  • project create <name> — create a project
  • project add <name> <url> [--qty N] — add a product
  • project budget <name> — budget totals
  • project list — list projects

saved

Save products and detect staleness.

  • saved add <url> — save a product
  • saved list — list saved
  • saved --check-stale — detect discontinued, OOS, or price changes

compare

  • compare <url1> <url2> [url3...] — side-by-side comparison

suggest

Autocomplete suggestions.

  • suggest lowes-suggest <query> — Lowe's autocomplete with category facets
  • suggest westelm-suggest <query> — West Elm via Constructor.io
  • suggest rejuvenation-suggest <query> — Rejuvenation via Constructor.io

stores

Find physical stores near a location.

  • stores lowes-stores <zip> — Lowe's stores (address, hours, lat/lng, phone, features)
  • stores westelm-stores <zip> — West Elm stores
  • stores rejuvenation-stores <zip> — Rejuvenation stores

brands

  • brands ferguson-brands — Ferguson brand facets
  • brands westelm-brands — West Elm brands
  • brands rejuvenation-brands — Rejuvenation brands

delivery

  • delivery westelm-delivery — West Elm delivery by ZIP
  • delivery rejuvenation-delivery — Rejuvenation delivery by ZIP

deals

  • deals — active promotions and promo codes

reviews

  • reviews ferguson-reviews — Ferguson reviews
  • reviews article-reviews — Article reviews + UGC media

sources

  • sources — list all sources with status, transport, and categories

source-probe

Probe candidate retailer/showroom routes with Reno Goat's current plain HTTP transport. Each probe reads up to 256KB of the response body and reports body_truncated when the page is larger than the diagnostic window.

  • source-probe --candidate appliance-showrooms — probe appliance showroom seed routes, including AJ Madison, Abt, Bray & Scarff, Ferguson Home, Grand Appliance, and Plesser's
  • source-probe --candidate appliance-priority-gaps — probe local showroom and big-box priority routes: ABW, ADU catalog, AJ Madison, Abt, Best Buy, Costco, PC Richard, Appliance Factory, Homewise Appliance, Spencer's, Grand Appliance, and Warners' Stellian
  • source-probe --candidate bath-showrooms — probe bath showroom seed routes, including Build.com, FaucetDirect, QualityBath, Signature Hardware, and Supply.com
  • source-probe --candidate bath-priority-gaps — probe bath-showroom priority routes: QualityBath, Vintage Tub, HomePerfect, DecorPlanet, Build.com, and Signature Hardware
  • source-probe --candidate all — run every seed and priority-gap group
  • source-probe --candidate none --url <url> — probe a custom route

The result labels routes as readable, blocked, or unreachable and records known blockers such as Cloudflare and PerimeterX where the captured response body exposes them. This is a triage surface; a readable root page still needs product/API extraction before it becomes an active source.

Output Formats

# Table (default in terminal, JSON when piped)
reno-goat-pp-cli product-search all "pendant light"

# JSON
reno-goat-pp-cli product-search all "pendant light" --json

# Filter fields
reno-goat-pp-cli product-search all "pendant light" --json --select name,price,source

# Dry run
reno-goat-pp-cli product-search all "pendant light" --dry-run

# Agent mode (JSON + compact + no prompts)
reno-goat-pp-cli product-search all "pendant light" --agent

Agent Usage

Designed for AI agent consumption:

  • Non-interactive — never prompts, every input is a flag
  • Pipeable--json to stdout, errors to stderr
  • Filterable--select name,price returns only the fields you need
  • Previewable--dry-run shows the request without sending
  • Offline-friendly — local SQLite store for watch/project/saved data

Exit codes: 0 success, 2 usage error, 3 not found, 5 API error, 7 rate limited, 10 config error.

Configuration

Config file: ~/.config/reno-goat-pp-cli/config.toml

reno-goat-pp-cli doctor    # verify configuration and connectivity

Generated by CLI Printing Press

For agents: pass /documentation/reno-goat/agents.md to install this CLI from a prompt.