Safeguard
Developer Tools•

Safeguard on Linux: AppImage Desktop App, CLI, Servers and CI

On Linux, Safeguard ships an x86_64 AppImage desktop app that needs FUSE, plus one static CLI binary for x86_64 and arm64 laptops, servers and CI.

Safeguard Security Team
18 min read

Safeguard runs on Linux in two ways. The desktop app is a single AppImage for 64-bit x86 machines: download it, mark it executable, make sure FUSE is available, and run it. The Safeguard CLI is one static binary for x86_64 and arm64 that works the same on a laptop, a server or a CI runner.

If you are moving from another assistant, you do not have to give up what you already pay for. Bring the Claude, ChatGPT or Codex plan you already pay for and use it inside the Safeguard CLI. Safeguard adds no extra charge for that usage; your plan's own usage limits and terms still apply. You can also connect Claude or ChatGPT to the Safeguard MCP server and use Safeguard from the chat you already use.

Below: which build fits which machine, installing and verifying the AppImage, fixing missing FUSE, the CLI on x86_64 and arm64, and headless servers and pipelines. Device facts come from the Safeguard download page as checked on 21 October 2026.

What runs on Linux, at a glance

The download page lists one desktop build and two CLI builds for Linux. The CLI support matrix puts it plainly: "The CLI is a static binary, so what matters is the OS and architecture, not the distribution." The same is broadly true of the AppImage, with one extra requirement, FUSE.

SurfaceInterfaceArchitectureHow you install itExtra requirementWhere your code is readApproval prompts
Desktop app 3.2.2Native window: web app plus a local panelx86_64 onlyDownload the AppImage, chmod +x, runFUSE; the download page says the Linux build also needs the Safeguard CLI on your PATHYour machine, only folders you grantDestructive tasks ask before they run
Safeguard CLIInteractive terminal and scriptable commandsx86_64 and arm64One install script for macOS and Linux (below)None; no Node, Python or JVMYour machineAsk, Auto (default) or Yolo
Web interfaceBrowserAnyNothing to install, at app.safeguard.shA browserSafeguard's platformPer platform settings
Cloud CLI and cloud computerBrowserAnyNothing to installA browserSafeguard's infrastructurePer platform settings

A few points that save time later:

  • arm64 Linux has no desktop build. On an arm64 board, workstation or cloud VM, use the CLI for local work and the web interface for the dashboard.
  • There is one Linux package format for the desktop app. The download page lists the AppImage. It does not list a .deb, .rpm, Snap or Flatpak, so do not go looking for one in your distribution's store.
  • The CLI is the same binary on a laptop and a server. What you learn at your desk carries straight into CI.

Install the AppImage desktop app, step by step

The desktop app wraps the Safeguard web app in a native window and adds a local panel on the right that can reach folders you grant, a restricted terminal and MCP servers. The download page describes the whole thing as a way to ask your supply chain anything in plain English. On Linux the file is Safeguard-3.2.2-x86_64.AppImage, about 120 MB, and it needs no installer.

Step 1: check your machine

Run two quick commands before you download anything.

uname -m          # should print x86_64
which safeguard   # the download page says the Linux desktop build needs the CLI on PATH

If uname -m prints aarch64, stop here and use the CLI section below instead. If which safeguard prints nothing, install the CLI first. The download page states that the Linux desktop build "also needs the Safeguard CLI installed and on your PATH."

Step 2: download and verify

Download the AppImage from https://safeguard.sh/download. The page shows the expected SHA-256 next to the file; for 3.2.2 it begins with 46685975126a0d01. The release also publishes a SHA256SUMS file with the full value for every desktop build.

cd ~/Downloads
sha256sum Safeguard-3.2.2-x86_64.AppImage
# compare the output with the value on the download page

# or, with the SHA256SUMS file from the release in the same folder:
sha256sum -c --ignore-missing SHA256SUMS

sha256sum -c reads checksums from a file and checks each listed file against it. --ignore-missing skips the Windows and macOS entries you did not download. A line ending in OK is what you want. Anything else, delete the file and download it again.

Step 3: mark it executable and run it

Linux will not run a downloaded file until you give it execute permission. The download page gives the exact command:

chmod +x Safeguard-3.2.2-x86_64.AppImage && ./Safeguard-3.2.2-x86_64.AppImage

If you prefer the file manager, the AppImage project's quickstart describes the same thing: right click, Properties, Permissions, then tick "Allow executing file as program" in Nautilus-based managers such as Files, Nemo and Caja, or "Is executable" in Dolphin. Then double click it.

Step 4: if it complains about FUSE

AppImages mount themselves using FUSE, a Linux feature for filesystems in user space. Most desktop distributions ship with it working. When it is missing, the AppImage prints a message that starts with "AppImages require FUSE to run."

The fix depends on your distribution. These commands come from the AppImage project's FUSE troubleshooting page:

# Ubuntu 22.04 and later, and Debian derivatives that already have fuse3
sudo apt install libfuse2

# Ubuntu 24.04, where the package was renamed
sudo apt install libfuse2t64

# openSUSE
sudo zypper install fuse libfuse2

# Arch Linux
sudo pacman -S fuse2

FUSE 2 sits alongside FUSE 3, so installing libfuse2 does not remove anything you already have. If you were added to a fuse group, log out and back in before trying again.

If you cannot change the system, for example on a locked-down work laptop, the AppImage project documents a fallback that extracts the app to a temporary folder, runs it and cleans up afterwards:

./Safeguard-3.2.2-x86_64.AppImage --appimage-extract-and-run
# or
APPIMAGE_EXTRACT_AND_RUN=1 ./Safeguard-3.2.2-x86_64.AppImage

The project notes that extraction is slow and suggests it only when FUSE cannot be fixed.

Step 5: first run

Sign in in the left pane exactly as you would in a browser. Press Ctrl+Shift+S, or use the View menu, to open the local panel. It opens on the Files tab, where you grant folders through the system file picker. The app can only read folders you have granted, and its terminal runs only an allowlist of binaries inside those folders.

Keep the AppImage somewhere stable such as ~/Applications. To uninstall, delete the file.

Do the work properly with the Safeguard CLI

The desktop app is the comfortable view. The CLI is where the work gets done on Linux, on any architecture, with or without a screen. It scans code, container images and SBOMs on your own machine, sends only the results to the platform, and includes an assistant that can fix what it finds. It writes code too, not only scans.

Install on x86_64 or arm64

The same command works on both architectures. The installer detects your OS and architecture, verifies the download against the release checksums, and puts safeguard on your PATH.

# read the script before you run it, as the docs recommend
curl -fsSL https://cli.safeguard.sh/install -o install.sh
less install.sh
bash install.sh

safeguard --version

The shell installer tries /usr/local/bin first and falls back to ~/.local/bin if that is not writable. If the second one is used, make sure it is on your PATH. If safeguard --version shows something unexpected, run which -a safeguard to find an older copy earlier on your PATH. On Linux the install script fails closed: if the checksums file is missing, it stops.

It is a single static binary. There is no Node, Python or JVM to install, and the docs list about 40 MB for the binary plus the scanners it downloads on first use.

Your first session

cd ~/src/my-service
safeguard

Running safeguard with no arguments opens the interactive terminal. Type /login and your browser opens to approve the session. Then /scan . scans the current folder. From there you can ask in plain language, for example "how many critical vulns do we have" or "fix the lodash CVE in this repo." Type @ to attach a file from the folder you started in, and /resume picks up your last session in that folder tomorrow.

The assistant has tools for your local files and for your Safeguard data, and picks whichever the question needs. So it also works as a general terminal assistant on your Linux box: "what's the latest file in ~/Downloads" is one of the examples in the docs. With your approval it can find and read files, edit code and run commands, as well as everything security.

Writing and fixing code

Ask for the change in the folder where you want it made. The assistant proposes edits and asks before it writes. Because it can see your vulnerability data, a request like "upgrade the vulnerable dependency and update the lockfile" is answered with knowledge of what is actually flagged in that project. If another agent wrote the code, scan the folder before you merge; see checking coding agent changes with the Safeguard CLI.

Use your Claude or ChatGPT plan

Bring the Claude, ChatGPT or Codex plan you already pay for and use it inside the Safeguard CLI. Safeguard adds no extra charge for that usage; your plan's own usage limits and terms still apply. To connect a model, see the CLI docs or type /model, which shows or switches the AI model.

On the platform side you also choose the model for each conversation. This demo walks through it.

Click through it at your own pace, or open it full screen.

Zero z20 answers with no language model at all by turning the question into a platform query. Griffin, Eagle and Lion are Safeguard's own models. A tenant admin decides which model families people may use, and you can bring your own model on your own provider account and route jobs such as chat or summaries to it.

Approvals

Tools that change things, such as writing a file, editing code or running a command, ask before they act. /permissions sets how often:

  • Ask prompts before every action.
  • Auto approves known actions and asks for anything new. This is the default.
  • Yolo approves everything.

On a shared server, stay on Ask or Auto. The current mode is shown in the bar under the input.

This next demo shows the same flow from the Search side: attach a computer running the Safeguard CLI and a folder, ask for a fix, review the diff and approve the command before it runs. The demo itself notes that computer work from Search is available and expanding.

Click through it at your own pace, or open it full screen.

CI with safeguard exec

safeguard exec "summarise the critical findings in this repository" runs one non-interactive assistant turn and exits, which is what a pipeline needs. The CI section below has the details. For the full tour of the interactive terminal, read the Safeguard CLI as an AI assistant on your machine.

Servers, containers and CI pipelines

Most Linux servers have no desktop, which is where the single CLI binary helps.

Signing in on a headless server

The browser sign-in does not need a browser on the server. The usage docs describe a device flow:

safeguard login --no-browser
# prints a URL and a code; open the URL on your laptop and enter the code

Setting SAFEGUARD_NO_BROWSER stops the CLI trying to open a browser, and the docs say that also applies when CI is set. There is no API key environment variable for the CLI. A machine is authorized by signing in once, and the token is stored on that machine.

That has a practical consequence. A long-lived Linux build host or self-hosted runner that has signed in once is the simplest place to run authenticated jobs. The docs do not describe how to provision that token into a fresh, throwaway CI container, so do not invent a workaround; check the CLI docs for your setup.

Scanning from the shell

The scan command takes exactly one target per run:

safeguard scan --dir .
safeguard scan --repo https://github.com/your-org/your-service
safeguard scan --image registry.example.com/team/api:1.8.2
safeguard scan --sbom ./sbom.cdx.json

Each builds or reads an SBOM and matches it against vulnerability databases. Results land as JSON under ./output, including vuln.json and license.json. Private registries take --registry-username and --registry-password; private repositories take --git-token. safeguard validate checks CycloneDX, SPDX and VEX documents before you ship them.

The scan exit codes are documented: 0 means the scan ran, whatever it found; 1 means the command failed; 2 means results were written but the vulnerability scan did not run. There is no severity threshold flag. Policies and gates are evaluated in the platform, not by the CLI, so fail a build on findings with a platform gate rather than by parsing JSON yourself.

Preparing a fresh runner

safeguard scan runs syft and grype under the hood. The interactive terminal downloads them on first use, but a clean CI container has never run it. Either put syft and grype on the PATH or set TOOLS_DIR to a folder that contains them. Pin the CLI version so builds are repeatable:

curl -fsSL https://cli.safeguard.sh/install | SAFEGUARD_VERSION=VERSION bash

Replace VERSION with the release you tested. Two more variables are useful on servers: SAFEGUARD_NO_UPDATE_CHECK=1 skips the background release check, and SAFEGUARD_DISABLE_SELF_UPDATE=1 turns off binary updates.

A pipeline step

#!/usr/bin/env bash
set -euo pipefail

safeguard scan --dir . --output ./sg-results
safeguard validate ./sbom.cdx.json

safeguard exec --output-format json \
  "summarise the critical findings in this repository" > sg-summary.json

safeguard exec defaults to a strict permission mode: nothing is asked, and anything the policy file has not pre-approved is denied. It refuses to run outside a git repository unless you pass --skip-git-repo-check. --output-format json gives a machine-readable result you can attach to the build.

Containers and the AppImage

Do not try to run the desktop AppImage inside Docker. The AppImage project notes that most Docker setups do not allow FUSE and warns against granting containers SYS_ADMIN or /dev/fuse to get around it. In containers, use the CLI.

From the terminal to the desktop to your phone

Safeguard is one platform on every surface, so a Linux user can move between them without losing context.

  1. Start in the terminal. Install the CLI, /login, /scan ., and ask the assistant to fix what matters.
  2. Continue on the desktop. Open the AppImage on the same x86_64 machine and the web app on the left shows the same tenant, while the panel on the right scans granted folders and runs tasks.
  3. Check on your phone. Android phones and tablets install from Google Play; there is also a direct APK (1.0.2) with a published SHA-256 for phones without Google Play or for company-managed rollout. iPhone and iPad install from the App Store.
  4. Use the browser too. The Safeguard browser extension (1.0.4) installs from the Chrome Web Store for Chrome, Brave, Arc, Vivaldi, Opera and Edge, and from Firefox Add-ons.
  5. Or install nothing. The web interface is the full platform in a browser. The Cloud CLI runs the CLI on Safeguard's infrastructure, and the cloud sandbox gives you an isolated tenant against a seeded demo repo, free for seven days with no card.

If you already live in Claude or ChatGPT, connect either one to the Safeguard MCP server and ask from there. For a wider look at how terminal assistants differ, see Claude Code alternatives in 2026.

Common mistakes on Linux

  • Downloading the AppImage on an arm64 machine. The desktop build is x86_64 only. Check uname -m first and use the CLI on arm64.
  • Forgetting the CLI before the desktop app. The download page says the Linux desktop build needs the Safeguard CLI on your PATH. Install the CLI, open a new terminal, confirm with which safeguard, then launch the AppImage.
  • Skipping the checksum. One sha256sum command is enough. Do it for the AppImage and for the Android APK if you sideload it.
  • Installing the wrong FUSE package. Ubuntu 24.04 names it libfuse2t64. Installing fuse on newer Ubuntu releases is not the same thing.
  • Granting containers extra privileges to run the AppImage. Use extract-and-run on a desktop if FUSE is broken, and the CLI in containers.
  • Ending up with two CLIs. If /usr/local/bin was not writable the installer used ~/.local/bin. An older copy elsewhere on PATH can shadow the new one. which -a safeguard shows every copy.
  • Expecting the CLI to fail builds on severity. It does not have a threshold flag. Gate in the platform.
  • Running Yolo on a shared host. Keep approvals on so file writes and commands still ask.
  • Piping an unread script into a shell. The Safeguard docs themselves recommend downloading install.sh and reading it first.

FAQ

Is there a Safeguard desktop app for Linux?

Yes. Version 3.2.2 ships as Safeguard-3.2.2-x86_64.AppImage for 64-bit x86 Linux with FUSE available. Mark it executable and run it. No installer is needed.

Does the desktop app run on arm64 Linux?

No. The download page lists the AppImage for x86_64 only. On arm64 use the Safeguard CLI, which has a native arm64 Linux build, and the web interface.

Which Linux distributions are supported?

The CLI docs say what matters is the OS and architecture, not the distribution, because the CLI is a static binary. For the AppImage, the practical requirement is working FUSE, which the AppImage project's troubleshooting page covers per distribution.

Can I switch to Safeguard and keep my Claude, ChatGPT or Codex plan?

Yes. Bring the Claude, ChatGPT or Codex plan you already pay for and use it inside the Safeguard CLI. Safeguard adds no extra charge for that usage; your plan's own usage limits and terms still apply. See the CLI docs or /model to connect a model. You can also connect Claude or ChatGPT to the Safeguard MCP server.

Does the CLI change files on my server without asking?

Not in Ask or Auto mode. Writing a file, editing code or running a command asks first. Yolo approves everything, so only use it where you accept that. In CI, safeguard exec defaults to strict, which denies anything not pre-approved.

How do I sign in on a server with no browser?

Run safeguard login --no-browser. It prints a URL and a code that you open and enter on another device.

Does my source code leave the machine?

When the local runner runs platform scan jobs, no. Only SBOMs and findings are uploaded.

How do I update or remove it?

For the CLI, re-run the installer to replace the binary in place. To remove it, run safeguard logout --yes, delete the binary, and remove ~/.sg, ~/.scanner and ~/.cli. For the desktop app, delete the AppImage.

Try it yourself

This demo is the install and start walkthrough: set up the runner on your own machine, pick the platform, start it, approve it with its device code, then use the same CLI to scan from the terminal.

Click through it at your own pace, or open it full screen.

When you are ready, get the AppImage and the CLI from https://safeguard.sh/download and keep the docs at https://docs.safeguard.sh/docs/cli open in another tab.

Quick check

What two things does the Linux AppImage need before it will run?

Execute permission, set with chmod +x, and FUSE available on the system. The download page also says the Linux desktop build needs the Safeguard CLI installed and on your PATH.

How do you sign the CLI in on a server with no browser?

Run safeguard login --no-browser, then open the printed URL on another device and enter the code.

Where do you gate a build on findings?

In the platform, with policies and gates. The CLI's scan exit code is 0 whenever the scan ran, whatever it found.

Sources

Last reviewed: 21 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.