product-enrich · diff
git:20260720.55a5936 to git:20260726.e702451
13 added, 28 removed. Audit A to A.
---
name: product-enrich
- description: Auto-tag FF&E products with categories, colors, materials, and style tags using AI. Use when the user asks to "enrich", "tag", or "categorize" products, or to fill in missing category, material, or style columns in the schedule.
+ description: Enrich FF&E schedule rows with categories, colors, materials, and style tags. Use to tag, categorize, or fill those missing fields; not to research new products.
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
- AskUserQuestion
- - mcp__google-sheets__get_sheet_data
- - mcp__google-sheets__update_cells
- - mcp__google-sheets__list_sheets
---
- # /product-enrich — Product Enrichment
+ # /as:product-enrich — Product Enrichment
- Takes a product list with basic info (name + brand) and fills in missing metadata — category, subcategory, primary color, material, and style tags — using AI. Works on CSV files, Google Sheets, or pasted data.
+ Takes product rows from the nearest project's `product-library.csv` or pasted data and proposes missing category, color, material, and style metadata.
## When to Use
- After a bulk import where products are missing categories or tags
- When a designer clips products quickly without filling in details
- To standardize metadata across products from different sources
- Before generating an FF&E schedule (enriched data makes better schedules)
## Step 1: Accept Input
Accept product data in any format:
- **Google Sheet ID:**
- ```
- /product-enrich 1FMScYW9guezOWc_m4ClTQxxFIpS6TNRr373R-MJGzgE
- ```
-
**CSV file:**
```
- /product-enrich ./products.csv
+ /as:product-enrich ./products.csv
```
**Pasted data:**
```
- /product-enrich
+ /as:product-enrich
Eames Lounge Chair, Herman Miller
Saarinen Tulip Table, Knoll
PH 5 Pendant, Louis Poulsen
Togo Sofa, Ligne Roset
```
## Step 2: Analyze Each Product
For each product, infer the following fields:
### Category
Map to the canonical vocabulary (22 terms) defined in `../../schema/product-schema.md`.
### Subcategory
More specific classification within the category:
- Chair → Task Chair, Lounge Chair, Dining Chair, Side Chair, Stool, Bench
- Table → Dining Table, Coffee Table, Side Table, Console Table, Conference Table
- Light → Pendant, Floor Lamp, Table Lamp, Wall Sconce, Ceiling, Task Light, Chandelier
- Sofa → Sofa, Sectional, Loveseat, Daybed, Settee
- Storage → Credenza, Bookcase, Filing Cabinet, Wardrobe, Sideboard, Dresser
- Desk → Writing Desk, Executive Desk, Standing Desk, Workstation
### Primary Color
The dominant color of the product as typically sold:
- Use standard color names: Black, White, Gray, Brown, Beige, Navy, Blue, Green, Red, Orange, Yellow, Pink, Purple, Natural, Walnut, Oak, Teak, Chrome, Brass, Copper, Multi
### Material
Primary materials, comma-separated:
- Wood (specify type if known: Walnut, Oak, Maple, Teak, Birch, Ash, Beech)
- Metal (specify: Steel, Aluminum, Brass, Chrome, Iron, Copper)
- Upholstery (specify: Leather, Fabric, Velvet, Bouclé, Mohair, Linen, Wool)
- Other: Glass, Marble, Concrete, Ceramic, Plastic, Fiberglass, Rattan, Cane, Acrylic
### Style Tags
2-4 descriptive tags from:
- Period/movement: Mid-Century Modern, Art Deco, Bauhaus, Scandinavian, Japanese, Industrial, Contemporary, Traditional, Minimalist, Postmodern, Memphis
- Character: Organic, Geometric, Sculptural, Modular, Stackable, Compact, Statement, Classic, Iconic
- Context: Residential, Contract, Hospitality, Healthcare, Education, Outdoor
### Image Analysis
- If the product data includes an image URL (column AC in the master schema), use Claude vision to verify and refine the enrichment. The image may reveal:
+ If product data includes the named `Image URL` field, use image analysis to verify and refine the enrichment. The image may reveal:
- Actual color (not just what the name suggests)
- Material details not in the product name
- Style characteristics
## Step 3: Present Preview
Show a preview of the enrichment before applying:
```
## Product Enrichment Preview
| Product | Brand | Category | Subcategory | Color | Material | Style Tags |
|---------|-------|----------|-------------|-------|----------|------------|
| Eames Lounge Chair | Herman Miller | Chair | Lounge Chair | Walnut/Black | Molded plywood, Leather | Mid-Century Modern, Iconic, Residential |
| Saarinen Tulip Table | Knoll | Table | Dining Table | White | Marble, Aluminum | Mid-Century Modern, Sculptural, Organic |
| PH 5 Pendant | Louis Poulsen | Light | Pendant | White | Aluminum | Scandinavian, Classic, Iconic |
| Togo Sofa | Ligne Roset | Sofa | Sofa | Brown | Fabric | Contemporary, Organic, Sculptural |
4 products enriched. Apply? (y/n)
```
Flag any products where enrichment is uncertain:
```
⚠ "Custom Reception Desk" — unknown product, category set to Desk but verify
```
## Step 4: Apply
- ### To Google Sheet
- Write enriched fields to the master 33-column schema:
- - Column A (Category) — enriched category
- - Column R (Materials) — enriched materials
- - Column S (Colors/Finishes) — enriched color
- - Column AD (Tags) — enriched style tags, appended to existing tags
-
- Do NOT overwrite existing values unless the field is empty or the user explicitly asks to overwrite.
+ ### To the project library
+ Read `../../schema/product-schema.md` and `../../schema/csv-conventions.md`. Map enrichment only to canonical named fields: `Category`, `Materials`, `Colors/Finishes`, and appended `Tags`; place noncanonical subcategory detail in `Notes`. Do not overwrite a populated field unless the preview explicitly calls that out.
- ### To CSV
- Add new columns if they don't exist: Category, Subcategory, Primary Color, Material, Style Tags. Save as `{original-name}-enriched.csv`.
+ For multiple enriched rows, materialize the complete proposed 33-column CSV as a temporary or user-visible review file. Validate it, preview every material change and the target `product-library.csv` once, then use the single confirmation gate. After approval, invoke `python3 "${CLAUDE_PLUGIN_ROOT}/skills/master-schedule/scripts/csv-library.py" import product --project <project-root> --source <review.csv>` exactly once for one atomic replacement; never loop `update`. A genuinely single-record enrichment may use the same plugin-root helper's `update` command once with a uniquely matching stable field.
### To conversation
Output the enriched table in markdown.
## Step 5: Summary
```
✓ Enriched 4 products
Categories: 4 assigned (0 already had values)
Colors: 4 assigned
Materials: 4 assigned
Style tags: 14 total tags across 4 products
Uncertain: 1 (flagged for review)
```
## Pairs With
- - `/product-spec-bulk-fetch` — fetch specs first, then enrich the results
- - `/product-data-cleanup` — cleanup normalizes formatting, enrich adds metadata
- - `/product-data-import` — enriched products make better formatted schedules
- - `/product-match` — enriched tags help find better matches
+ - `/as:product-spec-bulk-fetch` — fetch specs first, then enrich the results
+ - `/as:product-data-cleanup` — cleanup normalizes formatting, enrich adds metadata
+ - `/as:product-data-import` — enriched products make better formatted schedules
+ - `/as:product-match` — enriched tags help find better matches