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.
npx claude-code-templates@latest --command doordash/doordash-budgetWhat 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-budget2Manually: put the files in place
.claude/commands/doordash-budget.mdCall it with /doordash-budget. For all projects use ~/.claude/commands/
Manually: put the files in place
~/.codex/prompts/doordash-budget.mdCall it with /prompts:doordash-budget. Codex marks this format deprecated in favour of skills
Manually: put the files in place
.github/prompts/doordash-budget.prompt.mdManually: put the files in place
.gemini/commands/doordash-budget.tomlGemini stores commands as TOML: the prompt text goes into the prompt field
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