github.com/luckyPipewrench/pipelock
v1.5.0
#2128 most downloaded on Go modules
luckyPipewrench/pipelock
What this package is like to depend on
Last release today
23 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 31 of 31 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
61 releases · first in 2026
61 releases in the last 12 months
see the full history below
Release timeline
61 releases · Feb 2026 to Aug 2026Releases
latest 60 of 61-
v1.5.1-0.20260823032320-07efc340a42623 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260820212107-c138cf85cf8220 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260820165433-4c748ab986d620 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260815041030-3fe6ea11286f15 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260810202100-e4d497298efc10 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260810171457-96a57e78c0f510 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260806143852-9f4bc9d487c706 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260804101843-7929705d8ced04 Aug 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260730005235-71bc5edf76fe30 Jul 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260729005942-2ea3977987fc29 Jul 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260720152209-5ee0a2e648ad20 Jul 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260717141723-3850edb71b0517 Jul 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260714235243-45002497bcdd14 Jul 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260627035528-1ef37c280c5127 Jun 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260618231218-818ca0a7af4d18 Jun 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260601014236-069a2e7f259b01 Jun 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260514184220-925b739faeee14 May 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260509141755-cef4f47eb99f09 May 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260503033438-a84f28e7938d03 May 2026 pre-releaseNothing published for this version
-
v1.5.1-0.20260417194730-51d5289495b617 Apr 2026 pre-releaseNothing published for this version
-
v1.5.021 Mar 2026Release notes
Open source →Added
- Adaptive enforcement v2: sessions that accumulate threat signals now escalate through three levels (elevated, high, critical), upgrading actions at every enforcement point across all proxy and MCP transports. Live escalation queries tighten enforcement mid-connection. New
internal/session/package,UpgradeAction()ininternal/decide/, configurable per-level behavior viaadaptive_enforcement.levels. Prometheus metricspipelock_adaptive_upgrades_totalandpipelock_adaptive_sessions_current. 181 new tests. (#256) - Financial DLP with checksum validation: credit card (Luhn) and IBAN (mod-97) detection with post-match checksum validation that eliminates 90-99% of false positives. New
Validatorfield onDLPPatternfor extensible validated patterns. Covers Visa, Mastercard (including 2221-2720), Amex, Discover, JCB, and 80+ IBAN countries. ABA routing number validator available as opt-in. DLP count 44 to 46. 70 new tests. (#258) - Key-scoped tool policy matching:
arg_keyfield scopesarg_patternto specific top-level argument keys. Blockread_filewhenfile_pathcontains/etc/shadowwithout false positives on other arguments. Raw argument JSON threaded through all enforcement paths. (#257) - Community rules rollout:
rules.KeyringHexwired into build ldflags (Makefile, GoReleaser, Dockerfile) so release binaries verify official bundle signatures. Official registry URL set topipelab.org/rules/.docs/rules.mduser guide. Community Rules section in README. Commentedrules:section in all 7 presets. (#255) - Filesystem sentinel for subprocess MCP mode: real-time filesystem monitoring detects secrets written to disk by agent subprocesses that bypass the MCP pipe. Recursive directory watching with 50ms write debounce, DLP content scanning, process lineage attribution (Linux), and rename-into-place bypass prevention. Watches arm synchronously before child launch (no startup race). Fail-closed when enabled. (#261)
- OTLP log export sink: OpenTelemetry log export as a third emit sink alongside webhook and syslog. Events sent as OTLP LogRecords over HTTP/protobuf to a collector endpoint. No gRPC dependency (uses protowire). Async buffered queue with bounded retry on 429/5xx per OTLP spec. 15 new tests. (#262)
Fixed
- Transport parity: WebSocket header DLP now scans all 7 forwarded headers (was 4 auth-only). Forward HTTP proxy now scans responses for prompt injection when response_scanning is enabled. Fail-closed on compressed responses that cannot be scanned. Closes the last transport parity gap. (#254)
- Shell normalization hardened against 3 evasion techniques:
$@/$*positional parameter insertion,${HOME:0:1}path construction, and backtick command substitution now resolve before policy matching. Pipeline ordering fixed so indirect expansion resolves before slash replacement. (#259) - Windows release builds:
pipelock rulesnow uses an OS-specific lock implementation so the CLI cross-compiles cleanly for Windows targets. (#252) - DLP action validation:
dlp.actionand per-patternactionfields were silently dropped by YAML unmarshaling. Now rejected at startup with an error message pointing to the correct transport-level settings. (#264) - Adaptive enforcement death spiral: CONNECT hostname no longer counted toward CEE entropy budget (the destination hostname is not exfiltration data). Time-based de-escalation added so sessions at block level can recover after clean traffic. Prevents permanent lockout from repeated polling to the same host. (#266)
Deployment Notes
- TLS interception with
cross_request_detectionenabled: setbits_per_windowto 500,000+ and configureexempt_domainsfor LLM providers to avoid false entropy accumulation from repeated API calls.
Tests
- WebSocket and TLS interception transport wiring: integration tests for address poisoning detection, cross-request exfiltration entropy, response scanning strip action, full CONNECT-hijack-SNI-intercept-scan integration, and injection blocking. Coverage:
clientToUpstream61% to 88%,handleConnectTLS branch 0% to 86%. (#253)
- Adaptive enforcement v2: sessions that accumulate threat signals now escalate through three levels (elevated, high, critical), upgrading actions at every enforcement point across all proxy and MCP transports. Live escalation queries tighten enforcement mid-connection. New
-
v1.4.017 Mar 2026Release notes
Open source →Added
- Community rule bundles (infrastructure): signed YAML detection pattern bundles with Ed25519 keyring verification,
pipelock rules install/update/list/verify/diff/removeCLI, CalVer versioning, lock file tracking, and bundle provenance threading through all scanner match types. Newrulesconfig section withtrusted_keysandauto_update. Public rule bundle and hosting will follow in a point release. (#247) - Crypto address poisoning detection: validates ETH, BTC, SOL, and BNB blockchain addresses against a user-supplied allowlist and flags lookalike addresses using prefix/suffix similarity scoring. New
address_protectionconfig section.internal/addressprotect/package with chain-specific validators and Bech32/Base58/EIP-55 checksum support. (#233) - Address similarity tracker: session-scoped fingerprinting with LRU eviction detects when multiple similar-looking addresses appear in the same session, a key indicator of address poisoning attacks. (#231)
- Response scanning pre-filter: keyword-gated regex skips expensive normalization and pattern matching when no injection keywords are present in the text. Cuts clean-text scan latency significantly. (#230)
- Response pre-filter extended to opt-space and vowel-fold passes: all three normalization passes now use keyword pre-filtering, not just the first pass. (#245)
- Delimiter-separated hex encoding detection:
normalizeHex()strips 6 delimiter formats (:,-,,,,\xprefix,0xprefix) across all DLP paths, catching secrets encoded as colon-separated, space-separated, or C-style hex notation. (#243) - DLP patterns for Groq, xAI, GitLab, New Relic, and Stripe webhooks: built-in pattern count expanded from 36 to 41. (#246)
- Crypto secret DLP detection: BIP-39 seed phrase detection via dedicated
internal/seedprotect/package with dictionary lookup, sliding window, and SHA-256 checksum validation. Three new regex patterns for Bitcoin WIF, extended private keys (xprv/yprv/zprv/tprv), and Ethereum private keys. DLP count now 44. Newseed_phrase_detectionconfig section. (#249) - VS Code MCP proxy integration:
pipelock vscode installwraps VS Code MCP server configs through pipelock's MCP proxy for bidirectional scanning.pipelock vscode removecleanly unwraps. Supports project and global scope, dry-run preview, atomic writes with backup. (#248) - Trial tier and one-time purchase support for license service: Polar webhook handler now processes trial and one-time purchase events alongside subscriptions. (#232)
- Scan API reference documentation (
docs/scan-api.md): full API reference for thePOST /api/v1/scanendpoint covering all four scan kinds, auth, rate limiting, error codes, and integration patterns. - Address protection and scan API config reference sections added to
docs/configuration.md. - Hostile-model preset surfaced in README Security Matrix with feature callout.
Changed
- Minimum Go version bumped from 1.24 to 1.25. CI matrix now tests Go 1.25 and 1.26. (#242)
Fixed
- K8s Secret volume compatibility: license key and signing key file loading now follows symlinks (required for Kubernetes Secret volume mounts where files are symlinked through
..data/). (#229) - MCP
tools/listfalse positive on empty responses: skip general response scanning when tools/list returns an empty or all-unnamed tool array. Malformedtoolsvalues still fall through to injection scanning. (#250) - Keystore symlink escape:
generateAgentnow validates path containment after symlink resolution, preventing private key writes to attacker-controlled locations outside the keystore boundary. Containment check covers both leaf symlinks and symlinked parent directories.
Docs
- Adversarial testing methodology section added to security assurance docs. Benchmark data refreshed for Go 1.25. Scanner pipeline description updated from 9 to 11 layers. (#228)
- Security claims hedged and coverage disclaimers added across docs. (#234)
- Demo assets, fleet dashboard screenshot, and egress report updated. (#235)
CI
- sigstore/cosign-installer bumped from 4.0.0 to 4.1.0. (#237)
- docker/login-action bumped from 3.7.0 to 4.0.0. (#241)
- Community rule bundles (infrastructure): signed YAML detection pattern bundles with Ed25519 keyring verification,
-
v1.3.014 Mar 2026Release notes
Open source →Added
- Scan API endpoint (
POST /api/v1/scan): evaluate URLs, text, and MCP payloads against the scanner pipeline via HTTP. Returns structured findings with MITRE ATT&CK technique IDs, severity, and per-layer results. Configurable viascan_apiconfig section. (#223) - SARIF output for
pipelock auditandpipelock git scan-diff:--format sarifproduces SARIF v2.1.0 for GitHub Code Scanning integration. Findings appear as inline annotations on PR diffs via theupload-sarifaction. (#217) - CRLF injection detection: blocks
%0d%0a, double-encoded%250d%250a, and raw CR/LF in URL scheme, authority, path, and query components. Fragments excluded (never reach upstream). (#224) - Path traversal detection: blocks
/../, encoded variants (%2e%2e/,..%2f,..%5c), partial encoding, double-encoded%252e%252e, and mixed-boundary patterns using segment-bounded matching to avoid false positives. (#224) - CONNECT header DLP scanning: scans Proxy-Authorization and other headers on CONNECT handshake for leaked secrets before tunnel establishment. (#224)
- Subdomain entropy exclusions:
subdomain_entropy_exclusionsconfig field whitelists domains with legitimately high-entropy subdomains (e.g., RunPod GPU instances). Wildcard matching (*.runpod.net) covers all subdomain depths. (#222) - License service scaffold: cluster-only webhook handler for Polar subscription events. Alpine-based Docker image, SQLite entitlement store, append-only audit ledger. ELv2 licensed. (#218)
- License service build artifacts: GoReleaser pipeline builds linux/amd64+arm64 Docker images for the license service with multi-arch manifests and build provenance attestation. (#226)
pipelock license installcommand: accepts a license token and writes it to the local license file for pipelock to read at startup. (#216)- Runtime license loading: load license from
PIPELOCK_LICENSE_KEYenv var orlicense_fileconfig path. (#213) - License tier and subscription fields:
tierandsubscription_idin license tokens for entitlement gating. (#215) - Sentry error tracking: opt-in Sentry integration for crash reporting in production deployments. (#211)
- OWASP LLM Top 10 mapping document: article-by-article coverage analysis against OWASP LLM Top 10 2025. (#220)
Changed
- Scanner context threading:
Scanner.Scannow acceptscontext.Contextfor DNS cancellation propagation. All proxy paths pass request context through. (#221) - Metrics refactored: structured initialization, per-transport counters, scan API metrics. (#223)
- License token enrichment:
tierandsubscription_idfields are now populated during license service minting. (#226)
Fixed
- Config fail-open on omitted security booleans:
response_scanning.enabled,mcp_input_scanning.enabled, andmcp_tool_scanning.enablednow default totruewhen omitted from YAML (previously defaulted to Go zero valuefalse). (#219) - WebSocket header DLP bypass: headers on WebSocket upgrade requests are now scanned for DLP patterns. (#219)
secrets_filepermission gap: file permission check now enforces0o600on secrets files. (#219)- Capability separation language in docs: corrected claims about enforcement vs. deployment guidance. (#220)
- Adaptive enforcement accuracy in docs: clarified that v1 is scoring-only, not enforcement-aware. (#220)
- MCP
tools/listfalse positive: instruction-like tool descriptions no longer trigger injection detection. (#224) - URL fragment DLP coverage: URL fragments containing credential-like parameters are now detected by DLP scanning. (#224)
- Webhook idempotency: concurrent Polar webhook deliveries no longer double-mint licenses. (#226)
- Founding cap honor: paid founding checkouts are honored when cap is reached instead of silently downgrading to regular Pro. (#226)
- CLI license ledger:
pipelock license issueno longer stores raw signed tokens in the ledger file (stores truncated SHA-256 hash for correlation). (#226) - License service email and config defaults: corrected domain references from stale addresses to current domains. (#226)
- Scan API endpoint (
-
v1.2.011 Mar 2026Release notes
Open source →Added
- Cross-request exfiltration detection (CEE): per-session entropy budget tracking and fragment reassembly with DLP re-scan catch secrets split across multiple requests. Integrated across all proxy paths (fetch, forward, TLS intercept, WebSocket, MCP). Strict and hostile-model presets enable CEE by default. (#206)
- DLP pattern expansion from 22 to 36 built-in patterns: AI/ML provider keys (Hugging Face, Databricks, Replicate, Together AI, Pinecone), infrastructure tokens (DigitalOcean, HashiCorp Vault, Vercel, Supabase), package registry tokens (npm, PyPI), and developer platform keys (Linear, Notion, Sentry) (#208)
- DLP prefix pre-filter: fast literal-prefix screening skips regex evaluation on URLs that contain no credential-like substrings, reducing DLP overhead on clean traffic (#209)
Changed
- Release artifacts (Homebrew, GitHub releases, Docker images) now include paid-tier features that activate with a valid license key. Building from source without the
enterprisetag produces a Community-only binary. (#212)
Fixed
- Agent listeners now shut down on config reload when the license is revoked, preventing policy-free traffic after license expiry (#205)
- License headers normalized across all source files; documentation updated for dual-license clarity (#204)
-
v1.1.1-0.20260310002537-6471b7f3f05a10 Mar 2026 pre-releaseNothing published for this version
-
v1.1.009 Mar 2026Release notes
Open source →Added
pipelock discovercommand: scans MCP server configs (Claude Code, Cursor, Windsurf, VS Code) and shows which servers lack pipelock wrapping (#194)- Parallel scanner benchmarks and concurrent scaling tests with performance documentation (#201)
- Security, Pipelock Scan, and CodeRabbit badges to README (#193)
Fixed
- IPv6 listener collision detection:
[::]:8888,0.0.0.0:8888, and:8888now correctly collide in agent listener validation (dual-stack systems bind all three to the same port) - Non-canonical IPv6 addresses (e.g.
[0000::1]) normalized vianet.ParseIPfor consistent collision detection - Config hot-reload preserves agent listener state across reloads: removing a listener-bearing agent re-adds its full profile (prevents policy downgrade on bound ports), and new agent listeners are stripped (can't bind without restart). License expiry timestamps also preserved (watchdog timer set at startup only).
Changed
- Enterprise module split: multi-agent features (per-agent identity, budgets, config isolation) moved to
enterprise/directory under Elastic License 2.0 (ELv2). Core remains Apache 2.0. (#202) - Enterprise features require
//go:build enterprisetag at compile time and a valid license key at runtime - OSS builds silently ignore
agentsconfig section (no error, agents just don't activate) - CI tests both OSS and enterprise build modes
- CI dependency updates: actions/checkout v6, docker/setup-buildx-action v4, docker/setup-qemu-action v4, actions/dependency-review-action v4.9, github/codeql-action v4.32.6
-
v1.0.008 Mar 2026Release notes
Open source →Pipelock 1.0.0 is the production-ready release. All scanning layers, proxy modes, and MCP security features are stable and commercially supported.
Added
- Per-agent identity profiles: named agent configurations with independent mode, enforce flag, API allowlist, DLP patterns, rate limits, and session profiling overrides
- Agent identity resolution chain: context override >
X-Pipelock-Agentheader >?agent=query param >_defaultfallback - Per-agent request budgets: configurable request count, byte transfer, and unique domain limits with rolling window enforcement
- Dedicated listener ports per agent for spoof-proof identity without relying on headers
- Source CIDR matching for agent identity
--agentflag for MCP proxy: select agent profile for MCP proxy sessions- Agent identity threaded through audit logs, Prometheus metrics, and JSON
/statsbreakdown X-Pipelock-Agentheader stripped before forwarding to upstream (prevents agent impersonation)- Ed25519 license key system:
pipelock license keygen,pipelock license issue, andpipelock license inspectCLI commands with build-time public key embedding - MCP tool policy: audit log tamper protection (blocks rm/truncate/shred on log files, history clearing)
- MCP tool policy: persistence detection for cron, systemd, init.d, launchd, and shell profile write paths with destination-aware matching
- Chain detection:
write-persistandpersist-callbackpatterns with argument-aware exec-to-persist reclassification - Read-indicator downgrade: introspection tools no longer trigger false-positive persistence alerts
request_body_scanningdefaults in programmatic config (previously only available via preset files)- IPv4/IPv6 multicast ranges added to default SSRF protection
- Social Security Number DLP pattern added to all config presets
tool_chain_detectionsection added to all config presets--homeflag for signing/keygen/verify/TLS CLI commands (container and rootless environment support)- Config-relative CA path resolution for TLS interception (paths resolve relative to config file, not CWD)
Fixed
- TLS interception shared transport: single
http.Transportwith connection pooling across intercepted CONNECT tunnels - TLS passthrough domain reload warnings: set-diff detection catches same-size domain list replacements during config hot-reload
- TLS
InstallCArefactored for testable OS-specific branches (certgen coverage improved) - Config preset sync: all 7 presets now match
Defaults()for DLP patterns, tool chain detection, and policy rules
Changed
- Minimum version bump from 0.x to 1.0: public API (config format, CLI flags, audit schema, Prometheus metrics) is now stable. Breaking changes will follow semver.
-
v0.3.7-0.20260307004217-11c38f71476e07 Mar 2026 pre-releaseNothing published for this version
-
v0.3.606 Mar 2026Release notes
Open source →Added
- TLS interception for CONNECT tunnels: opt-in MITM decrypts tunnel traffic for full request body DLP, header DLP, and response injection scanning. ECDSA P-256 CA with bounded TTL certificate cache.
pipelock tls initcommand: generates a local CA key pair for TLS interceptionpipelock tls show-cacommand: displays the CA certificate (PEM) for manual trustpipelock tls install-cacommand: installs the CA into the system trust storetls_interceptionconfig section withenabled,ca_cert,ca_key,cert_ttl, andpassthrough_domainsfields. Hot-reload wiring for CA config changes.- TLS interception SSRF-safe upstream dialer prevents DNS rebinding during intercepted connections
- TLS interception status reported in
/healthendpoint pipelock_tls_intercept_total,pipelock_tls_handshake_duration_seconds,pipelock_tls_request_blocked_total,pipelock_tls_response_blocked_total,pipelock_tls_cert_cache_sizePrometheus metricstls_authority_mismatch,tls_response_blockedaudit events with MITRE technique labels- All 7 config presets updated with
tls_interceptionsection defaults pipelock reportcommand: reads JSONL audit logs and produces HTML, JSON, or Ed25519-signed evidence bundle reports with risk rating, event categories, timeline histogram, and evidence appendix. Supports--format,--output,--sign, and--configflags.- MCP tool poisoning: parameter schema scanning extracts parameter key names from
inputSchemaat all nesting depths, expands underscore/hyphen/camelCase names, and scans for exfiltration intent (catches the CyberArk attack variant where data theft is encoded in parameter names while descriptions stay clean) - Exfiltration Parameter Name poison pattern: detects action+target combinations in tool parameter names (read+private_key, steal+credentials, fetch+access_token)
- MCP tool drift summaries now report which parameters were added or removed instead of generic "description changed" messages
- Audit schema: chain detection structured events, startup/reload config hash metadata, version tracking
Config.Hash()for deterministic SHA256 of raw config file bytes (used in signed reports)- Dependency review GitHub Actions workflow: blocks PRs that introduce dependencies with known vulnerabilities
- CI concurrency groups: in-progress runs cancelled when new commits push to the same branch
- SPDX Apache 2.0 license headers on all Go source files
- GitHub Sponsors funding configuration
- Contributor License Agreement (Apache ICLA) section in CONTRIBUTING.md
- SPONSORS.md for sponsor recognition
Fixed
- Environment variable leak scanner: ~50 well-known non-secret variables (HOME, PATH, USER, PWD, SHELL, TERM, LANG, EDITOR, GOPATH, LS_COLORS, and others) are now skipped by name, reducing false positives when agents send standard environment values in tool arguments. Case-insensitive matching handles Windows-style mixed-case names.
- TLS interception:
ActionAsktreated as block inside intercepted tunnels (no HITL terminal available in TLS context) - TLS interception:
LoadCAvalidates cert.IsCA, KeyUsageCertSign, and key correspondence. Rejects cert_ttl <= 0 and group/world-readable CA keys. - MCP: skip general injection scanner for tools/list responses when tool scanning is enabled, preventing false positives on instructional tool descriptions (e.g. "you must call this tool")
- Report: chain detection severity derived from action (block=critical, warn=warn) instead of storing caller-provided value
- Report: hash raw client IP in audit session field when Mcp-Session-Id absent, preventing IP leak
- Report: plain blocked events without an action field now get high severity instead of medium
- Report: evidence appendix redacts connect_host and sni_host IP addresses
- Report: admin events (startup, shutdown, config_reload) excluded from timeline histogram
- Report: skipped JSONL lines tracked and surfaced in summary and HTML template
- Report: criticals KPI counter uses severity:critical count (was always 0)
- Report: exec summary uses traffic-only event count as denominator (excludes admin events)
- Report: multi-day timeline labels use "Jan 2" date format instead of "00:00" for all bars
Changed
- Documentation version references use
v1/latestinstead of pinned version numbers so guides stay current across releases
-
v0.3.6-0.20260305224214-aa1f60a9d6d905 Mar 2026 pre-releaseNothing published for this version
-
v0.3.505 Mar 2026Release notes
Open source →Added
- Kill switch API token can now be set via
PIPELOCK_KILLSWITCH_API_TOKENenvironment variable, overriding thekill_switch.api_tokenconfig field. Enables Kubernetes deployments to source the token from a Secret instead of a ConfigMap. - Request body DLP scanning for the forward HTTP proxy. Scans POST/PUT/PATCH bodies for secrets across JSON (recursive string extraction), form-urlencoded, multipart/form-data, and raw text. Unknown content types get a fallback raw-text scan to prevent Content-Type spoofing bypass. Fail-closed on oversized bodies, compressed bodies, parse errors, and multipart limit violations.
- Request header DLP scanning for the forward proxy and fetch handler. Two modes:
sensitive(scan listed headers only) andall(scan everything except structural headers, including header names). Joined scan catches secrets split across multiple headers. request_body_scanningconfig section withenabled,action,max_body_bytes,scan_headers,header_mode,sensitive_headers, andignore_headersfieldspipelock_body_dlp_hits_totalandpipelock_header_dlp_hits_totalPrometheus countersbody_dlpandheader_dlpaudit event types- Shared JSON string extractor (
internal/extract) used by both proxy body scanning and MCP input scanning hostile-modelconfig preset for agents running uncensored or jailbroken models- Windows build support: GoReleaser produces Windows amd64/arm64 binaries (zip archives). Kill switch signal toggle and config reload signal are no-ops on Windows; all other features work identically.
- CONNECT tunnel SNI verification: detects domain fronting (T1090.004) by comparing the CONNECT target hostname against the TLS SNI extension. Enabled via
forward_proxy.sni_verification: true.pipelock_sni_totalPrometheus counter tracks matches. pipelock claude hook/setup/removecommands for Claude Code hook integration- MCP confused deputy protection: validates that MCP server response IDs match previously tracked request IDs. Blocks unsolicited responses that could hijack agent execution flow.
- IPv4 and IPv6 multicast CIDRs (
224.0.0.0/4,ff00::/8) added to default SSRF internal address list
Fixed
- IPv6 zone ID SSRF bypass: URLs like
http://[::1%25eth0]/no longer skip CIDR checks. Zone IDs are stripped before IP parsing.
- Kill switch API token can now be set via
-
v0.3.404 Mar 2026Release notes
Open source →Fixed
pipelock cursor installnow writes Cursor's v1 hooks.json format (map keyed by event name withversionfield). Previously wrote a flat array that Cursor silently ignored, causing hooks to never fire.pipelock cursor installnow preservesargsfields on existing hooks during merge. Previously, non-pipelock hooks withargsarrays lost their arguments after install or upgrade.pipelock preflightnow scans both v1 and legacy hooks.json formats. Previously only understood the legacy format and would false-positive on v1 files.
-
v0.3.304 Mar 2026Release notes
Open source →Added
pipelock verify-installcommand: 10 deterministic checks verifying scanning pipeline and network containment. Produces human-readable or--jsonoutput with optional Ed25519--signfor tamper-evident reports. Supports--outputto write results to file.pipelock cursor hooksubcommand: Cursor IDE hook integration. Reads hook events from stdin, evaluates DLP, injection, and tool policy, writes allow/deny JSON to stdout. Always exits 0 with JSONpermissionfield as the authoritative decision. Without--config, uses a security-focused default profile with 9 tool policy rules, MCP input scanning, and response scanning enabled.pipelock cursor installsubcommand: writeshooks.jsonto register pipelock with Cursor. Supports--global(default,~/.cursor/) and--project(.cursor/in cwd). Atomic writes via temp file + rename,.bakbackup, idempotent merge with existing hooks, upgrade-safe replacement of stale entries.internal/decidepackage: shared decision engine for evaluating agent actions against pipelock's scanning pipeline. Supports shell execution, MCP tool calls, and file read events with per-finding action semantics (block vs warn) andenforceflag override.- Fail-closed on malformed MCP tool_input: invalid JSON in tool arguments is treated as block-level evidence. Legitimate MCP tool calls always have valid JSON; parse failure indicates tampering or corruption.
pipelock audit --preflightscanner: detects dangerous IDE configuration files (.cursor/mcp.json,.vscode/mcp.json) in project directories that could override agent security settings. Reports threat level (critical/high/medium/low) with actionable remediation steps.
Changed
- Replaced all
//nolint:gosecG304 suppressions withfilepath.Clean()across production and test code (84 occurrences in 26 files). No behavioral change. - Eliminated all
//nolint:goconstdirectives, extracted named constants
Fixed
- Pre-existing lint issues in
tests/ws-helper/main.go: errcheck onconn.Close(), noctx onnet.Listen
-
v0.3.203 Mar 2026Release notes
Open source →Added
pipelock diagnosecommand: fully local end-to-end configuration verification. Spins up a mock upstream and temp proxy, runs 6 checks (health, fetch allowed/blocked, hint presence, CONNECT allowed/blocked). Exit 0 on pass, 1 on failure, 2 on config error. Supports--jsonand--config.explain_blocksconfig field (opt-in, default false): blocked responses include actionable hints explaining why a request was blocked and how to fix it. Fetch proxy gets a JSONhintfield, CONNECT and WebSocket get anX-Pipelock-Hintheader. Hints are per-scanner (DLP, blocklist, SSRF, entropy, rate limit, etc.).- Scanner label constants (
scanner.ScannerDLP,scanner.ScannerBlocklist, etc.): 12 exported constants matching existing on-wire metric label values proxy.Handler()method: returns the composed HTTP handler for use withhttptest.NewServeror custom listeners- Docker Compose quickstart (
examples/quickstart/): production-ready two-network architecture withinternal: trueisolation, opt-in verification suite (5 tests: network isolation, DLP, response injection, MCP tool poisoning), attacker container for reproducible demos
Fixed
generate mcporternow preserves per-server extra fields (alwaysAllow,disabled,metadata,headers, etc.) during wrapping. Previously onlycommand,args, andenvsurvived.- WebSocket scanner label split: protocol enforcement events now correctly use
ws_protocollabel - Grafana dashboard template variable syntax corrected for fleet filtering
Changed
- Reusable scan workflow actions pinned to commit SHAs for OpenSSF Scorecard compliance
-
v0.3.2-0.20260302022528-84cc5f369d0902 Mar 2026 pre-releaseNothing published for this version
-
v0.3.102 Mar 2026Release notes
Open source →Added
- WebSocket MCP transport:
--upstream ws://andwss://for MCP proxy connections, with the same 6-layer scanning pipeline as stdio and HTTP modes pipelock generate mcporterCLI: wraps MCP server configs with pipelock scanning. Reads any JSON withmcpServers, preserves env blocks, detects already-wrapped servers, idempotentpipelock-initcontainer image: Alpine-based multi-arch image for K8s initContainer deployments, replaces multi-line wget/tar/chmod scripts withcp /pipelock /shared-bin/pipelock- MITRE ATT&CK technique IDs mapped to all scanner labels (T1048, T1059, T1046, T1071.001, T1190, T1195.002, T1078, T1030) in blocked, anomaly, ws_scan, response_scan, session_anomaly, and mcp_unknown_tool audit events and emitted payloads
pipelock_kill_switch_active{source}Prometheus gauge via custom collector (fresh state per scrape, four sources: config, api, signal, sentinel)pipelock_info{version}build information metric- Metrics port isolation:
metrics_listenconfig field runs/metricsand/statson a dedicated port, preventing agents from scraping operational metadata. Changes rejected on hot-reload with a warning. - Cosign signature verification in the GitHub Action: release checksums verified against Sigstore attestation before binary install. Graceful degradation when cosign is unavailable.
- Reusable GitHub Actions security scan workflow (
.github/workflows/reusable-scan.yml) with 7 configurable inputs andscore,findings-count,critical-countoutputs - 7 new docs: configuration reference, deployment recipes (Docker/K8s/iptables/macOS PF), bypass resistance matrix, attacks-blocked gallery, policy spec v0.1, transport modes guide, OpenClaw deployment guide
- Prometheus metrics reference (
docs/metrics.md): all 20 metrics with scrape config and PodMonitor example - 11 ready-to-use Prometheus alert rules (
examples/prometheus/pipelock-alerts.yaml) - Grafana dashboard rebuilt from 4-panel overview to 18-panel fleet monitor with per-source kill switch status, chain detection by pattern, session anomaly breakdown, escalation timeseries, and multi-instance
$instancefilter variable filterAndActOnResponseScanhelper: extracted response scan action handling (suppress, block, ask, strip, warn) to eliminate duplication between raw HTML and extracted text scan paths- Demo extended with base64-encoded secret detection, git diff scanning, and config generation steps
Fixed
internal: []in YAML config now correctly disables SSRF checks. Previously,ApplyDefaults()treated explicit empty slices the same as absent fields, filling in default CIDRs. This blocked legitimate Docker container traffic on private IPs (172.x.x.x).- Reject WebSocket compressed frames (RSV1 bit): compressed bytes bypass DLP pattern matching entirely, now closed with StatusProtocolError on both relay directions
- Scan raw HTML body before go-readability extraction: injection hidden in HTML comments, script/style tags, and hidden elements was stripped before the response scanner could detect it
- Use Mozilla Public Suffix List for ccTLD-aware domain grouping:
baseDomain()now correctly groupsevil.co.ukinstead of merging all.co.ukdomains into one rate limit bucket - Prompt injection detection regex broadened to catch determiner-before-modifier evasion variants (e.g. "ignore your previous instructions", "forget the prior rules")
- RFC 6455 compliance: WebSocket proxy now sends masked close frames to upstream connections (previously sent unmasked server-style frames)
Changed
- Telemetry label split: WebSocket protocol enforcement events (binary frame rejection, fragment errors) now emit scanner label
ws_protocolinstead ofpolicy. Thepolicylabel is now exclusively for MCP tool policy violations. MITRE mapping:ws_protocolmaps to T1071 (Application Layer Protocol),policyremains T1059 (Command and Scripting Interpreter). Update any dashboards or alert rules that filter onscanner="policy"for WebSocket-specific events. internal/wsutilpackage extracted: shared WebSocket utilities (fragment reassembly, close frames, error classification) used by both the HTTP WS proxy and MCP WS transport- Anomaly audit events now include
scanneras a structured field with MITRE technique mapping (previously embedded in reason string) - README slimmed from 829 to ~490 lines; full configuration YAML replaced with link to
docs/configuration.md, forward proxy quick start moved to collapsible section - Quick start updated to use
pipelock check(works without running the proxy) golang.org/x/netpromoted from indirect to direct dependency (publicsuffix for ccTLD handling)
- WebSocket MCP transport:
-
v0.3.027 Feb 2026Release notes
Open source →Added
- Kill switch: emergency deny-all with four activation sources (config, SIGUSR1 signal, sentinel file, HTTP API), OR-composed so any single source blocks all proxy traffic
- Kill switch API:
POST /api/v1/killswitch(activate/deactivate) andGET /api/v1/killswitch/status(per-source state) with bearer token auth, rate limiting, and input hardening (MaxBytesReader, DisallowUnknownFields, strict EOF enforcement) - Kill switch port isolation:
api_listenconfig field runs the kill switch API on a dedicated port, preventing agents from deactivating their own kill switch in sidecar deployments - Event emission: fire-and-forget dispatch to webhook and syslog sinks with independent severity filters (
info,warn,critical), configurableinstance_id, and async buffered delivery - Webhook sink: HTTP POST with bearer token auth, configurable timeout and queue size, background worker with graceful shutdown
- Syslog sink: UDP/TCP delivery with configurable facility, tag, and severity mapping to syslog priority levels
- Finding suppression: silence known false positives via config (
suppressentries with rule name, path glob, and reason) or inline// pipelock:ignoresource comments - Tool call chain detection: subsequence matching on MCP tool call sequences with 8 built-in attack patterns (recon, credential theft, data staging, exfiltration), configurable window size, time-based eviction, and max-gap constraint
- Session profiling and adaptive enforcement config sections (scoring-only in v1, observability groundwork)
- Health endpoint now reports
kill_switch_activefield - Preset configs (strict, balanced) updated with kill switch and emit examples (commented out)
- DLP: 6 new patterns: Fireworks API Key, Google API Key, Google OAuth Client Secret (GOCSPX), Slack App Token (
xapp-), JWT Token, Google OAuth Client ID - DLP: expanded AWS Access ID detection from AKIA-only to all 9 credential prefixes (AKIA, ASIA, AROA, AIDA, AIPA, AGPA, ANPA, ANVA, A3T)
- DLP: expanded GitHub Token detection to cover all 5 token types (ghp, gho, ghu, ghs, ghr)
- All 6 preset configs (balanced, strict, audit, claude-code, cursor, generic-agent) updated with expanded DLP pattern set (22 patterns)
- DLP
include_defaultsconfig field: when true (default), user-defined DLP patterns are merged with built-in defaults by name, so new default patterns are automatically added on binary upgrade without requiring config changes. Setinclude_defaults: falseto use only user-defined patterns (previous behavior). Same field available forresponse_scanning. - Finding suppression guide (
docs/guides/suppression.md): documents all three suppression layers (inline comments, config entries,--excludeflag), available rule names, path matching styles, and GitHub Action integration
Fixed
- Close WebSocket cross-message DLP bypass: secrets split across WebSocket text frames are now detected via fragment reassembly buffer scanning (PR #140)
- Close header rotation evasion: IP-level domain tracking prevents agents from rotating Host/Origin headers to bypass per-domain rate limits (PR #141)
Changed
- MCP package refactored into sub-packages:
transport,tools,policy,jsonrpcfor clearer separation of concerns - Audit logger enhanced with event emission dispatch: audit calls now route to configured webhook/syslog sinks based on severity
- Normalize package extracted as
internal/normalizewithForPolicyvariant for MCP tool policy command matching
-
v0.2.924 Feb 2026Release notes
Open source →Added
- WebSocket proxy:
/ws?url=ws://...endpoint with bidirectional frame relay, DLP + injection scanning on text frames, fragment reassembly, message size limits, SSRF-safe upstream dialer, auth header forwarding with DLP scanning, concurrency limits, connection lifetime and idle timeout controls, and Prometheus metrics - WebSocket configuration:
websocket_proxysection in config withmax_message_bytes,scan_text_frames,allow_binary_frames,strip_compression,max_connection_seconds,idle_timeout_seconds,origin_policy, andmax_concurrent_connections - WebSocket health reporting:
/healthendpoint includeswebsocket_proxy_enabledfield - All 6 preset configs updated with
websocket_proxydefaults (disabled by default) --excludeflag forpipelock auditandpipelock git scan-diff: filter findings by path using globs (*.generated.go) or directory prefixes (vendor/). Repeatable for multiple patterns.- GitHub Action
exclude-pathsinput: newline-separated path patterns passed to both audit and scan-diff steps
- WebSocket proxy:
-
v0.2.823 Feb 2026Release notes
Open source →Fixed
- Close 9 scanner evasion bypasses found during red team testing: hex/base64-encoded secrets in URL query params and path segments, vowel-fold flag corruption on
(?im)patterns, strip mode fail-open when detection came from non-redactable passes, and missing normalization passes on decoded response content (PR #135) - Close 3 DLP evasion bypasses in query parameter scanning: iterative URL-decode, noise-stripped values, and dot-collapsed subdomain splits now applied to individual query keys and values (PR #134)
Changed
- Encoding attribution: segment-level DLP matches now carry correct encoding labels (hex, base64, base32) instead of always reporting "hex"
- Response scanning decoded-content path runs all normalization passes (primary, opt-space, vowel-fold), closing a gap where base64/hex-encoded vowel-substituted injection could bypass detection
- Logo tagline updated to "Agent Firewall"
- Close 9 scanner evasion bypasses found during red team testing: hex/base64-encoded secrets in URL query params and path segments, vowel-fold flag corruption on
-
v0.2.722 Feb 2026Release notes
Open source →Added
- MCP HTTP reverse proxy:
--mcp-listen+--mcp-upstreamflags onpipelock runcreate an HTTP-to-HTTP scanning proxy with bidirectional JSON-RPC 2.0 validation, Authorization header DLP scanning, and fail-closed parse error handling (PR #127) - MCP standalone HTTP listener:
pipelock mcp proxy --listen :8889 --upstream http://host/mcpfor deployments that only need MCP scanning without the fetch/forward proxy (PR #127) - JSON-RPC 2.0 structural validation on HTTP listener: rejects non-string method types, wrong/missing jsonrpc version, and missing method field with proper -32600 error codes; batch requests pass through to per-element scanning (PR #127)
- CI dogfooding: Pipelock's own GitHub Action runs on every PR, scanning diffs for exposed credentials and injection patterns (PR #126)
Fixed
- Release workflow: semver-only tag filter (
v*.*.*) prevents floating tags likev1from triggering spurious GoReleaser releases (PR #126) - Auto-move
v1floating tag after each semver release so the GitHub Action always resolves to the latest version (PR #126)
Changed
- MCP auto-enable default:
mcp_input_scanning.actionchanged fromwarntoblockwhen auto-enabled in proxy mode, preventing credential forwarding in balanced configs (PR #127) - Default response scanning and DLP patterns auto-populated when MCP listener enables scanning on an unconfigured section (PR #127)
- MCP HTTP reverse proxy:
-
v0.2.622 Feb 2026Release notes
Open source →Added
- HTTP forward proxy: standard CONNECT tunneling and absolute-URI HTTP forwarding on the same port as the fetch proxy. Set
HTTPS_PROXY=http://localhost:8888and all agent HTTP traffic flows through the scanner pipeline. Configurable tunnel duration and idle timeout controls (PR #123) - Tunnel observability: Prometheus metrics (tunnel count, bytes transferred, duration histogram, active gauge), JSON stats, and structured audit logs for tunnel open/close events (PR #123)
- GitHub Action (
luckyPipewrench/pipelock): composite action for CI/CD agent security scanning with checksum-verified binary download, multi-arch (amd64/arm64) and multi-OS (Linux/macOS) support, fail-closed audit gate, PR diff secret scanning, inline GitHub annotations on findings, and job summary (PR #125) - CI workflow examples for basic and advanced GitHub Action usage (PR #125)
Changed
- Forward proxy enabled by default in all 6 preset configs: balanced, strict, audit, claude-code, cursor, generic-agent (PR #125)
- Action string constants extracted to
configpackage (ActionBlock,ActionWarn,ActionAsk,ActionStrip,ActionForward), replacing ~70 hardcoded literals across 12 files (PR #124) - README rewritten with forward proxy "zero code changes" quickstart as primary path, refreshed benchmarks and testing stats, honest security assessment section (PR #122, #125)
- Copyright updated to legal name in LICENSE (PR #122)
- HTTP forward proxy: standard CONNECT tunneling and absolute-URI HTTP forwarding on the same port as the fetch proxy. Set
-
v0.2.521 Feb 2026Release notes
Open source →Added
- MCP
--envflag: pass specific environment variables to child processes without exposing the full environment (PR #119)
Fixed
- Tool poisoning detection: instruction tag patterns (
<IMPORTANT>,<system>) and dangerous capability patterns (file exfil, cross-tool manipulation) hardened via adversarial testing (PR #117)
Changed
- Rebrand from "security harness" to "agent firewall" across all user-facing surfaces: CLI, README, docs, demo, Homebrew formula (PR #120)
- Extract
internal/normalizepackage: consolidate Unicode normalization pipeline, addForPolicyvariant for command matching (PR #116) - Documentation refresh: updated comparison matrix, stale references, testing stats (PR #118)
- MCP
-
v0.2.419 Feb 2026Release notes
Open source →Added
- MCP Streamable HTTP transport:
pipelock mcp proxy --upstream <url>bridges stdio clients to remote MCP servers over HTTP with SSE stream support and session lifecycle management (PR #112) - Pre-execution tool call policy: configurable
mcp_tool_policyblocks dangerous commands (rm -rf, curl to external, chmod 777) before MCP tools execute, with pairwise token matching and whitespace normalization (PR #107) - Known secret scanning:
dlp.secrets_fileconfig loads explicit secrets from file, scans URLs and MCP tool arguments for raw + base64/hex/base32 encoded variants including unpadded forms (PR #111) pipelock testCLI command: validates scanner coverage against loaded config with structured pass/fail output per scanner layer (PR #109)- Framework integration guides: OpenAI Agents SDK, Google ADK, AutoGen (PR #110)
- GOVERNANCE.md, ROADMAP.md, and security assurance documentation for OpenSSF Silver (PR #108)
- OpenSSF Best Practices Silver badge (PR #114)
Fixed
- Unicode bypass in injection and DLP scanning: full homoglyph normalization (Cyrillic, Greek, Armenian, Cherokee), combining mark stripping, leetspeak normalization, 6 new injection patterns (PR #105)
- govulncheck CI flake: pinned Go version to 1.24.13 to prevent runner cache inconsistency (PR #113)
- Codecov targets raised to 95% project / 90% patch (PR #113)
Changed
- README Quick Start reordered:
pipelock checkbeforepipelock runsince check doesn't need a running proxy (PR #113) - CONTRIBUTING.md updated with complete CLI command list and project structure (PR #113)
- Demo script uses
DEMO_TMPDIRinstead ofTMPDIRto avoid shadowing POSIX env var (PR #113) - CI matrix tests Go 1.24 + 1.25 (PR #113)
- MCP Streamable HTTP transport:
-
v0.2.316 Feb 2026Release notes
Open source →Added
- MCP transport abstraction:
MessageReader/MessageWriterinterfaces decouple scanning from stdio framing, preparing for HTTP transport - Demo command: 7 attack scenarios (was 5), adding MCP input secret leak and tool description poisoning demos
- Demo ANSI color output with
NO_COLORenv var support and TTY detection - Demo
--interactiveflag for live presentations (pauses between scenarios) - CrewAI integration guide (
docs/guides/crewai.md) - LangGraph integration guide (
docs/guides/langgraph.md) WriteMessagesize guard (10 MB limit) prevents unbounded memory allocation on malformed inputmaxLineSizeguard on stdio message reader for consistency with write path
Fixed
- Strict-mode API allowlist enforcement: requests to non-allowlisted domains now blocked in strict mode (was warn-only)
- MCP no-params DLP bypass: requests with missing
paramsfield bypassed input scanning entirely - Encoded secret bypass in MCP input: multi-layer percent-encoding could evade DLP patterns
- Display URL normalization: audit log URLs now consistently decoded for readability
- Three static analysis findings:
ViolationPermissionsfield visibility, HITL reload-to-ask warning, stale comment
Changed
- Demo "MCP Tool Poisoning" scenario renamed to "MCP Response Injection" for clarity
iterativeDecodeconsolidated into single exported function (was duplicated across scanner paths)- Write errors in
syncWriterandStdioWriternow wrapped with context - Bumped
sigstore/cosign-installerfrom 3.10.1 to 4.0.0
- MCP transport abstraction:
-
v0.2.3-0.20260215230518-68e08ef7592515 Feb 2026 pre-releaseNothing published for this version
-
v0.2.215 Feb 2026Release notes
Open source →Added
- MCP tool description scanning: detects poisoned tool descriptions containing hidden instructions (
<IMPORTANT>tags, file exfiltration directives, cross-tool manipulation) - MCP tool rug-pull detection: SHA256 baseline tracks tool definitions per session, alerts when descriptions change mid-session
mcp_tool_scanningconfig section (action: warn/block, detect_drift: true/false)- Auto-enabled in
mcp proxymode unless explicitly configured - Unicode normalization (NFKC) and C0 control character stripping in tool description scanning
- Recursive schema extraction: scans
descriptionandtitlefields from nestedinputSchemaobjects - JSON-RPC batch response handling for tool scanning
CODEOWNERSfile for automatic review assignment- Cosign keyless signing for release checksums (Sigstore transparency log)
- Manual trigger (
workflow_dispatch) for OpenSSF Scorecard workflow
Fixed
- Fetch proxy URL parameter truncation: unencoded
&in target URLs silently truncated secrets from DLP scanner - Fetch proxy control character bypass:
%00,%08,%09,%0ain target URLs broke DLP regex matching - Empty-name tool bypass: tools with no
namefield bypassedtools/listscanning entirely - Baseline capacity DoS: malicious servers could force hash computation on unlimited unique tool names (added capacity cap with
ShouldSkip())
Changed
- Branch protection: squash-only merges, stale review dismissal
- MCP tool description scanning: detects poisoned tool descriptions containing hidden instructions (
-
v0.2.2-0.20260215041950-0e380176146215 Feb 2026 pre-releaseNothing published for this version
-
v0.2.115 Feb 2026Release notes
Open source →Added
- SLSA build provenance attestation for all release binaries and container images
- CycloneDX SBOM generated and attached to every release
- OpenSSF Scorecard workflow with results published to GitHub Security tab
govulncheckCI job scanning Go dependencies for known vulnerabilitiesgo mod verifystep in CI and release pipelines- OpenSSF Scorecard badge in README
- OpenSSF Best Practices passing badge in README
- Release verification instructions in README (
gh attestation verify)
Changed
- All GitHub Actions pinned to commit SHAs (supply chain hardening)
- Release workflow now includes
id-tokenandattestationspermissions for provenance signing - Explicit top-level
permissions: contents: readin CI workflow (least privilege) - Release attestation steps use
continue-on-errorwith final verification (prevents cascading failures) - Container digest resolution uses
::warningannotation instead of silent fallback govulncheck,cyclonedx-gomod, andcranepinned to specific versions (not@latest)- Docker base images pinned by SHA256 digest (Scorecard Pinned-Dependencies)
- Write permissions moved from workflow-level to job-level (Scorecard Token-Permissions)
- Branch protection: added PR requirement, lint as required check, strict status policy, review thread resolution
Fixed
- Fetch proxy DNS subdomain exfiltration: dot-collapse scanning now applied to hostnames in
checkDLP(was only on MCP text scanning side) - MCP content block split bypass:
ExtractTextnow joins blocks with space separator (was\n, allowing between-word injection splits to evade detection) - Git DLP case sensitivity:
CompileDLPPatternsnow applies(?i)prefix, matching URL scanner behavior - Rate limiter subdomain rotation:
checkRateLimitnow usesbaseDomain()normalization, preventing per-subdomain rate limit evasion - Response scanning Unicode whitespace bypass: added
normalizeWhitespace()for Ogham space (U+1680), Mongolian vowel separator (U+180E), and line/paragraph separators - Agent name path traversal:
ValidateAgentNamenow rejects names containing..or equal to. - URL DLP NFKC normalization: applied
norm.NFKC.String()before DLP pattern matching, consistent with response scanning
-
v0.2.008 Feb 2026Release notes
Open source →Added
- MCP input scanning: bidirectional proxy now scans client requests for DLP leaks and injection in tool arguments
mcp_input_scanningconfig section (action: warn/block, on_parse_error: block/forward)- Auto-enabled in
mcp proxymode unless explicitly configured - Iterative URL decoding in text DLP (catches double/triple percent-encoding)
- Method name and request ID fields included in DLP scan coverage
- OPENSSH private key format added to Private Key Header DLP pattern
- Split-key concatenation scanning: detects secrets split across multiple JSON arguments
- DNS subdomain exfiltration detection: dot-collapse scanning catches secrets split across subdomains
- Case-insensitive DLP pattern matching: prevents evasion via
.toUpperCase()or mixed-case secrets - Null byte stripping in scanner pipeline: prevents regex-splitting bypass via
\x00injection - 55+ new tests for input scanning, text DLP, and config validation
Changed
- CI workflow: removed redundant
go vetandgo mod verifysteps, combined duplicate test runs, added job timeouts - Audit preset
on_parse_errorchanged fromblocktoforward(consistent with observe-only philosophy) - Config validation rejects
askaction for input scanning (no terminal interaction on request path) - CLI auto-enable checks both
enabledandactionfields (unconfigured = both at zero values)
-
v0.1.812 Feb 2026Release notes
Open source →Added
- Audit log sanitization: ANSI escapes and control characters stripped from all log fields (
internal/audit/logger.go) - Data budget enforcement per registrable domain (prevents subdomain variation bypass)
- Hex-encoded environment variable leak detection
- Container startup warning when running as root
- HITL channel drain before each prompt (prevents stale input from prior timeout)
- DLP patterns for
github_pat_fine-grained PATs and Stripe keys ([sr]k_(live|test)_) - Fuzz test for audit log sanitizer
- Integrity manifest path traversal protection
- 970+ tests passing with
-race
Security
- MCP proxy fail-closed: unparseable responses now blocked in all action modes (was forwarding in warn/strip/ask)
- MCP batch scanning fail-closed: parse errors on individual elements now propagate as dirty verdict
- MCP strip recursion depth limit (
maxStripDepth=4) prevents stack overflow from nested JSON arrays
Fixed
- DLP pattern overlap: OpenAI Service Key narrowed to
sk-svcacct-(wassk-(proj|svcacct)-, overlapping with existingsk-proj-pattern) - Redirect-to-SSRF: blocked flag now set on redirect hops (redirect to private IP was not caught)
- Rate limiter returns HTTP 429 Too Many Requests (was returning 403)
- io.Pipe resource leak in HITL tests
Removed
- SKILL.md (external skill-registry listing discontinued)
- Audit log sanitization: ANSI escapes and control characters stripped from all log fields (
-
v0.1.612 Feb 2026Release notes
Open source →Added
--jsonflag forgit scan-diffcommand (CI/CD integration)- Fuzz tests for 8 security-critical functions across 4 packages
- 660+ tests passing with
-race
Security
- IPv4-mapped IPv6 SSRF bypass:
::ffff:127.0.0.1now normalized viaTo4()before CIDR matching - MCP ToolResult schema bypass: result field uses
json.RawMessagewith recursive string extraction fallback - MCP zero-width Unicode stripping applied to response content scanning
- DNS subdomain exfiltration: DLP/entropy checks now run on hostname before DNS resolution
--no-prefixgit diff bypass: parser accepts+++ filenamewithoutb/prefix- MCP error messages (
error.messageanderror.data) now scanned for injection - Double URL encoding DLP bypass: iterative decode (max 3 rounds) on path segments
- Default SSRF CIDRs: added
0.0.0.0/8and100.64.0.0/10(CGN/Tailscale) - CRLF line ending normalization in git diff parsing
ReadHeaderTimeoutadded to HTTP server (Slowloris protection)- Non-text MCP content blocks now scanned (was skipping non-
texttypes)
Fixed
- Homebrew formula push: use
HOMEBREW_TAP_TOKENsecret for cross-repo access
-
v0.1.6-0.20260211005232-234dea1ea8d511 Feb 2026 pre-releaseNothing published for this version
-
v0.1.511 Feb 2026Release notes
Open source →Added
pipelock auditcommand: scans projects for security gaps, generates score (0-100) and suggested config (internal/projectscan/)pipelock democommand: 5 self-contained attack scenarios (DLP, injection, blocklist, entropy, MCP) using real scanner pipeline- OWASP Agentic AI Top 15 threat mapping (
docs/owasp-agentic-top15-mapping.md, 12/15 threats covered) - 14 scanner pipeline benchmarks with
make benchtarget (~3 microseconds per allowed URL) - Grafana dashboard JSON (
configs/grafana-dashboard.json, 7 panels, 3 rows) - SVG logo
- Public contributor guide (
CLAUDE.md) - CONTRIBUTING.md expanded with detailed development workflow
- 756+ tests passing with
-race
Fixed
- Audit score: critical finding penalty (-5 per leaked secret found)
- DLP pattern compilation deduplication
- Follow mode context-aware shutdown in
logscommand - Blog links updated from GitHub Pages to pipelab.org
- OWASP mapping updated to 2026 final category names
-
v0.1.5-0.20260209195705-21560d7d399b09 Feb 2026 pre-releaseNothing published for this version
-
v0.1.409 Feb 2026Release notes
Open source →Added
- MCP stdio proxy mode:
pipelock mcp proxy -- <command>wraps any MCP server, scanning responses in real-time (internal/mcp/proxy.go) - Human-in-the-loop terminal approvals:
action: askprompts for y/N/s with configurable timeout (internal/hitl/) - Agent-specific config presets:
configs/claude-code.yaml,configs/cursor.yaml,configs/generic-agent.yaml - Claude Code integration guide (
docs/guides/claude-code.md) - Homebrew formula in GoReleaser config
- Asciinema demo recording embedded in README
Fixed
- Makefile VERSION fallback:
git describefailure no longer produces empty version string - OpenAI API key DLP regex: now matches keys containing
-and_characters - HITL approver data race: single reader goroutine pattern eliminates concurrent
bufio.Readeraccess on timeout - GoReleaser v2:
folderrenamed todirectoryin Homebrew brews config
- MCP stdio proxy mode:
-
v0.1.309 Feb 2026Release notes
Open source →Added
- File integrity monitoring for agent workspaces (
pipelock integrity init|check|update) - SHA256 manifest generation with glob exclusion patterns (
**doublestar support) - Integrity check reports: modified, added, and removed file detection
- JSON output mode for integrity checks (
--jsonflag) - Custom manifest path support (
--manifestflag) - Atomic manifest writes (temp file + rename) to prevent corruption
- Manifest version validation and nil-files guard on load
- Ed25519 signing for file and manifest verification (
pipelock keygen|sign|verify|trust) - Key storage under
~/.pipelock/with versioned format headers - Trusted key management for inter-agent signature verification
- Path traversal protection in keystore operations
- MCP JSON-RPC 2.0 response scanning for prompt injection (
pipelock mcp scan) - MCP scanning: text extraction from content blocks, split-injection detection via concatenation
- MCP scanning:
--jsonoutput mode (one verdict per line) and--configflag - Blog at pipelab.org/blog/
- 530+ tests passing with
-race
Fixed
- DLP bypass: secrets in URL hostnames/subdomains now scanned (full-URL DLP scan)
- DLP bypass: secrets split across query parameters now detected
- README: corrected signing CLI syntax, agent types, health version example
- GoReleaser: added missing BuildDate/GitCommit/GoVersion ldflags
- Blog: fixed hallucinated product name, removed stale "coming next" reference
Security
json.RawMessagenull bypass prevention (MCP result always scanned regardless of error field)
Removed
- Stale Phase 1.5 planning doc (planning docs live outside the repo)
- File integrity monitoring for agent workspaces (
-
v0.1.3-0.20260209005238-4350fc3d7fd809 Feb 2026 pre-releaseNothing published for this version
-
v0.1.208 Feb 2026Release notes
Open source →Added
- CodeQL security scanning workflow
- Codecov coverage integration and badge
- Go Report Card badge
Fixed
- All 53 golangci-lint warnings resolved (zero-warning CI baseline)
- 363 tests passing with
-race
-
v0.1.108 Feb 2026Release notes
Open source →Changed
- CLI commands write to
cmd.OutOrStdout()instead ofos.Stdout(cobra-idiomatic) runcommand usescmd.Context()as signal parent for testability
Added
- Run command integration test (config loading, flag overrides, health check, graceful shutdown)
- Docker Compose YAML syntax validation test (all agent templates parsed via
yaml.Unmarshal) - Base64url environment variable leak detection test
- Rate limiter window rollover test
- Healthcheck command test against running server
- 363 tests passing with
-race
- CLI commands write to
-
v0.1.008 Feb 2026Release notes
Open source →Added
- Fetch proxy server with
/fetch,/health,/metrics, and/statsendpoints - URL scanning pipeline: scheme check, SSRF protection, domain blocklist, rate limiting, URL length, DLP regex, Shannon entropy
- SSRF protection with configurable CIDR ranges (IPv4 + IPv6), fail-closed DNS resolution, DNS rebinding prevention via pinned DialContext
- DLP pattern matching for API keys, tokens, secrets (Anthropic, OpenAI, GitHub, Slack, AWS, Discord, private keys, SSNs)
- Shannon entropy analysis for detecting encoded/encrypted data in URL segments
- Environment variable leak detection: scans URLs for high-entropy env var values (raw + base64-encoded)
- Domain blocklist with wildcard support (
*.pastebin.com) - Per-domain rate limiting with sliding window and configurable
max_requests_per_minute - Response scanning: fetched page content scanned for prompt injection patterns (block/strip/warn actions)
- Multi-agent support:
X-Pipelock-Agentheader identifies calling agents; agent name included in audit logs and fetch responses - Agent name sanitization to prevent log injection
- Structured JSON audit logging via zerolog (allowed, blocked, error, anomaly, redirect events)
- YAML configuration with validation and sensible defaults
- Config hot-reload via fsnotify file watching and SIGHUP signal (when using
--config) - Hot-reload panic recovery: invalid config reloads are caught and logged without crashing the proxy
- Three operating modes: strict, balanced (default), audit
- CLI commands:
run,check,generate config,generate docker-compose,logs,git scan-diff,git install-hooks,version,healthcheck - Config presets:
configs/balanced.yaml,configs/strict.yaml,configs/audit.yaml - Docker Compose generation for network-isolated agent deployments (
pipelock generate docker-compose) - HTML content extraction via go-readability
- Redirect following with per-hop URL scanning (max 5 redirects)
- Graceful shutdown on SIGINT/SIGTERM
- Prometheus metrics:
pipelock_requests_total,pipelock_scanner_hits_total,pipelock_request_duration_seconds - JSON stats endpoint: top blocked domains, scanner hits, block rate, uptime
- Build metadata injection via ldflags (version, date, commit, Go version)
- Docker support: scratch-based image (~15MB), multi-arch (amd64/arm64), GHCR via GoReleaser
- GitHub Actions CI (Go 1.24 + 1.25, race detector, vet)
- 345 tests with
-race
- Fetch proxy server with