@letagentpay/ai
v0.1.1
Published
LetAgentPay tools for Vercel AI SDK — spending governance for AI agents
Maintainers
Readme
@letagentpay/ai
LetAgentPay tools for Vercel AI SDK — spending governance for AI agents.
Installation
npm install @letagentpay/ai ai zodQuick Start
import { generateText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";
import { createLetAgentPayTools } from "@letagentpay/ai";
const tools = createLetAgentPayTools({ token: "agt_..." });
const { text } = await generateText({
model: anthropic("claude-sonnet-4-20250514"),
prompt: "Buy the cheapest weather API plan",
tools,
});Tools
| Tool | Description |
| --- | --- |
| requestPurchase | Request approval to spend money (call BEFORE any purchase) |
| checkBudget | Check current budget, spent, held, and remaining |
| listCategories | List valid spending categories |
| myRequests | List recent purchase requests (optionally filtered by status) |
| confirmPurchase | Confirm or report failure after completing a purchase |
Configuration
// Token from parameter
const tools = createLetAgentPayTools({ token: "agt_..." });
// Token from LETAGENTPAY_TOKEN env var
const tools = createLetAgentPayTools();
// Self-hosted instance
const tools = createLetAgentPayTools({
token: "agt_...",
baseUrl: "https://your-instance.com/api/v1/agent-api",
});Using Individual Tools
import { createRequestPurchaseTool, createCheckBudgetTool } from "@letagentpay/ai";
import { LetAgentPay } from "letagentpay";
const client = new LetAgentPay({ token: "agt_..." });
const tools = {
purchase: createRequestPurchaseTool(client),
budget: createCheckBudgetTool(client),
};How It Works
- Agent decides it needs to make a purchase
- It calls
requestPurchasewith amount, category, merchant, and description - LetAgentPay checks the request against spending policies (budget limits, category restrictions, daily/weekly/monthly caps, schedule)
- Tool returns the decision: auto_approved, pending (needs human review), or rejected
- Agent proceeds only if approved, adapts if rejected
Streaming
Works with streamText the same way:
import { streamText } from "ai";
const result = streamText({
model: anthropic("claude-sonnet-4-20250514"),
prompt: "Find and buy a domain name under $15",
tools,
maxSteps: 5,
});
for await (const part of result.textStream) {
process.stdout.write(part);
}