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

@vaibot/circuit-breaker-openclaw-plugin

v0.2.2

Published

OpenClaw plugin that enforces VAIBot governance decisions with a multi-source decision chain and circuit-breaker fallback.

Readme

@vaibot/circuit-breaker-openclaw-plugin

OpenClaw Gateway plugin that enforces VAIBot governance decisions on every tool call — with a local circuit breaker that keeps protection active even when the API is unreachable.

VAIBot classifies each tool call against your governance policy and returns an allow, deny, or approval-required decision before the tool executes. Every decision creates a tamper-evident receipt with on-chain provenance anchoring.

Plugin vs. MCP server

VAIBot also ships an MCP server that exposes governance tools Claude can call voluntarily. The plugin and the MCP server are complementary — they serve different roles:

| | MCP server | This plugin | |---|---|---| | Agent queries policy / status | ✓ | ✗ | | Agent approves actions in-session | ✓ | ✓ | | Enforcement happens before execution | ✗ | ✓ | | Agent can skip or bypass the check | ✓ | ✗ | | Audit trail the agent can't forge | ✗ | ✓ | | Circuit breaker when API is unreachable | ✗ | ✓ |

The MCP server gives the agent a way to query and interact with VAIBot. The plugin is what makes governance mandatory — the check happens at the gateway level before the tool executes, regardless of what the agent does. If the goal is a tamper-evident audit record or blocking a misbehaving agent, the plugin is the enforcement layer that actually enforces it.

Most deployments use both: the plugin for mandatory pre-execution enforcement, the MCP server so the agent can surface policy context and manage approvals in-session.

Install

openclaw plugins install @vaibot/circuit-breaker-openclaw-plugin
openclaw gateway restart

No API key required. On first run the plugin auto-provisions a free-tier account using a machine fingerprint and saves credentials to ~/.vaibot/credentials.json.

What you see at runtime

Allowed tool — passes through silently.

Denied tool — the agent receives the policy reason and reports it:

VAIBot denied: exec is not permitted in this workspace.

Approval required — the agent is blocked and prompted with instructions:

VAIBot: 'Bash' requires approval.
content_hash: sha256:a3f9c1...
Approve in the dashboard or run: /vaibot approve sha256:a3f9c1...

Once approved, the agent retries the action automatically.

Decision chain

Each tool call walks this chain in order, stopping at the first source that responds:

vaibot-guard (local skill) → VAIBot MCP → VAIBot API → circuit breaker
  • vaibot-guard — a local skill running at localhost:39111. Fastest; no network hop. Optional — the plugin works without it.
  • VAIBot MCP — cloud policy evaluation via the MCP endpoint.
  • VAIBot API — direct REST fallback.
  • Circuit breaker — takes over when all upstream sources are unreachable (see below).

You can shorten the chain in config — e.g. "decisionChain": ["api"] to skip guard and MCP.

Circuit breaker

When upstream sources fail 3 times within 10 seconds, the breaker trips and the plugin makes decisions locally until services recover (60 second cooldown, then auto-retry).

While tripped, tools are classified into three groups:

| Classification | Default tools | Behaviour | |---|---|---| | Allowlist | read, web_fetch | Pass through automatically — low risk | | Gate | everything else | Held for your approval — dangerous actions are gated, not killed | | Denylist | (empty) | Hard blocked — operator-configured for tools that must never run |

The key design principle: VAIBot gates dangerous actions, it doesn't freeze the agent. exec, write, sessions_send, and message.send all require human approval during a breaker trip, but the agent can continue once you approve. The denylist exists as an escape hatch for operators who need to categorically prohibit specific tools in their deployment — it is empty by default.

For unknown tools, the agent receives:

Circuit breaker active — 'browser' needs approval.
Approve: /guard approve breaker:a3f9c1b8e2d7f041
Deny:    /guard deny breaker:a3f9c1b8e2d7f041

After approving, you'll be asked whether to add it to your permanent allowlist:

'browser' was approved during a circuit breaker trip.
Add to permanent allowlist? /vaibot allowlist add browser

Slash commands

/vaibot

| Command | Description | |---|---| | /vaibot approve <content_hash> | Approve a pending tool call via VAIBot API | | /vaibot deny <content_hash> | Deny a pending tool call via VAIBot API | | /vaibot allowlist add <tool> | Add a tool to the breaker allowlist permanently | | /vaibot allowlist list | Show config and runtime allowlist entries | | /vaibot allowlist skip | Dismiss the allowlist prompt without adding | | /vaibot help | Show all subcommands |

/guard

| Command | Description | |---|---| | /guard approvals | List pending guard approvals | | /guard approve <approvalId> | Approve a guard or breaker-held tool call | | /guard deny <approvalId> | Deny a guard or breaker-held tool call |

Configuration

All settings are optional. Override in ~/.openclaw/openclaw.json:

{
  "plugins": {
    "entries": {
      "circuit-breaker-openclaw-plugin": {
        "enabled": true,
        "config": {
          "mode": "enforce",
          "decisionChain": ["guard", "mcp", "api", "breaker"]
        }
      }
    }
  }
}

Key options

| Option | Default | Description | |---|---|---| | mode | "enforce" | "enforce" blocks; "observe" logs without blocking | | decisionChain | ["guard","mcp","api","breaker"] | Sources in priority order | | failClosedOnError | true | Deny when all sources fail | | guardBaseUrl | http://127.0.0.1:39111 | Local vaibot-guard URL | | mcpBaseUrl | https://api.vaibot.io/v2/mcp | VAIBot MCP endpoint | | apiBaseUrl | https://api.vaibot.io | VAIBot API endpoint | | autoBootstrap | true | Provision a free account on first run if no key found | | breakerAllowlist | ["read","web_fetch"] | Auto-approved tools when breaker trips | | breakerDenylist | [] | Hard-blocked tools when breaker trips — empty by default; all other tools are gated for human approval | | breakerFailureThreshold | 3 | Failures before breaker trips | | breakerWindowMs | 10000 | Failure counting window (ms) | | breakerCooldownMs | 60000 | Time before breaker auto-clears (ms) | | timeoutMs | 15000 | Per-request timeout (ms) | | decisionCacheTtlMs | 5000 | Cache allow decisions for this many ms | | approvalAutoRetry | true | Automatically retry approved actions |

Environment variables

Set in ~/.openclaw/.env or your service environment:

| Variable | Purpose | |---|---| | VAIBOT_API_KEY | Bearer token for MCP + API fallback (auto-provisioned if absent) | | VAIBOT_GUARD_TOKEN | Auth token for local guard service | | VAIBOT_API_BASE_URL | Override API base URL | | VAIBOT_GUARD_BASE_URL | Override guard base URL | | VAIBOT_CREDS_DIR | Override credentials directory (default: ~/.vaibot) |

Modes

enforce (default) — tool calls are blocked when the policy says deny or approval_required.

observe — all tool calls proceed, but the policy verdict is logged. Useful for auditing before enabling enforcement.

{ "config": { "mode": "observe" } }

Community & support

Join the VAIBot Discord — get help, share feedback, and connect with other users.

VAIBot is in early access. If you're installing this plugin now, you're among the first operators putting verifiable AI governance into production. Early community members shape the roadmap directly — feature requests, policy design, and integration patterns all come from conversations in Discord.

To become a founding member, join the Discord and introduce yourself in #founding-members. Founding members get:

  • Direct access to the VAIBot team
  • Early previews of upcoming governance features
  • Input on default policy design and circuit breaker defaults
  • Recognition in the project

Uninstall

openclaw plugins uninstall circuit-breaker-openclaw-plugin
openclaw gateway restart

Local dev install

When installing from a local path or tarball, OpenClaw's safety scanner may flag the plugin because it reads environment variables and makes network calls (expected behaviour for a governance plugin). Use --dangerously-force-unsafe-install to acknowledge this:

openclaw plugins install --dangerously-force-unsafe-install ./vaibot-circuit-breaker-openclaw-plugin-0.2.2.tgz
openclaw gateway restart
openclaw plugins inspect circuit-breaker-openclaw-plugin