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

caitlyn

v0.6.0

Published

CAITLYN Security Guardian Agent — interactive defense agent for LLM agent protection

Readme

CAITLYN

CAITLYN is an adaptive security middleware for LLM agents. It scans untrusted content through a fast executable-skill layer and a context-sensitive LLM layer, and can synthesize verified defense skills from new counterexamples.

Full documentation, architecture, evaluation results, and limitations are available in the project repository.

Install

CAITLYN requires Node.js 22.19 or newer.

Install the command-line interface globally:

npm install -g caitlyn
caitlyn status
caitlyn

The package also installs caitlyn-hook, which is used by supported agent integrations.

For project-local use:

npm install caitlyn
npx caitlyn status

Tier 0 scanning works without an API key. Tier 1 and defense synthesis require a supported model provider. The guided setup writes provider, Agent, detection, and privacy settings only after a final confirmation. Privacy protection stays off unless that setup enables it and chooses standard or strict:

caitlyn setup

caitlyn setup --no-connection-test skips the live API probe. /setup in the TUI runs the same flow. Alternatively, export a provider key:

export OPENROUTER_API_KEY="your-key"

Protect an agent

caitlyn detect
caitlyn install --dry-run codex
caitlyn install codex
caitlyn daemon start
caitlyn watch --status

Supported adapters include Claude Code, Codex, OpenCode, Hermes, OpenClaw, and Pi Coding Agent. Configuration changes are backed up before installation.

Commands

| Command | Purpose | | --- | --- | | caitlyn or caitlyn tui | Open the full-screen terminal interface | | caitlyn scan <content> | Scan content | | caitlyn status | Inspect the defense and attack libraries | | caitlyn detect | Detect supported agents | | caitlyn setup | Guided provider, Agent, and detection setup | | caitlyn install <agent> | Install an agent integration | | caitlyn uninstall <agent> | Remove an integration and restore its backup | | caitlyn daemon start\|stop\|status | Manage the local daemon | | caitlyn synthesize <pattern> | Submit a System II trigger | | caitlyn update --check | Check for a newer release |

Library use

The package exposes its scanner and filesystem-native defense library:

import {
  createUnavailableLlmCall,
  loadDefenseSkills,
  loadAttacks,
  scan,
} from "caitlyn";

const result = await scan({
  defense skills: loadDefenseSkills(),
  attacks: loadAttacks(),
  content: "untrusted content",
  llmCall: createUnavailableLlmCall("Tier 0 only"),
});

License

MIT