Skip to content

Instantly share code, notes, and snippets.

@rgarcia
Created February 2, 2026 19:38
Show Gist options
  • Select an option

  • Save rgarcia/a4002f4ab78d24677777ddfbe0d64503 to your computer and use it in GitHub Desktop.

Select an option

Save rgarcia/a4002f4ab78d24677777ddfbe0d64503 to your computer and use it in GitHub Desktop.
DoorDash automation skill for agent-browser
name description allowed-tools
doordash
Access DoorDash for food delivery ordering, order history, account management, and restaurant/store browsing.
Bash(agent-browser:*)

DoorDash.com

Uses agent-browser with Kernel cloud browser provider. See the kernel-agent-browser skill for best practices.

Configuration

Set environment variables to configure the Kernel browser. These must be set before your first agent-browser -p kernel call since the CLI holds state between invocations.

Environment Variables

Variable Description Default
KERNEL_API_KEY Required. Your Kernel API key for authentication (none)
KERNEL_STEALTH Enable stealth mode to avoid bot detection (true/false) true
KERNEL_TIMEOUT_SECONDS Session timeout in seconds 300
KERNEL_PROFILE_NAME Browser profile name for persistent cookies/logins (none)

Profile Persistence: When KERNEL_PROFILE_NAME is set, the profile will be created if it doesn't already exist. Cookies, logins, and session data are automatically saved back to the profile when the browser session ends.

Example Configuration

export KERNEL_API_KEY="your-api-key"
export KERNEL_TIMEOUT_SECONDS=600        # 10-minute session timeout
export KERNEL_STEALTH=true               # Enable stealth mode (default)
export KERNEL_PROFILE_NAME=doordash      # Persist login sessions across runs

Make sure to use -p kernel flag with each command.

Login Workflow

DoorDash uses a two-step login flow, sometimes with 2FA verification.

1. Open login page

agent-browser -p kernel open https://www.doordash.com/consumer/login

The page redirects to identity.doordash.com with OAuth flow.

2. Enter credentials (Single Form)

The login form shows both email and password fields on the same page:

agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i
agent-browser -p kernel fill @e9 "<email>"
agent-browser -p kernel fill @e10 "<password>"
agent-browser -p kernel click @e13

Element refs on initial login page:

  • @e1 - Sign In radio (checked)
  • @e2 - Sign Up radio
  • @e3 - Continue with Google
  • @e5 - Continue with Facebook
  • @e7 - Continue with Apple
  • @e9 - Email textbox
  • @e10 - Password textbox
  • @e11 - Show password button
  • @e12 - Reset Password button
  • @e13 - Continue to Sign In button

3. Handle Two-Step Password Entry

After entering email and clicking Continue, DoorDash may show only a password field:

agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i
agent-browser -p kernel fill @e3 "<password>"
agent-browser -p kernel click @e6

Element refs on password-only page:

  • @e3 - Password textbox
  • @e4 - Show button
  • @e5 - Reset Password button
  • @e6 - Sign In button

4. Handle 2FA Verification Code (If Required)

DoorDash may require a 6-digit verification code sent via SMS or email:

agent-browser -p kernel snapshot -i
# Look for: spinbutton "Enter your 6-digit code" [ref=e35]

Element refs on 2FA page:

  • @e35 - 6-digit code input (spinbutton)
  • @e36 - Resend Code button (disabled during countdown)
  • @e37 - Send to Email button (alternative delivery)
  • @e38 - Get Help link
  • @e39 - Cancel button
  • @e40 - Submit button (disabled until code entered)

Manual intervention required: Get the live view URL and ask user to enter the code:

kernel browsers list
kernel browsers view <session-id>

5. Verify login success

agent-browser -p kernel get url
# Should show: https://www.doordash.com/

After successful login, the page shows your delivery address in the header.

Homepage (After Login)

Top Navigation:

  • @e1 - Home link
  • @e2 - Grocery link
  • @e3 - Retail link
  • @e4 - Convenience link
  • @e5 - Beauty link
  • @e6 - Pets link
  • @e7 - Health link
  • @e8 - Party link
  • @e9 - Browse All link
  • @e10 - Orders link
  • @e11 - Account button
  • @e12 - DoorDash Home Page link
  • @e13 - Address button (shows current delivery address)
  • @e14 - Delivery radio (checked)
  • @e15 - Pickup radio
  • @e16/@e17 - Notification Bell buttons
  • @e18 - Cart button (shows item count)

Category Quick Links (starting at @e20): Breakfast, Coffee, Indian, Sushi, DashPass, Pizza, Fast Food, Deals, Sandwiches, Asian, Healthy, Pickup, Chicken, Desserts, etc.

Note: Categories vary by location. Some locations show Target or other retail stores as quick links.

Change Delivery Address

1. Click the address button

agent-browser -p kernel click @e13   # Address button in header
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i

2. Address Modal Structure

The address modal shows:

Quick Filter Buttons (top row):

  • @e4 - Home (pressed if currently selected)
  • @e5 - Work
  • @e6-@e10 - Other saved address labels

Search Box:

  • @e3 - "Search for an address" combobox

Saved Addresses List: Each saved address appears as a button with format:

button "<Label> <Address>, <City>, <State> <Zip>, USA Edit address" [ref=eN]

Example refs:

  • @e11 - Home address with full details
  • @e13 - Second saved address
  • @e15 - Third saved address (with "Work SF" label)
  • etc.

Each address also has an "Edit address" button next to it.

3. Select a Saved Address

Click on the address button to select it:

# Find the address you want in the snapshot, then click it
agent-browser -p kernel click @eN   # Address button
agent-browser -p kernel wait 2000

The page will reload with the new delivery address. Verify by checking the address button in header:

agent-browser -p kernel snapshot -i | head -20
# Look for: button "<Address Label>" [ref=e13]

4. Quick Address Selection Workflow

agent-browser -p kernel click @e13   # Open address modal
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i | grep -i "1311 Vine"  # Find specific address
agent-browser -p kernel click @eN   # Click the matching address
agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i | head -20   # Verify new address in header

Browse Retail Stores (Target, etc.)

Navigate to Retail Tab

agent-browser -p kernel click @e3   # Retail link in nav
agent-browser -p kernel wait 2000

Or navigate directly:

agent-browser -p kernel open https://www.doordash.com/tabs/retail
agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i

Retail Page Structure

Filter Buttons:

  • @e19 - Pets
  • @e20 - Flowers
  • @e21 - Retail
  • @e22 - Convenience
  • @e23 - Beauty
  • @e24 - Alcohol
  • @e25 - Packages
  • @e26 - DashPass
  • @e27 - HSA/FSA
  • @e28 - Over 4.5
  • @e30 - Fastest
  • @e31 - Price

Store Listings: Each store appears as a link with delivery time and fee info:

link "Target Fast 33 min $0 delivery fee on $12+ by 11:29 AM" [ref=e32]
link "Dick's Sporting Goods 34 min $0 delivery fee over $12" [ref=e34]
link "Walgreens 32 min $0 delivery fee over $12 SNAP" [ref=e36]
link "Best Buy Fast 49 min $0 delivery fee on $12+ by 12:05 PM" [ref=e38]

Open a Store

agent-browser -p kernel click @e32   # Target store link
agent-browser -p kernel wait 2000

Store URL Pattern:

https://www.doordash.com/convenience/store/<store_id>/?pickup=false

Store Page (Target Example)

Store Page Structure

Header:

  • @e12 - Open Menu button
  • @e14 - Address button
  • @e17 - Cart button (shows item count)
  • @e18 - Pricing & Fees button
  • @e19 - DashPass Info button
  • @e20 - Search box ("Search Target")
  • @e21 - Shop your list button
  • @e22 - Save button

Category Links (starting at @e23): Buy It Again, Deals, Valentine's Day, Household, Personal Care, Drinks, Snacks, Frozen, Baby & Child, Beauty, Meat & Fish, Pantry, Pet Care, Electronics, Candy, etc.

Product Add Buttons: Products show as:

button "0 in cart. click to edit quantity" [ref=e71]

Search Within Store

agent-browser -p kernel fill @e20 "paper towels"
agent-browser -p kernel press Enter
agent-browser -p kernel wait 2000

Search Results URL Pattern:

https://www.doordash.com/convenience/store/<store_id>/search/<query>

Search Results Page

Filter Buttons:

  • @e20 - Filters
  • @e21 - Deals
  • @e22 - Brands
  • @e23 - Under $4
  • @e24 - Over 4.0

Products: Each product shows with an add-to-cart button.

Add Product to Cart

agent-browser -p kernel click @eN   # "0 in cart. click to edit quantity" button
agent-browser -p kernel wait 1000

The button changes to show quantity controls after adding.

Cart Management

Open Cart Panel

agent-browser -p kernel click @e18   # Cart button
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i

Cart Panel Structure

  • @e86 (or similar) - Close button
  • @e87 - Store link (e.g., "Target")
  • @e88 - Checkout link with total (e.g., "Checkout $5.89")
  • @e89 - Remove item from cart button
  • @e90 - Add one to cart button
  • @e91 - "Complement your cart" suggestions link

For saved carts from previous sessions:

  • @e26 - Delete saved cart button
  • @e27 - Checkout link
  • @e28/@e29 - Add more items buttons

Remove Item from Cart

agent-browser -p kernel click @eN   # "remove item from cart" button

Proceed to Checkout

agent-browser -p kernel click @e88   # "Checkout $X.XX" link
agent-browser -p kernel wait 2000

Complete Order Workflow: Address + Target

# 1. Open DoorDash (assumes already logged in via profile)
export KERNEL_PROFILE_NAME=doordash
export KERNEL_TIMEOUT_SECONDS=600
agent-browser -p kernel open https://www.doordash.com/
agent-browser -p kernel wait 2000

# 2. Change delivery address
agent-browser -p kernel click @e13   # Address button
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i   # Find desired address ref
agent-browser -p kernel click @eN    # Click desired address
agent-browser -p kernel wait 2000

# 3. Navigate to Target
agent-browser -p kernel open https://www.doordash.com/tabs/retail
agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i | grep -i target
agent-browser -p kernel click @eN    # Target store link

# 4. Search for products
agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i
agent-browser -p kernel fill @e20 "product name"
agent-browser -p kernel press Enter
agent-browser -p kernel wait 2000

# 5. Add to cart
agent-browser -p kernel snapshot -i
agent-browser -p kernel click @eN   # Product add button

# 6. View cart and checkout
agent-browser -p kernel click @e17   # Cart button
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i
agent-browser -p kernel click @eN   # Checkout link

Checkout Flow

1. Open Cart and Proceed to Checkout

agent-browser -p kernel click @e17   # Cart button (shows item count)
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i

Cart Panel Elements:

  • Checkout link: link "Checkout $X.XX" [ref=eN]
  • Remove item: button "remove one from cart" [ref=eN]
  • Add item: button "add one to cart" [ref=eN]
  • Claim deal: button "Claim" [ref=eN] (if deals available)

Claim any available deals before checkout:

agent-browser -p kernel click @eN   # Claim button for each deal

2. Click Checkout Link

agent-browser -p kernel click @eN   # "Checkout $X.XX" link
agent-browser -p kernel wait 2000

3. Pre-Checkout Upsell Page (Skip This)

URL pattern: /convenience/store/<store_id>/collections/checkout_aisle_page?...

This page shows "In Case You Missed it" with suggested items. Always skip:

agent-browser -p kernel snapshot -i | grep -i "continue to checkout"
agent-browser -p kernel click @eN   # "Continue to checkout" button
agent-browser -p kernel wait 2000

4. Checkout Page

URL pattern: /consumer/checkout/?lat=...&lng=...&order_cart_id=...

Checkout Page Structure:

Section 1 - Account: Shows logged-in email

Section 2 - Shipping Details:

  • Address button: button "Work 1311 Vine St..." [ref=eN]
  • Delivery time radios:
    • Fast option (costs extra): radio "HH:MM AM-HH:MM AM Fast • XX–XX min $X.XX" [ref=eN]
    • Standard option (free): radio "HH:MM AM-HH:MM PM Standard • XX–XX min" [ref=eN] [checked]
    • Schedule ahead: radio "Schedule Ahead..." [ref=eN]
  • Delivery instructions: button "Leave at door..." [ref=eN]
  • Phone: button "(XXX) XXX-XXXX" [ref=eN]

Section 3 - Payment Details:

  • Profile toggle: radiogroup "business profile toggle" with radio "Personal" and unlabeled second radio
  • Edit payment: button "Edit" [ref=eN]
  • Current card: shows card type and last 4 digits

Order Summary:

  • Items list with quantity controls
  • Deals & gift cards: button "Deals & gift cards" [ref=eN]
  • Promotions checkbox: checkbox "Promotion" [ref=eN]
  • Tip radios: radio "4%", radio "5%" [checked], radio "6%", radio "Other"

Place Order:

  • button "Place Order $X.XX" [ref=eN]

5. Change Payment Method

agent-browser -p kernel click @eN   # "Edit" button next to payment
agent-browser -p kernel wait 500
agent-browser -p kernel snapshot -i

Payment Options Panel:

  • Saved cards appear as radio buttons: radio "Set Default" [ref=eN] with card info
  • Click the radio for the desired card
  • Options to add new: Credit/Debit, Venmo, Cash App Pay, Klarna, HSA/FSA
agent-browser -p kernel click @eN   # Radio for desired card

6. Place Order

agent-browser -p kernel click @eN   # "Place Order $X.XX" button
agent-browser -p kernel wait 3000

7. Post-Order: Substitution Preferences Modal

After placing order, a modal may appear asking about substitution preferences:

agent-browser -p kernel snapshot -i
# Look for: button "Continue" or button "No Thanks"
agent-browser -p kernel click @eN   # "No Thanks" to skip

8. Order Tracking

After order is placed, redirects to tracking page: URL pattern: /doubledash/<order_id>

View Order History

agent-browser -p kernel click @e10   # Orders link
agent-browser -p kernel wait 2000
agent-browser -p kernel snapshot -i

Or navigate directly:

agent-browser -p kernel open https://www.doordash.com/orders

Account Menu

agent-browser -p kernel click @e11   # Account button
agent-browser -p kernel wait 1000
agent-browser -p kernel snapshot -i

Switch Between Delivery and Pickup

agent-browser -p kernel click @e15   # Pickup radio
agent-browser -p kernel wait 2000

URL Patterns

Page URL
Homepage https://www.doordash.com/ or /home
Login https://www.doordash.com/consumer/login
Orders https://www.doordash.com/orders
Cart https://www.doordash.com/cart
Retail Tab https://www.doordash.com/tabs/retail
Grocery Tab https://www.doordash.com/tabs/grocery
Store Page https://www.doordash.com/convenience/store/<store_id>/?pickup=false
Store Search https://www.doordash.com/convenience/store/<store_id>/search/<query>
Pre-Checkout Upsell /convenience/store/<store_id>/collections/checkout_aisle_page?...
Checkout /consumer/checkout/?lat=...&lng=...&order_cart_id=...
Order Tracking /doubledash/<order_id>

Cleanup

agent-browser -p kernel close

Notes

  • DoorDash uses a two-step login: email first, then password on a separate screen
  • 2FA verification code may be required (sent via SMS or email) but not always
  • Profile persistence (KERNEL_PROFILE_NAME=doordash) helps avoid re-login
  • The identity.doordash.com OAuth flow handles authentication
  • Address labels (Home, Work, etc.) appear in the header after selection
  • Cart persists between sessions (may show items from previous orders)
  • DashPass membership affects pricing and delivery fees (free delivery/service fees, member savings)
  • Retail stores (Target, etc.) have a different URL structure than restaurants
  • Pre-checkout upsell page ("In Case You Missed it") should always be skipped via "Continue to checkout"
  • Checkout shows detailed cost breakdown: subtotal, tax, delivery fee, service fee, discounts, tip
  • DashPass savings are shown as crossed-out original fees
  • Deals claimed in cart appear as discounts at checkout
  • Substitution preferences modal appears after placing order - can skip with "No Thanks"
  • Order tracking page URL format: /doubledash/<order_id>

Troubleshooting

2FA Code Required

If login requires a verification code:

  1. Get the live view URL:

    kernel browsers list
    kernel browsers view <session-id>
  2. Share the URL with the user to manually enter the code

  3. Or click "Send to Email" (@e37) and check email for the code

Element refs not found after page load

Always run snapshot -i after navigation to get fresh element refs. Refs are session-specific and change between page loads.

Login fails with bot detection

DoorDash may have aggressive bot detection. Use manual login fallback via live view URL if automation fails.

Cart shows items from previous session

DoorDash persists cart items. Use "Delete saved cart" button to clear old items before starting a new order.

Business Profile Toggle Not Working

KNOWN ISSUE: The checkout page shows a radiogroup "business profile toggle" with two radios:

  • radio "Personal" [ref=eN] [checked]
  • radio [ref=eN] (unlabeled - presumably business/work profile)

Attempting to click the second (business) radio may fail with "matched multiple elements" error. The business profile radio appears to not be properly accessible via automation.

Workaround: If you need to use a work/business card:

  1. Add the business card to the Personal profile in DoorDash settings
  2. At checkout, click "Edit" next to payment to see all saved cards
  3. Select the desired card from the saved payment methods list

This is a limitation that should be investigated further - the business profile toggle may require different interaction patterns or may need to be configured via the DoorDash web settings rather than at checkout.

Store Search Not Triggering Navigation

If filling the search box and pressing Enter doesn't navigate to results, use direct URL navigation:

agent-browser -p kernel open "https://www.doordash.com/convenience/store/<store_id>/search/<query>?pickup=false"

URL-encode spaces as %20 in the query.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment