Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Group food ordering through the DoorDash CLI (dd-cli) from a persistent team roster. One request ("lunch for the team") fans out into a single merged cart with every line attributed to its eater via a person-to-cart-item-id ledger, per-person cost split with fee proration, payer rotation history, and a checkout gate that re-derives allergen conflicts against the roster live. Use when ordering for multiple people — team lunch, incident-response food, "collect orders from the thread" — or for /who
.claude/skills/davila7-doordash-group-orders/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 535% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 29% | 0% |
Coordinating N people's food is exactly the cross-session state Claude drops: who's vegetarian, who hates cilantro, which cart line is Bob's, whose turn it is to pay. This skill keeps a roster, attributes every cart line to its eater, splits costs with fees prorated, and remembers payer history.
> Unofficial community skill built on DoorDash's doordash-oss/doordash-cli. > Note: dd-cli orders under ONE account — the account owner pays DoorDash; > the split is for reimbursement (Venmo/transfer), not split payment.
team-food.json (project dir or ~/.claude/dd-cli/ — committable if theteam shares a repo): the roster.
json{ "members": { "dani": { "hard": ["vegetarian"], "allergens": [{ "name": "peanut", "severity": "anaphylaxis" }], "favorites": ["Veggie burrito bowl"], "dislikes": ["cilantro"] }, "bob": { "hard": [], "allergens": [], "favorites": ["Spicy chicken sandwich"], "dislikes": [] } } }
.dd/round-<date>.json — the active round's ledger:json{ "date": "2026-07-19", "cart_uuid": "...", "restaurant": "...", "orders": { "dani": [{ "item": "Veggie bowl", "cart_item_id": "41", "price": 12.5 }], "bob": [{ "item": "Spicy chicken sandwich", "cart_item_id": "42", "price": 11.0 }] } }
.dd/rounds.jsonl — history, one line per completed round:{"date": "...", "order_uuid": "...", "payer": "dani", "split": {"dani": 14.1, "bob": 12.4}}
"Order lunch for the team":
team-food.json; missing members → quickinterview (hard constraints, allergens + severity, a favorite, dislikes).
only places with real vegetarian options). dd-cli search --query "..." → shortlist of 2-3 → let the human pick.
favorites when the restaurant matches;otherwise ask ONE question per member (or take answers from a pasted thread — Flow 2). Never guess for someone with allergens.
dd-cli cart add-items ... per member's items (viathe dd-guard wrapper when doordash-spend-guard is installed). After each add, run dd-cli cart show --cart-uuid <X> and record which cart-item-id belongs to whom in .dd/round-<date>.json. This ledger is what makes "quita lo de Bob" resolvable later.
group gate hook independently re-checks allergens (see below).
order_uuid from dd-cli order history, compute the split, append to .dd/rounds.jsonl, and print a share-ready split table.
The user pastes a Slack/chat thread ("who wants what"). Parse it into the round file: person → requested items. Unknown people → ask if they should join the roster. Ambiguous requests ("something spicy") → one clarifying question, or their favorite if the restaurant matches. Then continue Flow 1 from step 4.
"Bob canceló" / "cambia lo de Sam": look up the person's cart_item_ids in the round ledger, dd-cli cart remove-item --cart-uuid X --cart-item-id N for each, update the ledger, re-show the grouped cart.
now, and offer the post-payment fallback — "tell me the final total and I'll prorate the difference by each person's share."
split = per-person items + prorated share of (final_total − subtotal)when provided.
Read .dd/rounds.jsonl: sum what each member has paid vs. consumed across rounds; the next payer is the member with the largest (consumed − paid) balance. Show the balances so the answer explains itself.
anaphylaxis allergen gets the same vetting thedoordash-allergy-shield skill applies — check their items against hidden-source synonyms, and never guess their order.
cart show output.on every cart mutation, or person-level edits break.
.dd/ to .gitignore unless the team explicitly wants round historycommitted (it reveals eating habits).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,262 | 4,284 | -32% | 1 | 1 | 0% | 1,101 | 1,771 | +61% | 0 | 0 | — |
case-02 | fail→fail | 4,225 | 4,604 | +9% | 1 | 1 | 0% | 846 | 1,594 | +88% | 0 | 0 | — |
case-03 | fail→pass | 3,902 | 20,223 | +418% | 1 | 1 | 0% | 765 | 4,861 | +535% | 0 | 0 | — |
case-04 | fail→pass | 11,101 | 4,226 | -62% | 1 | 1 | 0% | 2,217 | 2,181 | -2% | 0 | 0 | — |
case-05 | fail→pass | 11,938 | 4,898 | -59% | 1 | 1 | 0% | 2,153 | 2,342 | +9% | 0 | 0 | — |
case-06 | pass→pass | 11,098 | 5,195 | -53% | 1 | 1 | 0% | 2,189 | 2,380 | +9% | 0 | 0 | — |
case-07 | pass→pass | 5,293 | 4,109 | -22% | 1 | 1 | 0% | 1,226 | 2,216 | +81% | 0 | 0 | — |
case-08 | fail→pass | 7,644 | 4,776 | -38% | 1 | 1 | 0% | 1,451 | 2,332 | +61% | 0 | 0 | — |
case-09 | fail→pass | 10,684 | 5,759 | -46% | 1 | 1 | 0% | 1,827 | 2,348 | +29% | 0 | 0 | — |
case-10 | fail→pass | 8,456 | 2,801 | -67% | 1 | 1 | 0% | 1,534 | 1,738 | +13% | 0 | 0 | — |
case-11 | pass→pass | 9,935 | 4,125 | -58% | 1 | 1 | 0% | 1,695 | 2,005 | +18% | 0 | 0 | — |
case-12 | fail→pass | 8,775 | 2,111 | -76% | 1 | 1 | 0% | 1,752 | 1,718 | -2% | 0 | 0 | — |
case-13 | fail→pass | 11,258 | 2,449 | -78% | 1 | 1 | 0% | 938 | 1,677 | +79% | 0 | 0 | — |
case-14 | fail→fail | 11,066 | 2,356 | -79% | 1 | 1 | 0% | 1,948 | 1,717 | -12% | 0 | 0 | — |
case-15 | fail→pass | 8,382 | 3,473 | -59% | 1 | 1 | 0% | 1,387 | 1,856 | +34% | 0 | 0 | — |
case-16 | pass→pass | 9,421 | 2,944 | -69% | 1 | 1 | 0% | 1,565 | 1,757 | +12% | 0 | 0 | — |
case-17 | pass→pass | 9,953 | 6,871 | -31% | 1 | 1 | 0% | 1,699 | 2,465 | +45% | 0 | 0 | — |
case-18 | pass→pass | 5,129 | 4,488 | -12% | 1 | 1 | 0% | 787 | 2,149 | +173% | 0 | 0 | — |
case-19 | pass→pass | 11,031 | 6,543 | -41% | 1 | 1 | 0% | 2,069 | 2,322 | +12% | 0 | 0 | — |
case-20 | pass→pass | 7,206 | 3,092 | -57% | 1 | 1 | 0% | 1,243 | 1,794 | +44% | 0 | 0 | — |
case-21 | fail→fail | 4,903 | 1,577 | -68% | 1 | 1 | 0% | 803 | 1,583 | +97% | 0 | 0 | — |
case-22 | fail→pass | 14,836 | 2,583 | -83% | 1 | 1 | 0% | 2,653 | 1,772 | -33% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.