Guardrails for Cursor, built from your own rules.
Your company's rules reach Cursor before every edit. What it must never do is blocked before it runs.
npx -y @cybedefend/vibedefend@latest install
Cursor is writingbilling/refund.ts
export async function refund(req: Request) { const { id, amount } = await req.json(); const invoice = await db.invoices.find({ id, tenant: req.tenant, }); if (amount > 500) await approvals.second(invoice); return payments.refund(invoice, amount); }
Every query is scoped to the tenant.
rules/data-access.mdRefunds above €500 need a second approver.
Approved once by Sofia M.Checked before the commit: clean
Set up in four steps.
- Run one commandIn any terminal, on macOS, Linux or Windows. Node 18.17 or later.
- Choose your region, sign inEU or US. Your browser opens to sign in, no key to paste.
- Tick CursorThe installer finds the agents on your machine and ticks them for you.
- Code as usualOpen Cursor 1.7 or later: VibeDefend runs alongside it.
What VibeDefend adds to Cursor.
Rules served
Your business and security rules reach Cursor before each edit.
Cursor is writingsrc/billing/cart-checkout.ts
const total = new Decimal128(cart.sum); const rows = await db.query( "SELECT * FROM carts WHERE id = $1", [id] );
Monetary amounts use Decimal128, never Number.
Mined from src/billing.ts:14Parameterise every query that mixes user input.
OWASP Top 10Served before the edit
Secret guard
Raw secret reads are refused; Cursor gets the managed reference instead.
Cursorwebhooks.ts
cat .env | grep STRIPEBlocked: raw secret read
Instead
process.env.STRIPE_WEBHOOK_SECRETnpm test -- webhooksTests pass
Logged for the team
Action guard
Destructive commands, schema drops and protected paths are stopped before they run.
Cursor
rm -rf dist/Allowed: build output
rm -rf .cache/Allowed: cache
rm -rf ./storage/uploadsBlocked: protected path, user uploads
Logged for the team
Live findings
SAST, SCA, secrets, IaC and CI/CD findings, live in the session.
Cursor
SAST
src/db/users.repo.ts:42SQL injection
SCA
package.jsonlodash 4.17.20, CVE-2021-23337
Secrets
config/prod.ymlAWS access key
IaC
infra/main.tfS3 bucket public-read
CI/CD
.github/workflows/deploy.ymlpull_request_target
In the agent's context, live
Your questions.
Does VibeDefend change my Cursor configuration?
~/.cursor/hooks.json, ~/.cursor/mcp.json. Your own hooks stay: re-running the installer only replaces VibeDefend's entries.What leaves my machine?
Which version of Cursor do I need?
Do I need to link each repository?
vibedefend link once. It writes .cybedefend/config.json with the project ID.How do I remove it?
vibedefend uninstall: it removes every file VibeDefend installed. If you installed the package globally, then run npm uninstall -g @cybedefend/vibedefend.Cursor rules or VibeDefend: what's the difference?
Technical details for Cursor
- MCP server
- Available
~/.cursor/mcp.json - Rules before each edit
- Available
preToolUseEdit|Write|MultiEdit - Dangerous actions blocked
- Available
preToolUse - Rules loaded at start
- Available
sessionStart - End-of-session review
- Available
stop - Review of long sessions
- Available
preCompact - Reminder on every prompt
- Not availableNo equivalentNot available in Cursor.
What it writes for Cursor
~/.cursor/hooks.json~/.cursor/mcp.json
And the hook runner in ~/.cybedefend/. Your own hooks stay: re-running the installer only replaces VibeDefend's entries.
Cursor 1.7 or later: earlier versions ignore hooks.json. If the cursor command is not on your PATH, the installer cannot read the version and wires the hooks anyway, so check it yourself.
A hook that fails does not block you. Only a deny verdict from the guard stops a tool call.
Something off? vibedefend status gives a read-only report, and vibedefend doctor repairs what it can.