npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

caplyr

v0.3.1

Published

AI Cost Control Plane — budget guardrails, auto-downgrade, and kill switch for AI API calls

Readme

Caplyr

AI Cost Control Plane — Stop runaway API bills automatically.

Caplyr sits between your app and AI providers, controlling how requests execute based on cost constraints. Budget guardrails, auto-downgrade, and kill switch — in 2 lines of code.

Install

npm install caplyr

Quick Start

import Anthropic from "@anthropic-ai/sdk";
import { protect } from "caplyr";

// Wrap your client — everything else stays the same
const client = protect(new Anthropic(), {
  apiKey: "caplyr_...",       // Get yours at https://app.caplyr.com
  budget: 500,                // Monthly cap in dollars
  fallback: "claude-haiku-3-5-20241022",  // Auto-downgrade target
});

// Use exactly as before — Caplyr is invisible
const response = await client.messages.create({
  model: "claude-sonnet-4-20250514",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});

Works with OpenAI too:

import OpenAI from "openai";
import { protect } from "caplyr";

const client = protect(new OpenAI(), {
  apiKey: "caplyr_...",
  budget: 500,
  fallback: "gpt-4o-mini",
});

const response = await client.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "Hello" }],
});

What It Does

| Feature | Description | |---------|-------------| | Budget Guardrails | Daily and monthly caps enforced at the SDK level. Hit the limit → requests are blocked or downgraded. | | Auto Downgrade | When budget threshold is reached, automatically route to a cheaper model. Your app keeps working. | | Kill Switch | One-click emergency stop. Halts all AI API calls instantly. |

Modes

// Alert-only (default): observe and project, don't enforce
protect(client, { apiKey: "...", mode: "alert_only" });

// Cost protect: enforce budget caps and auto-downgrade
protect(client, { apiKey: "...", mode: "cost_protect", budget: 500 });

Configuration

| Option | Type | Default | Description | |--------|------|---------|-------------| | apiKey | string | required | Your Caplyr project API key | | budget | number | — | Monthly budget cap in dollars | | dailyBudget | number | — | Daily budget cap in dollars | | fallback | string | auto | Fallback model for auto-downgrade | | mode | string | "alert_only" | "alert_only" | "cost_protect" | "kill_switch" | | downgradeThreshold | number | 0.8 | Budget % at which downgrade activates | | endpoint_tag | string | — | Custom tag for cost attribution |

Handling Blocked Requests

When a request is blocked, Caplyr throws a structured error:

try {
  const response = await client.messages.create({ ... });
} catch (err) {
  if (err.caplyr) {
    // Caplyr enforcement event
    console.log(err.caplyr.code);        // "BUDGET_EXCEEDED" | "KILL_SWITCH_ACTIVE"
    console.log(err.caplyr.retry_after); // ISO timestamp for next reset
    console.log(err.caplyr.budget_used); // Current spend
  }
}

Shutdown

import { shutdown } from "caplyr";

// Flush pending logs on app exit
process.on("SIGTERM", () => shutdown());

Links

License

MIT