Kelp
§ 00Open source · MIT

Security scans
for vibe-coded apps.

Kelp finds hardcoded secrets, permissive Supabase RLS, and unauthenticated edge functions — the classes that actually breach AI-generated apps. Run it in one command.

$ npx @kelp-security/cli scan .
scan/roamly-app
4 specialists · streaming
13:04:12[postgrest]probing rls on public schema…
13:04:12[edge-fn]listing functions… found 6
13:04:13[auth]reading supabase config.toml
13:04:13[secrets]walking src/… 214 files
13:04:14[postgrest]profiles.email — READ open to anon
13:04:14[edge-fn]get-order verify_jwt=false
13:04:15[secrets]VITE_SERVICE_ROLE at src/lib/db.ts:14

Excerpt from an actual scan · nothing invented

§ 01Coverage

Small on purpose.
Every finding reproduces.

SEC-001

Hardcoded secrets

Provider patterns + entropy fallback across the source tree. Client-side secrets are severity-bumped.

RLS-002

Permissive Supabase RLS

Reads schema + policies, flags tables open to anon. Fixes ship as reviewable migrations.

EDGE-003

Edge functions skipping JWT

Detects verify_jwt=false, replays without a token, records the response.

AUTH-004

CORS and auth flow gaps

Permissive origins, missing rate-limits on password reset, open redirects.

§ 02Run it

Three surfaces.
Same engine.

01 · CLI

Local scans.

One command, no signup, no keys. Same engine everywhere else.

$ npx @kelp-security/cli scan .
Quickstart →
02 · GitHub Action

Gate every PR.

Fails the check when a PR introduces new critical or high findings.

- uses: kelp-security/
   kelp-action@v1
Action docs →
03 · Hosted app

Continuous scan.

Connect a repo once. Dashboards, history, chat per finding, fix PRs.

# sign in with GitHub
Open hosted app →
§ 03New · MCP server

Your AI calls Kelp.
Mid-conversation.

Kelp speaks the Model Context Protocol. Wire it into Claude Code, Claude Desktop, Cursor, or any MCP-compatible client, and the assistant scans, explains, and fixes findings while it is still writing the code. Same static engine as the CLI. Runs locally, offline. No file content ever leaves the machine.

~/.claude.json · Claude Code, Claude Desktop, Cursorjson
{
  "mcpServers": {
    "kelp": {
      "command": "npx",
      "args": ["-y", "@kelp-security/cli", "mcp"]
    }
  }
}
Restart the client. Ask the assistant to scan the repo, or use /kelp:review-repo.
What the model can call
  • scan_path · full repo scan
  • scan_snippet · check a diff before commit
  • list_rules · introspect coverage
  • explain_finding · turn a finding into a fix
  • explain_rule · why + remediation
Slash commands
  • /kelp:review-repo
  • /kelp:harden-file
MCP guide →
§ 04Questions

What people ask first.

01

Is Kelp free?

The engine, CLI, and GitHub Action are MIT-licensed and free forever. The hosted app at kelp.build is free while it's small — a paid tier may show up later, but the code stays open.

02

Do I need to sign up for anything?

No. `npx @kelp-security/cli scan .` works with zero configuration. `uses: kelp-security/kelp-action@v1` runs in CI without any Kelp account. Sign in only matters for the hosted app's continuous scanning.

03

Does Kelp catch every vulnerability?

No. Kelp covers a small set of high-impact classes with high precision — the ones that actually breach AI-generated apps. Real fixes for those beat a forty-page report of maybes.

04

How do I extend Kelp?

New secret patterns go in packages/core/src/scanners/secrets.ts. New backends (Firebase, Convex) follow docs/ADAPTERS.md. Contributor walkthrough in CONTRIBUTING.md.

Scan your app before your users do.

$ npx @kelp-security/cli scan .