NIBVOK AI SecurityFree · MIT-0

Your agent decides.
Something should
decide about that.

AI agents act — they delete files, push code, drop tables, spend money. This is the layer that judges each action before it runs and answers one question: allow, confirm, or deny?

Runs in production on the author's own agent · v0.1.0

allow Runs silently. Ordinary work — tests, linters, builds — never prompts.
allow-log Runs, and is recorded. Artifact writes, allowlisted API calls, every outbound message.
confirm Stops and asks you. Destructive deletes, force-push, database drops, anything at or above $500.
deny Refused outright. Wiping the filesystem root, reading secrets, disabling the guard itself.
Why it exists

Most AI governance is a report.
This is a gate.

Platforms ship two things that look like policy — and neither can express the sentence that actually matters.

🗑

Tool allowlists match names only

They can block the exec tool. They cannot allow pytest while blocking git push --force — both are the same tool.

🎫

One global posture

A single mode applies to every command equally. It has no way to say “this one is fine, that one is not”.

📊

Audit-only tools don't stop anything

Config-drift auditors tell you what changed after the fact. Useful — but they are not an enforcement point.

The sentence that matters

“Confirm the force-push, deny the recursive wipe, and let the test suite run silently.” That needs the command text, judged per call.

Coverage

What it actually governs

Every rule is compiled into the classifier and unit-tested. Deny is for catastrophic; confirm is for genuinely risky but sometimes legitimate.

ProtectedFires whenDecision
Filesystem rootrm -rf / or rm -rf /*deny
System directorieswhole-tree wipe of /etc /root /var /usr /bin /boot …deny
Secrets & keyssecrets*, any *.env, .ssh/, *-key.pem, private keysdeny
Runtime config & stateopenclaw.json, credentials, state, secret-egress proxydeny
Secret read-backreading a stored secret value back outdeny
The guard itselfdisable / remove / re-consent, config writes, policy resetdeny
System pathswriting into /etc /usr /bin /sbin /lib /boot …deny
Destructive deleteany other rm (bounded cleanup is logged instead)confirm
Destructive gitforce-push, reset, clean -fd, branch -D, checkout -- .confirm
Database dropDROP TABLE/DATABASE, dropdb, pg_restore --cleanconfirm
Spend ceilingany transaction at or above $500 — never session-trustedconfirm
Outside-workspace writeswrite, copy or move outside the allowed rootsconfirm
Outbound messagesevery send from the agentallow-log
Allowlisted APIsnetwork calls to pre-approved hosts onlyallow-log
Ordinary worktests, linters, type-checks, buildsallow

Full rule-by-rule reference ships with the plugin as POLICY.md.

How it works

One hook, one pure decision, one audit line.

01

It sits in the request path

A single before_tool_call hook sees every tool call — the command, the paths, the parameters — before anything executes.

tool callclassifydecide
  • reads verb + resolved path, not just a tool name
  • normalises .. and ~ before matching
  • file-mutating tools judged by target path
4decisions, per call
02

The classifier is a pure module

No imports, no Gateway, no state. That is deliberate: it makes the rules inspectable and testable without a live call — and it is why the whole rule set can be proven by a test suite.

SuiteProvesResult
classifierdecision logic per rule236 passed
hookthe real handler blocks / confirms / allows21 passed
session trusttrust is bounded to one class27 passed

0 failures · runnable with no Gateway

03

Every decision is written down

One JSON line per tool call — valid JSONL, safe to ship to a log pipeline. Logging failures never block a call: governance must not fail closed on a write error.

{"ts":"2026-09-18T17:26:50.615Z",
 "product":"nibvok",
 "action":"deny",
 "tool":"exec",
 "reason":"read of protected secret material",
 "cmd":"cat /root/.openclaw/openclaw.json"}
Stated plainly

What it does not do

A guard that overstates itself is worse than none. These are the real limits.

Free & open source

Put a gate in front of the agent.

The plugin is free under MIT-0 — use, modify, and redistribute it with no attribution requirement. For teams that want policies tuned to their environment, audit trails reviewed, or incident response, the author offers paid advisory engagements.

NIBVOK AI Security is part of NIBVOK · [email protected]