The exact install we ran
This fresh scratch install resolved AgentGuard Spend 0.15.13, OpenAI 6.49.0, and the SDK's local Ed25519 dependency. Use Node 20.19 or newer.
The binding point is the OpenAI-compatible client you already use for OpenRouter:
Every call must use client, not raw. Keep the raw client private to the module so a caller cannot bypass the guard.
Three real outcomes
We ran the published OpenRouter adapter against a local OpenAI-compatible endpoint. That exercised the actual request wrapper without spending against or probing a third-party account. The dispatch counter was placed on the raw client below the guard.
Offline verification
The signing key, policy, decisions, and receipt chain stayed inside the scratch process. AgentGuard adds no vendor data plane. OpenRouter still receives the allowed provider request, as it must; it receives no blocked request.
What makes this a real bound
Both refusal cases showed dispatched=0. The wrapper throws before the raw client's network method runs. That is stronger than asking an agent to consult a tool. It remains your responsibility to expose only the guarded client to the rest of your application.
- spend cap
- hard preflight
- capability ceiling
- hard preflight
- blocked dispatches
- zero
- offline chain
- valid, tamper rejected
Run the exact harness at scripts/adoption-smoke/sdk-openai-compatible.mjs. The npm package is @agentguard-run/spend.