noburn sits between your code and the LLM API. Before every call it checks your spend, enforces budgets, and blocks requests that would push you over — returning a structured response your code can handle instead of firing the expensive API call.
Using Claude Code or another AI coding agent? Install the noburn skill and let your agent wire it in for you:
npx skills add noburn-dev/skills
Then ask it to "add budget guardrails to my LLM app." Framework-specific variants are included — --skill noburn-vercel-ai (Vercel AI SDK) and --skill noburn-langchain (LangChain, Python + JS).
When noburn blocks a call, your code receives a check object with:
blocked: true
blockReason — why it was blocked ("budget_exceeded", "user_budget_exceeded", "run_budget_exceeded", "policy_rule", "plan_limit_exceeded")
spendUsd — current monthly spend at time of block
budgetCapUsd — the cap that was hit
Your application decides what to show the user. Common patterns:
if check.blocked: if check.block_reason == "budget_exceeded": return {"error": "Service temporarily unavailable. Try again tomorrow."} elif check.block_reason == "user_budget_exceeded": return {"error": "You've reached your AI usage limit. Upgrade to continue."}