Skip to main content
command

doordash-budget — Claude Code command: what it does, how to install

Manages DoorDash spend caps in dd-guard, displays remaining headroom, and reconciles the intent ledger against actual order history.

Install into Claude Code · claude-code-templates All methods and platforms ↓
npx claude-code-templates@latest --command doordash/doordash-budget
Open on GitHub

What doordash-budget does

The command manages the dd-guard spending policy and serves as the only permitted way to modify ~/.claude/dd-guard/limits.json. Because the doordash-spend-guard hook blocks direct shell writes to limits by design, policy updates require interactive confirmation of the resulting JSON.

It accepts three subcommands: status, set, and reconcile. The status mode prints caps for single orders, days, weeks, and months alongside remaining headroom and unreconciled intents. Running set steps through parameters like per_order_max, cooldown_minutes, and allowed_hours. Running reconcile triggers dd-cli order history to verify pending intents against actual receipts, marking matched items as paid and discarded orders as abandoned.

You need the dd-cli tool and the doordash-spend-guard skill with dd-guard.sh installed. The command never deletes entries from ledger.jsonl, modifying only line statuses during reconciliation.

What it helps with

  • check DoorDash spending headroom against daily or monthly caps
  • update per-order caps, cooldown periods, and allowed ordering hours
  • reconcile pending intent records against real receipts using dd-cli
  • clear abandoned order intents without deleting entries from ledger.jsonl

Example prompts for the agent

  • /doordash-budget status
  • /doordash-budget set
  • /doordash-budget reconcile

How to install doordash-budget

1claude-code-templates

npx claude-code-templates@latest --command doordash/doordash-budget

2Manually: put the files in place

.claude/commands/doordash-budget.md

Call it with /doordash-budget. For all projects use ~/.claude/commands/

Questions about doordash-budget

How to install doordash-budget in Claude Code?

Run npx claude-code-templates@latest --command doordash/doordash-budget or place the command file at .claude/commands/doordash-budget.md.

What does doordash-budget do?

It displays spending limits versus actual DoorDash orders, updates budget policies interactively, and verifies pending order intents against order history.

Why are direct writes to limits.json blocked?

The doordash-spend-guard hook intentionally intercepts direct command-line edits to limits.json, enforcing interactive validation and confirmation before saving changes.

Source text

doordash-budget.md · MIT
---
allowed-tools: Bash(dd-cli:*), Bash(bash:*), Bash(cat:*), Bash(jq:*), Bash(mkdir:*), Read, Write, Edit
argument-hint: [status | set | reconcile]
description: View DoorDash spend vs caps, edit the dd-guard spending policy interactively, and reconcile the intent ledger against real order history
---

# DoorDash Budget Manager

Manage the dd-guard spending policy: **$ARGUMENTS**

State: `~/.claude/dd-guard/limits.json` (policy) and
`~/.claude/dd-guard/ledger.jsonl` (spend ledger). This command is the ONLY
sanctioned way to modify `limits.json` — the doordash-spend-guard hook blocks
direct command-line writes to it by design.

## Current State

- Policy: !`cat ~/.claude/dd-guard/limits.json 2>/dev/null || echo "(no policy yet — dd-guard seeds defaults on first run)"`
- Headroom: !`bash .claude/skills/doordash-spend-guard/scripts/dd-guard.sh status 2>/dev/null || echo "(dd-guard.sh not installed — install the doordash-spend-guard skill)"`

## Task

Parse `$ARGUMENTS` and run the matching subcommand:

### `status` (default when no arguments)

Present the dd-guard status output as a friendly table: each cap, spend to
date, headroom left. Note how many ledger entries are unreconciled intents
and remind that subtotals exclude fees/tips.

### `set`

Interactive policy editing:

1. Show the current policy values one by one.
2. Ask the user which value to change and to what
   (`per_order_max`, `daily_max`, `weekly_max`, `monthly_max`,
   `cooldown_minutes`, `allowed_hours.start/end`). Setting a cap to `null`
   removes it.
3. **Confirm the exact new policy with the user before writing** — read back
   the full JSON you intend to save.
4. Write `~/.claude/dd-guard/limits.json` with the Write tool (the hook
   permits interactive edits through this command's flow, not shell
   redirection).

### `reconcile`

Match unpaid intents against reality:

1. Run `dd-cli order history` and list recent orders.
2. For each ledger line with `"status": "intent"`, check whether a matching
   order (by date/restaurant/amount proximity) appears in history:
   - Match found → update the line to `"status": "paid"`.
   - Clearly abandoned (old intent, no matching order) → ask the user, then
     mark `"status": "abandoned"` so it stops counting against caps.
3. Rewrite `ledger.jsonl` preserving all other lines untouched
   (read-modify-write; keep it valid JSONL).
4. Report: N paid, M abandoned, K still pending.

## Rules

- Never change policy values without explicit user confirmation of the final
  JSON.
- Never delete ledger history — reconciliation only flips `status`.
- If the user asks to raise caps mid-session right after a blocked checkout,
  confirm they understand the block reason first (that friction is the
  point of the tool).

© davila7 · MIT · davila7/claude-code-templates

Similar slash commands

Everything for Finance and business →

From the same set804

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor