Developers
One call. Before the action.
Text, tools, and side effects stay in your agent. Vulnify sees who, what, where, and how many, and answers ALLOW, REVIEW, or BLOCK.
Install the SDK.
Node and Python, on npm and PyPI. The npm package includes the CLI.
npm install @vulnify/sdkpip install vulnifypip install "vulnify[cli]"
import { Vulnify } from '@vulnify/sdk';
const vulnify = new Vulnify({
apiKey: process.env.VULNIFY_API_KEY,
});
await vulnify.guard(
{
agent: 'sales-copilot',
action: 'EXPORT_DATA',
resource: 'crm.contacts',
destination: 'EXTERNAL_EMAIL',
recordsAffected: 48120,
},
() => exportContacts(),
);BLOCKResponse · 91 / 100
{
"decision": "BLOCK",
"riskScore": 91,
"reasons": [
"Bulk export of personal data",
"Destination outside the policy"
]
}Policies live in git.
One YAML file per policy, kept in git and reviewed like code. Three commands:
policies pullWrites one YAML file per policy.GET /v1/policiespolicies apply --dry-runPlans the change and writes nothing.POST /v1/policies/applytest --localRuns the cases. A failing case exits 1, so CI can run it.POST /v1/policies/test
npm install @vulnify/sdknpx -p @vulnify/sdk vulnify policies pull --out vulnify/policiesnpx -p @vulnify/sdk vulnify policies apply --dry-runnpx -p @vulnify/sdk vulnify test --localWhat you send.
- Metadata, not recordsAgent, action, resource, destination and a count.
- Bearer keyCalls go to https://api.vulnify.io. A retry sends an Idempotency-Key.
- Test keysDecide inside a sandbox, away from production credentials.
- Score and fail closedA 0–100 score and the reasons. Unreachable means the action does not run, unless you choose fail open.
The secret stays in the vault.
With the beta gateway, Vulnify decides and forwards the call, and injects the credential only on ALLOW. The agent never holds the secret. A fully transparent gateway, where the agent only changes its base URL, is not built yet.