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

@radware/codex-radware-agentic-protection

v0.2.0

Published

Protect OpenAI Codex with Radware Agentic AI Protection - AI Guardrails on prompts and Behavioral Protection on tool calls, enforced before they execute

Readme

OpenAI Codex x Radware Agentic AI Protection

Protect OpenAI Codex with Radware Agentic AI Protection. Every prompt is checked before the model sees it, and every tool call is checked before it executes. Each decision produces a Radware Event ID you can trace in the portal.

Installed once per machine, it applies to every Codex session and every new chat automatically.

Install - npm (recommended)

npx @radware/codex-radware-agentic-protection install --name "Your Name"

Then start Codex once and choose "Trust all and continue" when it asks to review hooks.

This is the recommended route: nothing to clone, the runtime is copied to a stable location so the hook cannot break if you move or delete a folder, and upgrades are a single command.

Alternative - from this repository

Use this if npm is unavailable, or if you want to run from source:

git clone https://github.com/Radware/codex-radware-agentic-protection.git
cd codex-radware-agentic-protection
python install.py --name "Your Name"

Both routes install the same hooks and behave identically. The difference is only how the files get onto the machine - with the repository route, keep the folder where it is, because Codex stores the hook path in its configuration.

Full walkthrough: docs/customer-guide.md, also available as a Radware-branded document, Codex-Radware-Integration-Guide.docx.

How it works

Codex exposes native lifecycle hooks. This connector registers two of them:

| Codex event | Radware stage | Effect | |---|---|---| | UserPromptSubmit | AI Guardrails | An unsafe prompt is refused before the model sees it | | PreToolUse | Behavioral Protection | A malicious tool call is denied before it runs |

Enforcement is out-of-path: the hook calls Radware, Radware returns a verdict, and Codex honours it. Your model path is untouched, so Codex keeps using whatever model it normally uses.

PostToolUse and the other lifecycle events cannot block and are never sent for a verdict.

What is covered

| Surface | Covered | |---|---| | Codex CLI | Yes | | Codex desktop app | Yes | | Codex IDE extension (VS Code) | Yes | | codex exec (scripts, CI) | Yes | | Codex Cloud / web | No - runs in OpenAI's cloud, where no local hook exists |

This integration is for Codex. It does not apply to ChatGPT Chat or ChatGPT Work.

Requirements

  • Codex 0.145 or newer - lifecycle hooks do not exist before this
  • Python 3.8 or newer
  • A Radware out-of-path Homegrown Agent key (sk-rdwr-...)

A machine can carry more than one Codex engine - the desktop app ships its own, and older engines can remain after an update. The installer finds them all, targets the newest, and reports any it cannot protect.

Managing it

With npm:

npx @radware/codex-radware-agentic-protection status
npx @radware/codex-radware-agentic-protection install --key sk-rdwr-...   # rotate the key
npx @radware/codex-radware-agentic-protection uninstall
npx @radware/codex-radware-agentic-protection uninstall --purge           # also delete the key

From the repository, the same operations are:

python install.py --status
python install.py --key sk-rdwr-...
python install.py --uninstall
python install.py --uninstall --purge

Restart Codex after installing or uninstalling - a running session keeps hook configuration in memory.

Enterprise deployment

Administrators can enforce the integration on every endpoint so users cannot disable it, by deploying requirements.toml with allow_managed_hooks_only = true:

  • Windows: %ProgramData%\OpenAI\Codex\requirements.toml
  • macOS and Linux: /etc/codex/requirements.toml

With that setting Codex ignores user, project and session hook configuration and runs only the administrator's hooks. See the customer guide for the full file and rollout notes.

Configuration

Settings live in ~/.radware/codex-hook.json (permissions 0600), because the desktop app is launched from the Start menu or Dock and does not inherit environment variables. Environment variables take precedence where set.

| Setting | Environment variable | Default | |---|---|---| | API key | RADWARE_OUT_OF_PATH_API_KEY | - | | Identity | RADWARE_USER_IDENTIFIER | username + host | | Fail mode | RADWARE_FAIL_MODE | close | | Timeout | RADWARE_TIMEOUT_SECONDS | 20 | | Radware host | RADWARE_HOST | production | | Diagnostics | RADWARE_DEBUG | off |

Fail mode defaults to close: if Radware cannot be reached, the action is blocked rather than allowed through unchecked.

Validation

Validated end to end on Windows, macOS and Linux, with every block correlated to a Radware Security Event. See docs/validation.md. The macOS checks run in CI on every change (workflow).

python -m pytest tests -q

Repo layout

Getting a key

Create the agent at console.radwarecloud.com: Agentic -> + -> Homegrown Agent -> Out-of-Path. The key is shown exactly once.

Security

See SECURITY.md. In short: the key is stored locally with restricted permissions, sent only to Radware, and never written to logs. Prompts and proposed tool calls are sent to Radware for inspection - that is how the protection works, and it should be confirmed against your data-handling policy before wide deployment.

License

MIT - see LICENSE.