Some code cannot be handed to a cloud service. The Safeguard local runner exists for that case. It is not a separate product. It is a mode of the safeguard CLI that runs the platform's scan jobs on your own machine.
How it works
Install the CLI, open the interactive terminal, sign in, and the machine starts polling the platform for jobs assigned to it.
# macOS and Linux
curl -fsSL https://cli.safeguard.sh/install | bash
# Windows
irm https://cli.safeguard.sh/install.ps1 | iex
safeguard
# type /login, approve the session in your browser
The first run downloads the scanner tools and the vulnerability database. Per the runner docs:
- The runner sends a heartbeat and polls for jobs. All traffic is outbound HTTPS that the runner opens. Nothing connects to it.
- It executes a claimed job with its own local scan server.
- It uploads the result files, the SBOM and findings, and reports job status. Source code stays on the machine.
When to use it
The docs name three cases: a private repository where you cannot or will not give a cloud service OAuth access, a restricted network where only outbound HTTPS is allowed, and work on code you have not pushed yet.
Headless and assistant modes
safeguard runner start --workspace ./path/to/repo
safeguard runner status
safeguard runner stop
On networks that forbid held connections, the docs describe a poll wait option to use fixed interval polling instead. There is also a permission mode that sets how much the assistant may do without asking, from supervised to autonomous.
The assistant runs on the same machine:
safeguard agent "fix the critical CVEs in this repository"
safeguard exec "summarise the critical findings"
The exec command is for scripts and CI. It defaults to strict permissions: nothing is asked, and anything the policy file has not pre-approved is denied.
The desktop app (beta) can connect to a local runner through its This computer setting.
Offline databases
The CLI overview lists offline databases as a feature: the update command with an import option loads a vulnerability database that you downloaded somewhere else. Note that the update command refreshes vulnerability databases, not the binary. To update the binary use the self-update command.
Be precise about what this covers. The docs describe importing a database for scanning. They do not describe the interactive terminal working without any connection to the platform, since signing in and polling are how jobs arrive. A separate air-gapped deployment page describes running the whole Safeguard platform inside a closed network with signed snapshot bundles delivered by diode, removable media or a scheduled sync. That is a deployment model arranged with Safeguard, not a CLI flag.
Also note the CLI support matrix page shows Offline Mode as a plan-dependent row, so confirm availability on your plan with Safeguard.
Zero AI
The CLI scanner can use an LLM for optional source analysis, and Zero AI mode works with everything running without an LLM.
Try it yourself
Click through it at your own pace, or open it full screen.
Quick check
What leaves the machine when the runner scans a repository?
The result files only: the SBOM and findings. Source code stays on the machine.
Does the runner accept inbound connections?
No. All traffic is outbound HTTPS that the runner opens.