Bulkhead

Bulkhead

Provides cascading content protection for AI coding assistants by detecting and redacting PII, secrets, prompt injection, and system prompt leakage before they reach LLMs.

Category
访问服务器

README

Bulkhead

Cascading content protection for AI-powered development tools.

Bulkhead detects and redacts sensitive content -- PII, secrets, prompt injection, and system prompt leakage -- before it leaks through LLM-powered features. It runs as a VS Code extension, an HTTP REST server, or an MCP server for AI coding assistants.

Deployment VS Code extension, HTTP REST server, MCP server, Docker
Detection 154 secret patterns across 13 categories, 45+ PII entity types across 20+ countries, prompt injection, system prompt leakage, test data detection
Architecture Three-layer cascading classifier (regex, BERT, LLM)
Policy Named policies (strict, moderate), composable compliance overlays, risk assessment with classified issues
Tests 185 tests including adversarial suite, policy system, and performance benchmarks

Why Bulkhead?

The AI Coding Assistant Blind Spot

Every time a developer uses an AI coding assistant, the IDE sends context to an LLM -- not just the active file, but adjacent tabs, terminal output, clipboard contents, and project-wide search results. That context routinely includes .env files with database credentials, test fixtures with real customer data, and config files with API keys.

This leakage happens at edit time, not commit time. It is continuous, invisible, and bypasses every existing control: git hooks don't see it, SAST doesn't scan it, WAFs don't intercept it. There is no diff, no PR, no audit trail. By the time a secret scanner catches something at commit, the AI assistant has already sent it to an LLM provider dozens of times.

What's at Stake

  • HIPAA: $50,000 -- $1.9M per violation. Average healthcare breach: $9.77M
  • PCI-DSS: $5,000 -- $100,000/month in non-compliance fines
  • GDPR: Up to 4% of annual global revenue
  • SOC 2: Audit failures mean lost enterprise contracts
  • Average data breach cost: $4.88M (IBM 2024). Mean time to identify: 194 days
  • A single leaked AWS key costs $50,000+ in cloud resource abuse on average

How Bulkhead Solves It

Bulkhead sits between your editor and the AI, catching sensitive content before it leaves. Three detection layers trade speed for depth -- expensive inference only runs on the fraction of content that needs it:

flowchart LR
    A["Input Text"] --> B["Layer 1: Regex\nsub-ms"]
    B -->|"60-70% resolved"| C["Confirmed"]
    B -->|"remaining"| D["Layer 2: BERT\n20-50ms"]
    D -->|"~90% resolved"| C
    D -->|"~5-10% ambiguous"| E["Layer 3: LLM\n500ms-2s"]
    E --> C

Every detection carries provenance -- which layer flagged it, at what confidence, and why. Your compliance team gets "regex matched SSN with Luhn validation" or "BERT flagged a name at 0.92 confidence," not "the AI said so."

Deploy Anywhere, Change Nothing

  • VS Code extension -- catches leaks at the point of creation, on every keystroke
  • HTTP REST server -- CI/CD pipeline integration, API gateway sidecar
  • MCP server -- direct integration with Claude Code and GitHub Copilot
  • Docker -- zero-install containerized deployment for air-gapped environments

Same engine, same 154 secret patterns, same 45+ PII types, same policies. Different transports.

For the full business case with industry scenarios, architecture walkthroughs, and comparison with alternatives, see Why Do We Need Content Protection for AI Dev Tools?

What Makes Bulkhead Different

The core innovation is the cascading classifier -- three detection layers that progressively trade speed for depth, so expensive inference only runs on the small fraction of content that actually needs it. Regex handles the bulk (sub-millisecond, every keystroke). A BERT model resolves contextual entities like names and locations. An LLM disambiguates the genuinely hard cases ("Is 'Jordan' a person or a country?"). Each detection carries full provenance -- which layer flagged it, at what confidence, and why.

The detection patterns themselves are ported from established open-source projects (see Attribution). Bulkhead's contribution is the cascade architecture, the BERT worker thread integration, the LLM disambiguation layer, the multi-platform server architecture, and the deduplication logic that ties it all together.

The Problem

Every time you use an AI coding assistant, your editor content gets sent to an LLM. That content can include:

  • Personal data -- SSNs, credit cards, emails, phone numbers, medical IDs
  • Secrets -- API keys, tokens, database credentials, private keys
  • Prompt injection -- malicious instructions hidden in code comments or data
  • System prompt leakage -- attempts to extract your AI tool's configuration

Bulkhead sits between your code and the AI, catching sensitive content before it leaves.

Install

npm install @bulkhead-ai/core

Also available as @floatingsidewal/bulkhead-core via GitHub Packages and as a Docker container at ghcr.io/floatingsidewal/bulkhead.

Quick Start

import { createEngine, getPolicy } from "@bulkhead-ai/core";

const engine = createEngine({
  enabled: true, debounceMs: 500,
  guards: { pii: { enabled: true }, secret: { enabled: true }, injection: { enabled: true }, contentSafety: { enabled: false } },
  cascade: { escalationThreshold: 0.75, contextSentences: 3, modelEnabled: false, modelId: "Xenova/bert-base-NER" },
  policy: "strict",
});

const policy = getPolicy("strict");
const { risk } = await engine.policyScan("My SSN is 123-45-6789", policy);
console.log(risk.level);   // "high"
console.log(risk.issues);  // [{ category: "pii", entityType: "US_SSN", severity: "high", isTestData: true }]

See the How-To Guide for comprehensive examples including medical record scanning, bulk data redaction, and custom policies.

Project Structure

bulkhead/
  packages/
    core/       @bulkhead-ai/core      Detection engine, guards, cascade, policies
    vscode/     bulkhead               VS Code extension
    server/     @bulkhead-ai/server    HTTP REST server + MCP server
  docs/                                Guides: architecture, API, policies, patterns
  Dockerfile                           Multi-stage build (HTTP + MCP modes)
  docker-compose.yml                   HTTP and MCP service definitions

How It Works

Bulkhead uses the cascading classifier -- three detection layers that trade off speed against depth:

Layer Speed What it catches When it runs
Regex Sub-ms Structured PII (SSN, credit cards, IBAN), secrets (AWS keys, tokens), injection patterns Every keystroke (debounced)
BERT 20-50ms Names, locations, organizations -- contextual entities regex can't catch On-demand "Deep Scan" or /v1/scan/model
LLM 500ms-2s Ambiguous cases ("Is 'Jordan' a person or country?") Only for the ~5-10% of detections the BERT layer can't resolve

Each detection carries provenance -- which layer flagged it, at what confidence, and whether it's confirmed or needs review.

What It Detects

PII (45+ entity types across 20+ countries)

Patterns ported from Microsoft Presidio with checksum validation (Luhn, IBAN mod-97, Verhoeff) and context-aware scoring.

  • Generic: Credit cards, email, IBAN, IP addresses, MAC addresses, phone numbers, URLs, crypto wallets, dates
  • US: SSN, driver's license, passport, bank accounts, ITIN, Medicare (MBI), NPI, ABA routing, DEA license
  • UK: NHS number, NINO, passport, postcode, vehicle registration
  • EU: Spain NIF/NIE, Italy fiscal code/VAT/driver/passport/ID, Poland PESEL, Finland PIC, Sweden personnummer, Germany tax ID/passport
  • APAC: Singapore NRIC/UEN, Australia ABN/ACN/TFN/Medicare, India PAN/Aadhaar/vehicle/voter/passport, Korea RRN/passport, Thailand TNIN
  • Africa: Nigeria NIN

Secrets (154 patterns across 13 categories)

Patterns sourced from HAI-Guardrails, GitLeaks, and public provider documentation.

  • Cloud: AWS, Azure, GCP
  • Source control: GitHub, GitLab, Bitbucket
  • CI/CD: Jenkins, CircleCI, Travis CI, Drone
  • Communication: Slack, Twilio, SendGrid, Mailgun
  • Payment: Stripe, Square, PayPal
  • Database: Connection strings, Redis, MongoDB
  • Infrastructure: Terraform, Vault, Consul
  • SaaS: Jira, Confluence, Datadog, New Relic
  • AI/ML: OpenAI, Anthropic, HuggingFace, Cohere
  • Auth: Auth0, Okta, Firebase, Clerk, Supabase
  • CDN/Hosting: Cloudflare, Netlify, Vercel, Heroku
  • Social: Twitter, Facebook, LinkedIn
  • Generic: JWT, private keys, high-entropy strings

Prompt Injection

16 regex patterns + heuristic similarity matching against known attack phrases. Catches: "ignore previous instructions", role-play attacks, DAN mode, jailbreak attempts.

System Prompt Leakage

7 regex patterns + heuristic matching. Catches: "reveal your system prompt", "repeat everything above", extraction techniques.

Quick Start

Install from source

git clone https://github.com/your-org/bulkhead.git
cd bulkhead
npm install
npm run build

VS Code Extension

  1. Open the bulkhead/ folder in VS Code
  2. Press F5 to launch the Extension Development Host
  3. Open any file -- Bulkhead auto-scans on edit (regex layer, debounced)
  4. Use the command palette:
    • Bulkhead: Scan File -- regex scan
    • Bulkhead: Deep Scan -- regex + BERT + LLM cascade

HTTP REST Server

# Development
cd packages/server && npm run dev

# Production
npm run build && node packages/server/dist/main.js

# With API key authentication
BULKHEAD_API_KEY=my-secret-key node packages/server/dist/main.js
# Scan text
curl -X POST http://localhost:3000/v1/scan \
  -H "Content-Type: application/json" \
  -d '{"text": "My SSN is 123-45-6789"}'

# Scan and redact
curl -X POST http://localhost:3000/v1/redact \
  -H "Content-Type: application/json" \
  -d '{"text": "My SSN is 123-45-6789"}'

MCP Server (Claude Code)

Add to .mcp.json in your project root:

{
  "mcpServers": {
    "bulkhead": {
      "command": "npx",
      "args": ["tsx", "packages/server/src/mcp/index.ts"]
    }
  }
}

MCP Server (GitHub Copilot CLI)

Add to .github/copilot/mcp.json:

{
  "mcpServers": {
    "bulkhead": {
      "command": "npx",
      "args": ["tsx", "packages/server/src/mcp/index.ts"]
    }
  }
}

Docker

# HTTP server on port 3000
docker compose up bulkhead

# MCP server on stdio
docker compose run --rm -i bulkhead-mcp

Use as a library

import { GuardrailsEngine, PiiGuard, SecretGuard } from "@bulkhead-ai/core";

const engine = new GuardrailsEngine();
engine.addGuard(new PiiGuard());
engine.addGuard(new SecretGuard());

const results = await engine.analyze("Email: john@example.com, Key: AKIAIOSFODNN7EXAMPLE");
// results[0].detections -> [{ entityType: "EMAIL_ADDRESS", source: "regex", disposition: "confirmed", ... }]
// results[1].detections -> [{ entityType: "AWS_ACCESS_KEY", source: "regex", disposition: "confirmed", ... }]

Configuration

VS Code Settings

Setting Default Description
bulkhead.enabled true Master toggle
bulkhead.debounceMs 500 Delay before auto-scan on edit
bulkhead.guards.pii.enabled true PII detection
bulkhead.guards.secret.enabled true Secret detection
bulkhead.guards.injection.enabled true Prompt injection detection
bulkhead.cascade.modelEnabled false Enable BERT model (downloads ~29MB on first use)
bulkhead.cascade.escalationThreshold 0.75 BERT confidence below which detections escalate to LLM
bulkhead.cascade.contextSentences 3 Sentences of context sent to LLM for disambiguation

Environment Variables (Server)

Variable Default Description
BULKHEAD_PORT 3000 HTTP server port
BULKHEAD_HOST 0.0.0.0 HTTP server bind address
BULKHEAD_LOG_LEVEL info Log level: info, warn, error, silent
BULKHEAD_API_KEY (none) API key for authentication. When set, all /v1/* routes require X-API-Key header
BULKHEAD_CORS_ORIGIN (disabled) CORS origin. Set to * or a specific origin to enable
BULKHEAD_MAX_BODY_SIZE 1048576 Maximum request body size in bytes (default 1MB)
BULKHEAD_GUARDS_PII_ENABLED true Enable PII guard
BULKHEAD_GUARDS_SECRET_ENABLED true Enable secret guard
BULKHEAD_GUARDS_INJECTION_ENABLED true Enable injection guard
BULKHEAD_CASCADE_MODEL_ENABLED false Enable BERT model for Layer 2
BULKHEAD_CASCADE_MODEL_ID gravitee-io/bert-small-pii-detection HuggingFace model ID
BULKHEAD_CASCADE_ESCALATION_THRESHOLD 0.75 BERT confidence threshold for LLM escalation
BULKHEAD_LLM_PROVIDER none LLM provider: openai, anthropic, custom
BULKHEAD_LLM_API_KEY (none) API key for the LLM provider
BULKHEAD_LLM_ENDPOINT (none) Endpoint URL for custom LLM provider

Testing

npm test              # Run all 185 tests
npm run test:watch    # Watch mode (core package)
npm run lint          # Type-check all packages

The test suite includes an adversarial test suite covering evasion techniques, false positive resistance, mixed-threat documents, performance benchmarks with ASCII bar charts, and a "kitchen sink" document that triggers all threat types simultaneously.

Documentation

  • Why Bulkhead? -- Business case, real-world scenarios, comparison with alternatives
  • Architecture -- Cascading classifier design, component map, entry points
  • Policy Guide -- Policies, risk assessment, test data detection, compliance overlays
  • Deployment -- Five deployment scenarios with configuration and examples
  • API Reference -- HTTP endpoints, MCP tools, environment variables
  • Guards -- Guard implementation details
  • Patterns -- Detection pattern reference
  • Testing -- Test strategy and adversarial suite
  • How-To -- Usage guides and library integration

Attribution

Bulkhead derives detection patterns and guard architecture from two open-source projects. The cascading classifier, BERT integration, LLM disambiguation, VS Code extension, server architecture, and deduplication logic are independently developed. See ATTRIBUTION.md for full details and NOTICES for original copyright notices.

  • Microsoft Presidio (MIT) -- PII detection patterns, checksum algorithms, entity taxonomy
  • HAI-Guardrails (MIT) -- Guard architecture, detection tactics, security patterns

Contributing

See CONTRIBUTING.md for guidelines.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选