Laundry Decoder 🧺
Care labels are a pictographic language most people can't read — surveys
consistently show the majority of consumers misinterpret care symbols,
which is why shrinking sweaters and pink-white laundry are universal
experiences. This skill translates symbols to plain instructions, tells you
whether today's pile can be one load or must be several, and gives
stain-specific first aid ordered by least-destructive-first.
Overview
Three jobs, one tool (scripts/laundry_decoder.py):
- Symbol decode — describe a symbol in words (
tub 40, triangle crossed, iron 2 dots, circle p, square circle 1 dot) and get the
meaning, the risk if ignored, and the safe-action phrasing. Covers the
ISO 37500 / GINETEX families: washtub (wash), triangle (bleach), square
with circle (dry), iron (iron), circle (professional care).
- Load planner — enter garments with color class, max temperature,
fabric, and delicates flag; the planner partitions them into the fewest
safe loads using real rules:
- temperature = min of the load's ceilings
- new/dark cottons bleed onto lights (hot water worsens it)
- delicates never mix with heavy cottons/towels (abrasion)
- wool/silk never mix with cotton terry (felting + snagging)
- items flagged "hot wash only" (bad towels, workout synthetics) can't go
cold
- Stain first aid — 20+ common stains, each with a protocol ordered
from least to most aggressive for the stated fabric, plus the one thing
you must NOT do (heat-set proteins! bleach on wool!).
Everything is stdlib-only and offline — the data lives in the script.
When to Use
- "What does this symbol on my shirt mean?" (user describes it in words)
- "Can I wash these together?" — jeans + new red tee + white towels
- "What temperature should this load be?"
- "How do I get [red wine/blood/coffee] out of [cotton/wool/silk]?"
- "I washed a red shirt with whites — now what?" → reversal advice for
dye-transfer accidents (in references)
Don't use for: dry-cleaning chemical handling (that's professional
territory), leather/suede care (different domain entirely).
How It Works — Steps
- Decode a label — user reads the symbols aloud:
python3 scripts/laundry_decoder.py decode "tub 30" "triangle crossed" "iron 1 dot" "circle p"
- Plan loads — one garment per
--item (format: name;color;temp;fabric[;flags],
color ∈ white/light/dark/red/new, temp = max °C, flags: delicate, hot-only):python3 scripts/laundry_decoder.py plan \
--item "white towels,white,90,cotton" \
--item "red tee,new,40,cotton" \
--item "jeans,dark,40,denim" \
--item "silk blouse,light,30,silk,delicate"
- Get the partition: which loads, what temperature, what cycle, and the
specific rule that forced each split.
- Stain help:
python3 scripts/laundry_decoder.py stain "red wine" --fabric cotton
- Browse all symbols (
--list) when the user wants a reference sheet.
Conflict Rules (the load-planner brain)
| Rule |
Effect |
bleeder (new/red) + non-bleeder |
separate load — no exceptions |
| delicate + heavy fabric |
separate (delicates cycle protects both) |
| wool/silk + terry/towels |
separate (felting, snagging) |
| hot-only + cold-max item |
separate (can't satisfy both temps) |
| load temperature |
min of members' ceilings |
| mixed colors without bleeders |
allowed, cold/warm |
Worked Example
Items: white towels (90°C), new red tee (40°C), jeans (40°C), silk blouse
(delicate, 30°C) →
Load 1: white towels — 90°C, cotton/heavy cycle
Load 2: red tee — 40°C, first wash alone (color-set: cold + salt/vinegar soak)
Load 3: jeans — 40°C, turned inside-out
Load 4: silk blouse — 30°C, delicates cycle, mesh bag
4 loads, each split justified by a rule — the planner names the rule.
Common Pitfalls
- Heat-setting protein stains (blood, egg, milk). Hot water cooks the
protein into fibers permanently. Always cold first — the stain table
enforces this ordering.
- Bleach on wool/silk/lycra — dissolves the fibers. Chlorine bleach is
whites-cotton-only; oxygen bleach is the safer general choice.
- Overloading detergent "for extra clean" — excess traps soil back into
fabric and wreks machines (yes, the residue myth is real: it's called
redeposition).
- Assuming "dry clean" means dry clean ONLY. The circle means the
manufacturer chose not to test home care; many silks and wools handle
careful hand-washing — see references for the risk framework.
- Tumble-drying what says "dry flat" — wool knits stretch under their
own weight + tumble; the shape never comes back.
- Mixing a bleeder "just once, cold" — new red/black cottons bleed even
cold. Two solo washes first, then they join the family.
Verification Checklist
One-Shot Recipes
"Translate this whole label":
python3 scripts/laundry_decoder.py decode "tub 40 with bar" "square circle 1 dot" "triangle" "iron crossed" "circle p"
Weekly load plan for the family pile:
python3 scripts/laundry_decoder.py plan --item ... (one per garment) --json
Emergency stain card (print & keep by the washer):
python3 scripts/laundry_decoder.py stain --fabric cotton | a2ps
1---2name: laundry-decoder3description: Decode laundry care symbols from text descriptions (tub, triangle, iron, circle, square shapes with dots/bars), build a safe wash plan for a mixed load (color bleeding risk, temperature ceilings, fabric conflicts), and give evidence-based stain removal protocols by stain type. Use when the user asks what a care label means, whether clothes can be washed together, what temperature is safe, or how to remove a specific stain without ruining the fabric.4license: MIT5---67# Laundry Decoder 🧺89Care labels are a pictographic language most people can't read — surveys10consistently show **the majority of consumers misinterpret care symbols**,11which is why shrinking sweaters and pink-white laundry are universal12experiences. This skill translates symbols to plain instructions, tells you13whether today's pile can be **one load or must be several**, and gives14stain-specific first aid ordered by least-destructive-first.1516## Overview1718Three jobs, one tool (`scripts/laundry_decoder.py`):19201. **Symbol decode** — describe a symbol in words (`tub 40`, `triangle21 crossed`, `iron 2 dots`, `circle p`, `square circle 1 dot`) and get the22 meaning, the risk if ignored, and the safe-action phrasing. Covers the23 ISO 37500 / GINETEX families: washtub (wash), triangle (bleach), square24 with circle (dry), iron (iron), circle (professional care).252. **Load planner** — enter garments with color class, max temperature,26 fabric, and delicates flag; the planner partitions them into the fewest27 safe loads using real rules:28 - temperature = min of the load's ceilings29 - new/dark cottons bleed onto lights (hot water worsens it)30 - delicates never mix with heavy cottons/towels (abrasion)31 - wool/silk never mix with cotton terry (felting + snagging)32 - items flagged "hot wash only" (bad towels, workout synthetics) can't go33 cold343. **Stain first aid** — 20+ common stains, each with a protocol ordered35 from least to most aggressive for the stated fabric, plus the one thing36 you must NOT do (heat-set proteins! bleach on wool!).3738Everything is stdlib-only and offline — the data lives in the script.3940## When to Use4142- "What does this symbol on my shirt mean?" (user describes it in words)43- "Can I wash these together?" — jeans + new red tee + white towels44- "What temperature should this load be?"45- "How do I get [red wine/blood/coffee] out of [cotton/wool/silk]?"46- "I washed a red shirt with whites — now what?" → reversal advice for47 dye-transfer accidents (in references)4849**Don't use for:** dry-cleaning chemical handling (that's professional50territory), leather/suede care (different domain entirely).5152## How It Works — Steps53541. **Decode a label** — user reads the symbols aloud:55 ```bash56 python3 scripts/laundry_decoder.py decode "tub 30" "triangle crossed" "iron 1 dot" "circle p"57 ```582. **Plan loads** — one garment per `--item` (format: `name;color;temp;fabric[;flags]`,59 color ∈ white/light/dark/red/new, temp = max °C, flags: delicate, hot-only):60 ```bash61 python3 scripts/laundry_decoder.py plan \62 --item "white towels,white,90,cotton" \63 --item "red tee,new,40,cotton" \64 --item "jeans,dark,40,denim" \65 --item "silk blouse,light,30,silk,delicate"66 ```673. **Get the partition**: which loads, what temperature, what cycle, and the68 specific rule that forced each split.694. **Stain help**:70 ```bash71 python3 scripts/laundry_decoder.py stain "red wine" --fabric cotton72 ```735. **Browse all symbols** (`--list`) when the user wants a reference sheet.7475## Conflict Rules (the load-planner brain)7677| Rule | Effect |78|---|---|79| `bleeder` (new/red) + non-bleeder | separate load — no exceptions |80| delicate + heavy fabric | separate (delicates cycle protects both) |81| wool/silk + terry/towels | separate (felting, snagging) |82| hot-only + cold-max item | separate (can't satisfy both temps) |83| load temperature | min of members' ceilings |84| mixed colors without bleeders | allowed, cold/warm |8586## Worked Example8788Items: white towels (90°C), new red tee (40°C), jeans (40°C), silk blouse89(delicate, 30°C) →9091```92Load 1: white towels — 90°C, cotton/heavy cycle93Load 2: red tee — 40°C, first wash alone (color-set: cold + salt/vinegar soak)94Load 3: jeans — 40°C, turned inside-out95Load 4: silk blouse — 30°C, delicates cycle, mesh bag96```974 loads, each split justified by a rule — the planner names the rule.9899## Common Pitfalls1001011. **Heat-setting protein stains** (blood, egg, milk). Hot water cooks the102 protein into fibers permanently. Always cold first — the stain table103 enforces this ordering.1042. **Bleach on wool/silk/lycra** — dissolves the fibers. Chlorine bleach is105 whites-cotton-only; oxygen bleach is the safer general choice.1063. **Overloading detergent** "for extra clean" — excess traps soil back into107 fabric and wreks machines (yes, the residue myth is real: it's called108 redeposition).1094. **Assuming "dry clean" means dry clean ONLY.** The circle means the110 manufacturer chose not to test home care; many silks and wools handle111 careful hand-washing — see references for the risk framework.1125. **Tumble-drying what says "dry flat"** — wool knits stretch under their113 own weight + tumble; the shape never comes back.1146. **Mixing a bleeder "just once, cold"** — new red/black cottons bleed even115 cold. Two solo washes first, then they join the family.116117## Verification Checklist118119- [ ] Every load's temperature ≤ min of member ceilings120- [ ] No bleeder shares a load with a non-bleeder121- [ ] No delicate shares with heavy cotton/terry122- [ ] Stain protocol starts with the least aggressive step123- [ ] Protein stains never meet hot water in step 1124125## One-Shot Recipes126127**"Translate this whole label":**128```bash129python3 scripts/laundry_decoder.py decode "tub 40 with bar" "square circle 1 dot" "triangle" "iron crossed" "circle p"130```131132**Weekly load plan for the family pile:**133```bash134python3 scripts/laundry_decoder.py plan --item ... (one per garment) --json135```136137**Emergency stain card (print & keep by the washer):**138```bash139python3 scripts/laundry_decoder.py stain --fabric cotton | a2ps140```