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

@fidacy/openai-agents

v0.3.0

Published

Gate OpenAI Agents SDK tool calls behind a signed Fidacy verdict. Wraps the tool's execute, so a denied payment never runs and the agent gets a refusal it can reason about.

Downloads

969

Readme

@fidacy/openai-agents

Gate OpenAI Agents SDK tool calls behind a signed Fidacy verdict. A denied payment never executes.

npm i @fidacy/openai-agents @openai/agents
import { guardTools } from "@fidacy/openai-agents";

// No key, no signup: the offline judge decides your first 20 calls.
const tools = guardTools([payTool, searchTool]);
// payTool is now assessed before every call. searchTool is returned untouched.

Two ways it decides

Offline, out of the box. With no credential the deterministic local judge runs: deny-by-default, your own limits, a hash-chained log on your machine. The first 20 decisions on an install are free and need no account, so you can watch a payment get blocked before deciding whether you want any of this.

Set the limits that fit your case:

const tools = guardTools([payTool], {
  mandate: { payees: ["acme-inc"], perTxMax: 5_000, maxTotal: 50_000 },
});

A blocked call tells you what was stopped, in money terms, and prints the exact edit that would allow it.

Hosted, with an account. Pass apiKey and the engine decides instead, returning a verdict signed with a stable key that anyone can verify against the public JWKS, plus a Bitcoin-anchored audit chain that outlives your process.

Free key, no card: https://fidacy.com/claim

Where it hooks in

The SDK's function tools expose invoke(runContext, input), where input is the raw JSON string the model produced. Replacing invoke is the only spot between the model deciding to pay and the money moving. The SDK's own guardrails run around the agent turn, not around this call, and needsApproval puts a human in the loop rather than a policy.

Fail-closed

If the engine is unreachable, the key is wrong, or the request times out, the call is refused, never executed. review also blocks by default; set reviewIsDeny: false to let it through.

Refusal, not a crash

By default a blocked call returns a refusal string the model can read, so the agent explains what happened instead of dying with a stack trace. The payment still did not run.

Fidacy deny for send_payment (risk score 97, assessment as_1). Nothing was
executed. Tell the user the payment was blocked by their firewall and quote the
assessment id.

Set throwOnDeny: true for a hard stop that throws FidacyDenied with the signed proof (verdict.riskPayloadJws, verifiable offline with @fidacy/verify).

Options

| Option | Default | What it does | | --- | --- | --- | | apiKey | FIDACY_ENGINE_API_KEY | Engine credential. Omit it to stay offline | | mandate | none | Offline limits: payees, perTxMax, maxTotal, currency | | engineUrl | https://api.fidacy.com | Engine base URL | | client | built from apiKey | Bring your own @fidacy/sdk client | | isPayment | name heuristic | Which tools guardTools gates | | toMandate | payee/amount/currency + raw args | Build the mandate the engine assesses | | reviewIsDeny | true | Whether review blocks | | throwOnDeny | false | Throw instead of returning a refusal | | onDecision | none | Observe every decision, including approvals |

The wrapped tool keeps name, description, parameters and strict, so the model and the runner see the same function tool.

zod 4: @openai/agents requires zod ^4. This package does not depend on zod itself, so it works with whatever version the SDK pulls in.

Anonymous telemetry

The adapter reports anonymous usage so we can tell which surfaces are alive: an install marker, an "agent active" ping, the result class of local decisions (allow, deny_payee, deny_cap and so on) and the moment the free-trial wall is shown. Every field is a closed enum. It never carries payees, amounts, currencies, tool arguments or any content, and it never sits on the path of a decision: failures are swallowed and nothing blocks.

Disable it entirely with:

export FIDACY_DISABLE_TELEMETRY=1

The anonymous id lives in ~/.fidacy/config.json, shared with @fidacy/mcp, so the free-decision counter and a later account claim stay consistent across Fidacy tools on the same machine.

Apache-2.0 · https://fidacy.com