Find recipes online (NYT Cooking, web) and order ingredients via Instacart. Use when asked about recipes, meal planning, grocery shopping, or ordering ingredients.
Find recipes and order ingredients through Instacart.
NYT Cooking requires a subscription. Use Chrome profile 1 (owner's account — see config.local.yaml) which has access.
# Open NYT Cooking
~/.claude/skills/chrome-control/scripts/chrome -p 1 open "https://cooking.nytimes.com"
# Search for a recipe
~/.claude/skills/chrome-control/scripts/chrome -p 1 navigate <tab_id> "https://cooking.nytimes.com/search?q=<search_term>"
Workflow:
Tips:
chrome read <tab_id> to find clickable elementschrome text <tab_id> to extract page contentDO NOT add these items to cart automatically - most kitchens already have them.
| Item | Variations |
|---|---|
| Salt | Table salt, kosher salt, sea salt |
| Black pepper | Ground black pepper, peppercorns |
| Sugar | White/granulated sugar |
| Flour | All-purpose flour |
| Item | Notes |
|---|---|
| Vegetable/canola oil | Basic cooking oils |
| Olive oil | Basic olive oil (not specialty/finishing oils) |
| Butter | Unsalted or salted |
| Common spices | Garam masala, turmeric, cumin, paprika, cayenne, chili powder, cinnamon, oregano, basil, thyme |
| Item | Why ask |
|---|---|
| Fresh aromatics | Onion, garlic, ginger, shallots - often in kitchen but may be out |
| Lemons/limes | Common but perishable |
| Eggs | Staple but people run out |
| Milk/cream | May or may not have |
IMPORTANT: Always clearly communicate what you skipped!
Workflow:
Example message (ALWAYS include this):
Added 8 items to cart at Roche Bros ($52.30):
✓ Ground beef, American cheese, hamburger buns...
SKIPPED (assuming you have):
• Kosher salt
• Black pepper
• Sugar
• Olive oil
Need any of these? Just ask and I'll add them.
Instacart account: owner's email (use Chrome profile 1, see config.local.yaml)
Login Flow:
# Navigate to login
~/.claude/skills/chrome-control/scripts/chrome -p 1 navigate <tab_id> "https://www.instacart.com/login"
# Find and enter email (use owner.email from config.local.yaml)
~/.claude/skills/chrome-control/scripts/chrome -p 1 read <tab_id> | grep -i "textbox"
~/.claude/skills/chrome-control/scripts/chrome -p 1 type <tab_id> <ref> "<owner_email>"
# Click continue and check Gmail for code
~/.claude/skills/chrome-control/scripts/chrome -p 1 focus <gmail_tab_id>
~/.claude/skills/chrome-control/scripts/chrome -p 1 read <gmail_tab_id> | grep -i "instacart.*code"
Default store: Roche Bros. (Watertown area)
# Go to Roche Bros store
~/.claude/skills/chrome-control/scripts/chrome -p 1 navigate <tab_id> "https://www.instacart.com/store/roche-bros"
Performance: 16x faster than sequential approach (22s vs 360s for 6 items)
Strategy:
Complete Implementation:
#!/bin/bash
CHROME="~/.claude/skills/chrome-control/scripts/chrome -p 1"
ITEMS=("chicken+thighs" "napa+cabbage" "carrot" "snow+peas" "bean+sprouts" "scallions")
TABS=()
# Step 1: Open tabs ONE AT A TIME (serialized to avoid extension overload)
echo "Opening tabs..."
for item in "${ITEMS[@]}"; do
result=$($CHROME open "https://www.instacart.com/store/roche-bros/s?k=$item" 2>&1)
tab_id=$(echo "$result" | grep -o "tab [0-9]*" | grep -o "[0-9]*")
TABS+=($tab_id)
done
# Step 2: Wait for pages to load
sleep 3
# Step 3: Click Add buttons in PARALLEL using JS with aria-label selector
JS='(() => {
const btn = [...document.querySelectorAll("button")].find(b =>
(b.getAttribute("aria-label") || "").includes("Add 1")
);
if (btn) { btn.click(); return {ok:1}; }
return {ok:0};
})()'
for tab in "${TABS[@]}"; do
$CHROME js $tab "$JS" 2>/dev/null &
done
wait
# Step 4: Open cart and screenshot
$CHROME click ${TABS[0]} ref_26 # Click "View Cart" button
sleep 2
$CHROME screenshot ${TABS[0]}
# Step 5: Close worker tabs (keep one for cart view)
for tab in "${TABS[@]:1}"; do
$CHROME close $tab
done
CRITICAL: Use aria-label for Add buttons
// WRONG - innerText doesn't contain full text:
btn.textContent.includes("Add 1") // Returns false!
// CORRECT - product name is in aria-label:
btn.getAttribute("aria-label").includes("Add 1") // Returns true!
Why serialized tab opens? Opening 6+ tabs simultaneously overwhelms the Chrome extension connection, causing timeouts. Opening one at a time takes ~14s total but is 100% reliable.
Use direct search URLs instead of clicking through UI. This is faster and more reliable.
Search URL Pattern: