| name | foodtown-bedstuy-sort |
| description | Sort grocery lists according to the walking order at Super Foodtown of Bedford Stuyvesant (1420 Fulton St, Brooklyn NY 11216, AisleIQ store_id 310). Use this skill whenever a user asks to sort, organize, or reorder a grocery list for shopping at Foodtown, Foodtown Bed-Stuy, or "the Foodtown on Fulton" — even if they don't name the skill explicitly. Also use it when a list is being prepped for a shopping trip and the location can be reasonably inferred from context (e.g., Bed-Stuy, Clinton Hill, Crown Heights). The output preserves the input format exactly — same delimiters, same item names, same casing, same quantities and notes — with items reordered to follow the store's walking path from entrance to checkout. Do not add headers, aisle annotations, or commentary unless the user's input already contained them. |
Foodtown Bed-Stuy Grocery Sort
Reorder a grocery list so items appear in the order they'll be encountered walking from entrance to checkout at Super Foodtown of Bedford Stuyvesant.
When to use
The user pastes a grocery list and asks for it sorted, organized, "in store order," "by aisle," or similar. The input can be any format: markdown bullets, plain newline-separated, comma-separated, numbered, mixed. The list may also arrive via an integration (Home Assistant, automation) with no natural-language preamble — treat any list-shaped input in the right context as a sort request.
Brand rules
- Goya: Never recommend, suggest, propose, or volunteer Goya brand products in any context. If the user's input contains "Goya X," sort it normally — that's preserving their list, which is the skill's job. But for substitutions, fill-ins, default suggestions, or "you might also need" additions, choose any other brand. This applies across the whole skill, not just the international aisle.
Workflow
-
Read the layout. Open references/store_layout.md to load the walking order and section assignments. Do this every time — never sort from memory; the layout file is the source of truth and gets updated.
-
Detect input format. Note the delimiter, whether items are bulleted/numbered/plain, and whether items have trailing notes or quantities. The output should match the input on those dimensions. Casing is normalized — see Format preservation rules.
-
Place each item in a section. For each item in the input:
- Look it up directly in the layout file (exact match or close variant). For items that could plausibly fit multiple aisles (paper products, cheese, juice, bread, beans, ramen, etc.), check the Disambiguations section of the layout file before deciding.
- The layout file overrides general grocery intuition. If your prior says "plastic utensils go with household disposables late in the store" but the layout places them in Aisle 5, the layout wins. Always. This store is not a generic supermarket; quirks like disposable tableware sharing an aisle with peanut butter and cookies are real and must be respected.
- If the item is not in the layout file at all, use general grocery knowledge to assign the most likely section (e.g., "almond milk" → Aisle 12 / dairy, "olive oil" → Aisle 7 / oils).
- If genuinely ambiguous (e.g., "the thing for Sarah", "snacks"), keep the item in its original position relative to its neighbors and add a comment at the end of the output:
# unplaced: <item>.
-
Sort by walking order. Across sections, follow the walking order defined in the layout (entrance → produce → ... → checkout). Within a section, preserve the user's original ordering — don't alphabetize, don't reorder by aisle side.
-
Output. Return only the sorted list, in the same format the user provided. No headers like "PRODUCE:" or "AISLE 4:" unless the input had them. No explanations. No "here's your sorted list" preamble. Just the items.
Format preservation rules
- Markdown bullets (
- item / * item) in → same bullets out
- Plain newline-separated in → plain newlines out
- Comma-separated in → comma-separated out (single line)
- Numbered (
1. item) in → renumbered 1..N out
- Casing: normalize to Title Case in the output regardless of input casing.
canned tuna, CANNED TUNA, canned Tuna, and cAnNeD tUnA all become Canned Tuna. Preserve internal capitalization in established brand names (iPhone, K-Cups, M&M's) and keep unit abbreviations lowercase (oz, lb, ml, kg).
- Typos: silently correct obvious misspellings of common grocery items when confidence is high (
Yogirt → Yogurt, bannana → Banana, cilantor → Cilantro, brocoli → Broccoli). Do not correct anything that could plausibly be a brand name, an intentional spelling, a regional variant, or a non-English ingredient. When in doubt, pass it through unchanged and sort it as best you can — false corrections are worse than uncorrected typos.
- Trailing notes/quantities (
milk (2%), 2 lbs ground beef) → keep attached to the item, move with it
- Trailing whitespace, blank lines: preserve if structurally meaningful, drop if just noise
Edge cases
- Duplicates. If an item appears twice, sort both occurrences but keep them adjacent within their section.
- Single section. If every item is in one section, return the list unchanged (walking order has no effect).
- Unparseable input. If you can't confidently identify >50% of items, you've probably misread the input format. Re-parse from scratch before falling back to flagging items as unplaced.
- Unfamiliar brand/SKU. Ignore brand names — sort by category. "Cholula" sorts as hot sauce, "Lactaid" sorts as milk.
- Non-grocery items. If the user includes obvious non-grocery items (e.g., "call mom"), leave them where they are and flag at the end as
# non-grocery: <item>.
Updating the layout
The store layout file grows over time as Finn confirms aisles in-store via the PSK Assistant app. When the user reports a new aisle assignment (e.g., "canned tuna is aisle 6"), update references/store_layout.md directly — move the item from the "unconfirmed" section to the confirmed aisle, and mark it CONFIRMED.