What Pipelock Does
Pipelock runs as a separate proxy service alongside Sure with two listeners:| Listener | Port | Direction | What it scans |
|---|---|---|---|
| Forward proxy | 8888 | Outbound (Sure to LLM) | DLP (secrets in prompts), response injection |
| MCP reverse proxy | 8889 | Inbound (agent to Sure /mcp) | Prompt injection, tool poisoning, DLP |
Forward proxy (outbound)
WhenHTTPS_PROXY=http://pipelock:8888 is set, outbound HTTPS requests from Faraday-based clients (like ruby-openai) are routed through Pipelock. It scans request bodies for leaked secrets and response bodies for prompt injection.
Covered: OpenAI API calls via ruby-openai (uses Faraday).Not covered: SimpleFIN, Coinbase, Plaid, or anything using Net::HTTP/HTTParty directly. These bypass
HTTPS_PROXY.MCP reverse proxy (inbound)
External AI assistants that call Sure’s/mcp endpoint should connect through Pipelock on port 8889 instead of directly to port 3000. Pipelock scans:
- Tool call arguments (DLP, shell obfuscation detection)
- Tool responses (injection payloads)
- Session binding (detects tool inventory manipulation)
- Tool call chains (multi-step attack patterns like recon then exfil)
Docker Compose Setup
Thecompose.example.ai.yml file includes Pipelock. To use it:
Connecting external AI agents
External agents should use the MCP reverse proxy port:MCP_API_TOKEN as a Bearer token in requests. Set this in your .env:
Running without Pipelock
To usecompose.example.ai.yml without Pipelock, remove the pipelock service and its depends_on entries from web and worker, then unset the proxy env vars (HTTPS_PROXY, HTTP_PROXY).
Or use the standard compose.example.yml which does not include Pipelock.
Helm (Kubernetes) Setup
Enable Pipelock in your Helm values:HTTPS_PROXY/HTTP_PROXY/NO_PROXY into web and worker pods.
Exposing MCP to external agents (Kubernetes)
In Kubernetes, external agents cannot reach the MCP port by default. Enable the Pipelock Ingress:Monitoring
Enable the ServiceMonitor for Prometheus scraping:/metrics on the forward proxy port (8888).
Eviction protection
For production, enable the PodDisruptionBudget:Pipelock Configuration File
Thepipelock.example.yaml file (Docker Compose) or ConfigMap (Helm) controls scanning behavior. Key sections:
| Section | What it controls |
|---|---|
mode | strict (block threats), balanced (warn + block critical), audit (log only) |
forward_proxy | Outbound HTTPS scanning (tunnel timeouts, idle timeouts) |
dlp | Data loss prevention (scan env vars, built-in patterns) |
response_scanning | Scan LLM responses for prompt injection |
mcp_input_scanning | Scan inbound MCP requests |
mcp_tool_scanning | Validate tool calls, detect drift |
mcp_tool_policy | Pre-execution rules (shell obfuscation, etc.) |
mcp_session_binding | Pin tool inventory, detect manipulation |
tool_chain_detection | Multi-step attack patterns |
websocket_proxy | WebSocket frame scanning (disabled by default) |
logging | Output format (json/text), verbosity |
For the Helm chart, most sections are configurable via
values.yaml. For additional sections not covered by structured values (session profiling, data budgets, kill switch), use the extraConfig escape hatch:Modes
| Mode | Behavior | Use case |
|---|---|---|
strict | Block all detected threats | Production with sensitive data |
balanced | Warn on low-severity, block on high-severity | Default; good for most deployments |
audit | Log everything, block nothing | Initial rollout, testing |
Limitations
- Forward proxy only covers Faraday-based HTTP clients. Net::HTTP, HTTParty, and other libraries ignore
HTTPS_PROXY. - Docker Compose has no egress network policies. The
/mcpendpoint on port 3000 is still reachable directly (auth token required). For enforcement, use Kubernetes NetworkPolicies. - Pipelock scans text content. Binary payloads (images, file uploads) are passed through by default.
Troubleshooting
Pipelock container not starting
Pipelock container not starting
Check the config file is mounted correctly:Common issues:
- Missing
pipelock.example.yamlfile - YAML syntax errors in config
- Port conflicts (8888 or 8889 already in use)
LLM calls failing with proxy errors
LLM calls failing with proxy errors
If AI chat stops working after enabling Pipelock:If requests are being incorrectly blocked, switch to
audit mode in the config file and restart:MCP requests not reaching Sure
MCP requests not reaching Sure
Verify the MCP upstream is configured correctly:Check that
MCP_API_TOKEN and MCP_USER_EMAIL are set in your .env file and that the email matches an existing Sure user.