Bagel is a cross‑platform CLI that inspects developer workstations BoostSecurity released Bagel, a cross-platform command-line tool that scans developer workstations on macOS, Linux and Windows and outputs a JSON report of dev tool configurations and secret locations, recording only metadata and never secret values. Bagel runs 9 probes (Git, SSH, npm, environment variables, shell history, AWS/GCP/Azure cloud credentials, JetBrains IDEs, GitHub CLI and AI CLI tools) and 8 secret detectors, flags risky settings such as http.sslVerify=false and ForwardAgent yes, and supports a --strict flag for enforcing baseline posture checks in CI. The tool is read-only, local-first and installable via Homebrew, release tarballs or a Go 1.25 build, with an enterprise version offered as BoostSecurity Developer Endpoint Protection. Inventory what matters on developer machines—tools, configs, and metadata about secrets —to improve org supply‑chain security without exfiltrating payloads. Bagel is a cross‑platform CLI that inspects developer workstations macOS, Linux, Windows and produces a structured report of: - Dev tool configurations and risky settings across 9 probes: Git, SSH, npm, environment variables, shell history, cloud credentials AWS/GCP/Azure , JetBrains IDEs, GitHub CLI, and AI CLI tools. - Secret locations metadata only : presence of tokens, keys, and credentials in config files, env vars, and history—detected by 8 secret detectors— never the secret values . For detailed documentation on each probe and detector, see the Bagel docs site https://boostsecurityio.github.io/bagel/ . Looking for more? If you want a more powerful, enterprise-grade version with the ability to deploy at scale and collect posture information across your entire developer laptop fleet, have a look at the BoostSecurity Developer Endpoint Protection DEP product https://boostsecurity.io/solution/developer-endpoint . - No payloads. Ever. Bagel records only metadata path, owner, perms, timestamps, config flags, key type/length/expiry . Secret values are never included in output or written to disk. - Local‑first. Reports are printed to stdout as JSON by default. - Minimally intrusive. Read‑only operations; no process injection; no network scanners. - Transparent. Every probe is documented and can be toggled via configuration. Modern supply‑chain risk often lands on developer endpoints malicious packages, misconfig creds, weak key hygiene . Bagel standardizes visibility so security teams can: - Find high‑signal misconfigs e.g., http.sslVerify=false , ForwardAgent yes , plaintext creds files, unencrypted SSH keys . - Detect leaked secrets in shell history, .env files, and config files. - Enforce baseline posture checks in CI with --strict . - Git : credential.helper=store , http.sslVerify=false , custom core.sshCommand with non‑standard binaries, dangerous protocols, fsck disabled. - npm : tokens in .npmrc , strict-ssl=false , HTTP non‑HTTPS registries. - SSH : keys without passphrase, ForwardAgent yes , StrictHostKeyChecking=no , permissive file modes. - Environment & history : secrets embedded in env vars, .env files, or shell command history. - Cloud : AWS credentials, GCP API keys, Azure storage keys in config files. Download the latest release from GitHub Releases https://github.com/boostsecurityio/bagel/releases . macOS: Intel Mac curl -sL https://github.com/boostsecurityio/bagel/releases/latest/download/bagel Darwin x86 64.tar.gz | tar xz sudo mv bagel /usr/local/bin/ Apple Silicon curl -sL https://github.com/boostsecurityio/bagel/releases/latest/download/bagel Darwin arm64.tar.gz | tar xz sudo mv bagel /usr/local/bin/ Homebrew: brew install bagel Linux: x86 64 curl -sL https://github.com/boostsecurityio/bagel/releases/latest/download/bagel Linux x86 64.tar.gz | tar xz sudo mv bagel /usr/local/bin/ ARM64 curl -sL https://github.com/boostsecurityio/bagel/releases/latest/download/bagel Linux arm64.tar.gz | tar xz sudo mv bagel /usr/local/bin/ Windows: Download bagel Windows x86 64.zip from the releases page https://github.com/boostsecurityio/bagel/releases , extract it, and add it to your PATH. Invoke-WebRequest -Uri "https://github.com/boostsecurityio/bagel/releases/latest/download/bagel Windows x86 64.zip" -OutFile "bagel.zip" Expand-Archive -Path "bagel.zip" -DestinationPath "." Requires Go 1.25 or later. git clone https://github.com/boostsecurityio/bagel.git cd bagel go build -o bagel ./cmd/bagel bagel version bagel scan This scans your workstation and outputs findings to stdout in JSON format. | Flag | Description | |---|---| | --format , -f | Output format: json default , table | | --output , -o | Write output to a file instead of stdout | | --strict | Exit with code 2 if any findings are detected | | --no-cache | Bypass file index cache and force rebuild | | --no-progress | Disable progress bars | | --verbose , -v | Enable verbose debug logging | | --config | Path to configuration file | | --disable-version-check | Disable the once-per-day check for newer bagel releases env: BAGEL DISABLE VERSION CHECK , config: disable version check | Save report to a file bagel scan -o report.json Table output for quick review bagel scan -f table CI gate: fail the build if findings exist bagel scan --strict Debug a specific scan bagel scan --verbose --no-progress Bagel uses a YAML configuration file. It looks for bagel.yaml in these locations in order : 1. Path specified with --config 2. Current directory ./bagel.yaml 3. Platform config directory ~/.config/bagel/bagel.yaml on Unix, %APPDATA%\bagel\bagel.yaml on Windows version: 1 probes: git: enabled: true ssh: enabled: true npm: enabled: true env: enabled: true shell history: enabled: true cloud: enabled: true jetbrains: enabled: true gh: enabled: true ai credentials: enabled: true ai chats: enabled: true privacy: redact paths: exclude env prefixes: output: include file hashes: false include file content: false All probes are enabled by default. To disable a probe, set enabled: false . By default, bagel reaches out at most once every 24 hours to check whether a newer release is available. The request reports the current bagel version, an anonymous instance identifier persisted under the platform config directory ~/.config/bagel/version-check.yaml on Unix, %APPDATA%\bagel\version-check.yaml on Windows , and a count of CLI invocations since the last check. No scan, host, or finding data is sent. To disable, use any of: - --disable-version-check flag - BAGEL DISABLE VERSION CHECK=1 environment variable - disable version check: true in bagel.yaml { "metadata": { "version": "0.1.0", "timestamp": "2026-02-10T12:00:00Z", "duration": "1.234s" }, "host": { "hostname": "dev-laptop", "os": "darwin", "arch": "arm64", "username": "dev", "system": { "os version": "15.3", "kernel version": "Darwin 25.2.0", "cpu model": "Apple M1", "cpu cores": 8, "ram total gb": 16 } }, "findings": { "id": "git-ssl-verify-disabled", "probe": "git", "severity": "high", "title": "Git SSL Verification Disabled", "message": "Git is configured to skip SSL certificate verification...", "path": "git-config:http.sslverify" }, { "id": "ssh-private-key-rsa", "probe": "ssh", "severity": "critical", "title": "Unencrypted SSH Private Key Detected RSA ", "message": "An unencrypted RSA SSH private key was detected...", "path": "file:/Users/dev/.ssh/id rsa" } } - Probes : small, hermetic modules that scan specific areas of the system. - Detectors : reusable secret detection patterns used by probes. - Collector : orchestrates probes with timeouts and resource caps. - Reporters : render JSON or table output; emit exit codes for CI. Each probe declares its scope user/system , paths touched, env vars read, and risk rules it can emit. | Probe | Description | What it checks | |---|---|---| | git | Git configuration security | SSL verification disabled, SSH config issues StrictHostKeyChecking, UserKnownHostsFile , plaintext credential storage credential.helper=store , dangerous protocols ext, fd, file , fsck disabled, proxy settings, custom hooks path | | ssh | SSH configuration and key security | StrictHostKeyChecking=no , UserKnownHostsFile=/dev/null , ForwardAgent=yes , private key file permissions, unencrypted private keys | | npm | NPM/Yarn configuration | .npmrc and .yarnrc files: strict-ssl=false , HTTP non-HTTPS registries, always-auth settings | | env | Environment variables and dotfiles | Environment variables, shell config files .bashrc , .zshrc , .env files for embedded secrets | | shell history | Shell history files | .bash history , .zsh history for secrets in command history | | cloud | Cloud provider credentials | AWS ~/.aws/config , ~/.aws/credentials , GCP ~/.config/gcloud/ , Azure config files | | jetbrains | JetBrains IDE configuration | JetBrains IDE workspace files and configuration for embedded secrets | | gh | GitHub CLI | GitHub CLI authentication tokens and configuration | | ai cli | AI CLI tools | Credential files and chat logs for Gemini, Codex, Claude, and OpenCode | | Detector | Description | Patterns detected | |---|---|---| | github-token | GitHub authentication tokens | Classic PAT ghp , Fine-grained PAT github pat , OAuth gho , App User-to-Server ghu , App Server-to-Server ghs , Refresh Token ghr | | npm-token | NPM authentication tokens | NPM auth tokens npm | | ai-service | AI service API keys | OpenAI sk- , Anthropic sk-ant-api03- , sk-ant-admin01- , Hugging Face hf , api org | | http-authentication | HTTP auth credentials | Bearer tokens, Basic Auth headers, API key headers X-API-Key , etc. , Basic Auth in URLs http://user:pass@host | | ssh-private-key | SSH private keys | RSA, DSA, EC, OPENSSH, PKCS8 keys; detects encrypted vs unencrypted | | cloud-credentials | Cloud provider credentials | AWS Access Key ID AKIA , ASIA , etc. , GCP API Key AIza , Azure Storage Account Key | | generic-api-key | Generic secrets | High-entropy strings matching common secret patterns uses Shannon entropy analysis | | jwt | JSON Web Tokens | JWT tokens eyJ prefix with standard JWT structure | | OS | Support | |---|---| | macOS Intel & Apple Silicon | Full support | | Linux x86 64 & ARM64 | Full support | | Windows x86 64 | Full support with platform-specific file paths and PowerShell history | All probes work cross-platform with appropriate path handling for each OS. Fork addition -- not in upstream Bagel. bagel scrub removes credentials from AI CLI session logs and shell history files, replacing them with REDACTED-