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

kalguard-sdk

v1.0.3

Published

KalGuard SDK - one-line secure integration for AI agents (prompt check, tool check)

Readme


kalguard-sdk is the lightweight HTTP client agents use to talk to the KalGuard sidecar. It exposes a typed client (KalGuardClient) plus two convenience wrappers (withPromptCheck, withToolCheck) that turn security mediation into a single line of code.

Most users should install the umbrella kalguard package, which re-exports everything in this SDK. Install kalguard-sdk directly if you want to pin only the client surface.

Install

npm install kalguard-sdk
# or
pnpm add kalguard-sdk

You also need:

  • A running kalguard-sidecar reachable over HTTP.
  • An agent bearer token signed with the sidecar's KALGUARD_TOKEN_SECRET. Issue one with createAgentToken(...) from kalguard-core.

Quick Start

import { KalGuardClient, withPromptCheck, withToolCheck } from 'kalguard-sdk';

const guard = new KalGuardClient({
  baseUrl: 'http://localhost:9292',
  token: process.env.KALGUARD_AGENT_TOKEN!,
});

const messages = [
  { role: 'system', content: 'You are a helpful assistant.' },
  { role: 'user',   content: userInput },
];

const reply = await withPromptCheck(guard, messages, async (safe) => {
  return await llm.chat(safe);          // only runs if policy allows
});

const weather = await withToolCheck(guard, 'get_weather', { location: 'NYC' }, async () => {
  return await tools.getWeather('NYC'); // only runs if policy allows
});

If the sidecar denies the request the wrapper throws; your agent never invokes the LLM or the tool. If the prompt firewall sanitizes the input, the wrapper hands you the cleaned safe messages.

API

class KalGuardClient

new KalGuardClient(options: KalGuardClientOptions)

| Option | Type | Required | Description | |--------------|----------|----------|-------------| | baseUrl | string | yes | Sidecar URL, e.g. http://localhost:9292. Trailing slash is stripped. | | token | string | yes | Agent bearer token (HMAC-signed; verified by the sidecar). | | requestId? | string | no | Default correlation id. Per-call ids override this. |

client.checkPrompt(messages, requestId?)

Calls POST /v1/prompt/check. Returns:

SecurityResponse<{
  allowed: boolean;
  riskScore?: number;
  riskLevel?: 'low' | 'medium' | 'high' | 'critical';
  sanitizedMessages?: ReadonlyArray<PromptMessage>;
}>

client.checkTool(toolName, args, requestId?)

Calls POST /v1/tool/check. Returns SecurityResponse<{ allowed: boolean }>.

withPromptCheck(client, messages, run)

Convenience wrapper:

  1. Calls client.checkPrompt(messages).
  2. If allowed, invokes run(sanitizedMessages ?? messages) and returns the result.
  3. If denied, throws an error carrying the policy reason — your agent must surface this to the caller, not retry.

withToolCheck(client, toolName, args, run)

Same shape for tool invocations.

Error model

All wrapper rejections include:

  • name: 'KalGuardDenied'
  • reason: human-readable string from policy
  • requestId: correlation id (also returned in the x-kalguard-request-id response header)

Treat denials as terminal — never silently fall through to an unguarded path.

Compatibility

  • Node.js: 20+ (relies on global fetch).
  • Module format: ESM only.
  • Browser / edge runtimes: not supported. Tokens are sensitive and must stay server-side.

Related packages

License

Apache-2.0 © KalGuard Contributors


Part of the Infrarix AI Infrastructure ecosystem