Endpoint behaviour disclosure
Every process we spawn, every port we open.
Bolt works on your machine, so the work is visible on your machine: it reads your screen, your clipboard and the files you point it at, and drives other applications for you. Everything it does to get that done is listed here, with the reason attached and the command to check it yourself. Behavioural tooling flags this class of application - Zoom, Loom, Raycast, Alfred and iTerm are flagged the same way - so the useful thing we can give you is not reassurance, it is the full list.
First, what never happens
Bolt runs on your machine.
We have no access to it, and no access to anything on it.
Sparcle is never in your data path.
Bolt does all of this on your machine so none of it has to leave. That's the trade this page documents - the list below is long because it's showing you local behaviour you can watch, instead of network traffic you can't.
with administrator privileges is on the explicit list of markers Bolt flags in caller-supplied AppleScript. The one exception is the optional network filter, which macOS requires an administrator to approve, and which is off unless you turn it on.1. Code signing identity
Verify the identity yourself before you trust anything else on this page. On macOS,
codesign -dv --verbose=2 /Applications/Bolt.app should report an authority of
Developer ID Application: Sparcle Inc. (4VSW7NBZ2S), a team identifier of 4VSW7NBZ2S, an
identifier of app.sparcle.bolt.enterprise, and a stapled notarization ticket. For the
Gatekeeper assessment use spctl -a -vvv -t exec /Applications/Bolt.app. An
earlier version of this page printed -t install, which is the type for
installer packages rather than application bundles, so anyone who copied it was running the
wrong check. Verifying the
download itself, including the signed release manifest and the software bill of materials,
is covered at verify your download
and supply chain.
If something in this inventory does not match what you observe on your own machine, that is the most useful message you can send us. Write to [email protected], or use the coordinated disclosure process. A gap between this page and reality is a defect in the page, and we will correct it.
2. Why we publish this
3. Processes Bolt spawns
Grouped by what they're for. Some depend on your platform or your own setup, so not every row runs on every machine.
Screen, clipboard and on-screen content
screencapturepowershell.exegnome-screenshot, spectacle, scrot, import, flameshotbolt-ocrwl-paste, xclip, xpropbolt-axDesktop automation and script interpreters
osascript, readingosascript, writingosascript, arbitrarypowershell.execmdsh, /bin/shgdbusShell execution that Bolt injects, as opposed to what you type yourself, crosses a native gate before its bytes reach a terminal. The gate classifies the command line as safe, destructive or catastrophic; the default posture runs safe commands, requires explicit confirmation for destructive ones, and refuses catastrophic ones outright. An administrator can tighten it to confirm everything, or to refuse injected execution entirely. A surface with no way to ask you for confirmation is treated as unconfirmed and therefore refuses rather than proceeding. A command line carrying what looks like a live credential is escalated to require confirmation, so that a secret cannot be put on a command line silently. Every refusal and every confirmation is written to an append-only audit log as a fingerprint rather than as the command text. A command you type into the terminal yourself is never gated, by design.
Process, window and connection discovery
kill, taskkillwmctrl, xdotool, xpropmdlssample, eu-stackSearch, file discovery and opening files
mdfindplocate, rg, where, recollq, tracker3qlmanageopen, explorer, xdg-open, xdg-email, gtk-launchCredential and secret store integration
bw, bws, op, vault, aws, az, gcloud, pass, keepassxc-cli, secret-tool, kwallet-queryThe availability probeThe local database, and preparing its binaries
postgres, initdb, pg_ctl, pg_upgrade, pg_controldata(no process - getxattr(2)/removexattr(2))codesignlddThe PostgreSQL payload arrives signed with our Developer ID and pinned in the binary to a SHA-256 digest that is verified before a single byte is unpacked. A payload that does not match the pin is not used. It is already linked against its own libraries and already carries our signature, so it is extracted and run exactly as it left our build. Bolt reads its signature and acts only on the answer: a payload it did not sign is refused, and the install stops with an error naming the path. The installer served from this site does the same, and verifies the same pin before it writes anything. The quarantine attribute is handled the same way: Bolt probes for it first and strips only what actually carries it. On the payload we ship, nothing does, so on an ordinary install the strip does not run at all.
Trust, permissions and system state
securitysystemextensionsctlfdesetupdefaults, networksetup, loginctl, gsettings, brightnessupdate-desktop-databasecodesignPrograms you configure
MCP servers and coding-agent binaries genuinely are yours: the executable is whatever you or your administrator named, so the table above describes the mechanism rather than the programs. They are spawned from your configuration and are not routed through the command gate, because that gate classifies command lines and these are program invocations. User Apps are the opposite case, and an earlier version of this page got it badly wrong.
The User Apps we ship, enumerated
Bolt ships twenty-eight User Apps inside the signed bundle and copies them into your data directory on launch, with the feature enabled by default. They are ours rather than yours, so they are enumerated here in full rather than described as user content.
Check the list rather than trusting it. The shipped copies are at
Bolt.app/Contents/Resources/sample-user-utils/, and the seeded copies are in
the user-utils folder of Bolt's data directory. Both are plain YAML, so
ls gives you the count and any text editor gives you the exact command line
each one runs. Read the seeded folder rather than the bundle if you want the truth about a
particular machine: it holds whatever a previous version seeded and anything you or your
administrator added, so its count is legitimately higher than twenty-eight on a long-lived
install. Your own build is the authority here, not this list.
What they reach for. Most wrap a vendor command-line tool you already
installed and signed into, so the network call is that vendor's own, made by their binary
under your credentials: GitHub, GitLab, AWS, Kubernetes, Okta, PagerDuty, Salesforce,
Slack, Stripe, Twilio and Vercel. Three reach the network without a vendor tool:
=whois queries a registrar through the system whois binary,
=ollama talks to a model server on your own loopback, and =sys
can reach the network in one specific mode, disclosed separately. Nothing here routes
through a Sparcle host.
They do not run on their own, and here is what that is worth. An App's command runs when you type its chip in the launcher and press Enter. The launcher shows a confirmation row first, worded by the manifest itself, so you can read what a given App will say in its YAML before you ever open Bolt. Setup guidance is display-only by design: where an App tells you to run a sign-in command, Bolt renders it for you to copy and never executes it, and the source says so at the type that carries it. Three qualifications, because the sentence above is worth less if we let it sound bigger than it is. The manifest format does allow an App to declare that it dispatches without that confirmation row, on a pattern match against what you typed. None of the twenty-eight we ship declares it, which you can confirm by searching the YAML for auto_when, but one you or your administrator add could. Then two things that are simply automatic. First, the detection probe: when the launcher first loads, when the Detected CLIs or User Apps settings section opens, and on an explicit rescan, Bolt runs each App's version command and its declared authentication-status command, eight at a time. That is a real spawn of a real vendor binary without you asking for that App. Second, seeding: the shipped manifests are copied into your data directory on launch and refreshed when we ship a better version, though a copy you have edited is preserved rather than overwritten. An administrator can switch the whole feature off, which stops both the probes and the invocations.
4. Ports and sockets
Whether a listener is bound to loopback or to every interface is the single most important fact on this page, so it is stated per port rather than in a summary sentence.
13017bolt127.0.0.113018bolt-api127.0.0.1 or ::113020bolt127.0.0.115432 to 15441 (Windows only)postgresUnix socket on macOS and Linux; 127.0.0.1 and ::1 on WindowsNothing binds 0.0.0.0. On the desktop build this is enforced rather than configured: before any listener is created, the sidecar checks that its configured host is a loopback name and that it is running in desktop deployment mode, and exits with an explanatory message if either is false. The check exists so that a copy of the sidecar extracted from the application cannot be pointed at a network interface and used to serve other people. The server build, which is a different binary you deploy behind your own ingress, deliberately does not carry this restriction.
Fallback ranges, and why a port number is not an identity. Both HTTP services auto-discover the next free port when their default is taken: 13017 through 13026 for the first, 13018 through 13027 for the second. Those two ranges overlap across most of their length, so on a machine where the defaults were already occupied you can legitimately observe either of those two services on a port that is not the one in the table above. The gateway is different and worth stating separately: its port is a fixed constant with no fallback at all, so 13020 is the only port it will ever use. If something else already holds 13020, the gateway logs the failed bind and does not listen anywhere. Do not go looking for it further up the range. PostgreSQL separately takes the first free port from 15432 through 15441 when its cluster is created, and thereafter reuses whatever port that cluster recorded in its own start-up options file, so a long-lived install is often not on 15432. The practical consequence for a reviewer: match on the process and the bind address, not on the port number. The bind address is the part we are asking you to hold us to.
The gateway. Port 13020 is a relay that lets a coding-agent
command-line tool send its traffic through Bolt, so that structured PII and secrets are
masked before the request leaves the machine. No listener exists while the feature is off:
the socket is bound when you switch it on and released when you switch it off, so a port
scan of a machine that is not using it finds nothing on 13020. When it is on it binds
loopback only, and a request must present this device's own Bolt credential.
Read what it is for precisely: it reduces what an agent sends when the agent is pointed at
it. Pointing an agent at it is a line you export. Bolt does not stop an agent from talking
to a model provider directly, and you should not deploy it as though it did.
Verify it yourself, and please do. On macOS or Linux, run
lsof -nP -iTCP -sTCP:LISTEN and filter for bolt and postgres. On Windows, run
netstat -ano and match the process ids. Every row should show a loopback
address. Anything that does not is a finding we want reported to [email protected]. There is
a fuller walkthrough at prove it
yourself.
5. The database on your endpoint, and why
7. Permissions Bolt asks for
The operating system permissions Bolt requests, what each is used for, and what stops working if you deny it, are already published as section 3 of the review packet. Rather than keep a second copy that can drift out of step with the first, that table stays the one place it lives: read it on the review packet page. All of them are optional, and Bolt runs without any of them.
Three things relevant to this page are not on that table. First, macOS Automation, sometimes called Apple Events: it is what the AppleScript rows in section 3 require, it is requested per target application by macOS rather than by us, and declining it disables those readers and writers only. Second, the network content-filter system extension described in section 9, which is inactive unless explicitly enabled. Third, nothing on this page requires administrator or root privileges at any point, including the certificate authority in section 6 and the database in section 5.
8. Files and directories Bolt writes
9. Hardening, and how to see it
What we will and will not put on a public page, and how to get the rest.
Where the platforms differ
Most of this page describes behaviour that is the same everywhere. Protection of the local database and its keys is not, and the differences are large enough that a Windows reviewer should not infer macOS properties. What follows is the ceiling each platform allows, not a claim about what ships today - the socket and operating-system-identity work described here is in progress, and section 9 tracks it.
FAQ
Questions a reviewer actually asks
Does anything about me, my machine, or my data reach Sparcle?
Can an attacker use Bolt to reach something they could not reach without it?
local-api.key, mode 0600. Hardening of the local listeners is ongoing work rather than finished work, and we will walk your security team through the current state of it directly.
Does Bolt need administrator or root privileges?
with administrator privileges is on the explicit list of markers Bolt flags in caller-supplied AppleScript. The single exception is the optional network filter, which macOS requires an administrator to approve, and which is off unless you turn it on.
Can any of these listeners be reached from the network?
127.0.0.1 or ::1, never 0.0.0.0. You should not take that on our word - the ports section names each one, and you can confirm every binding on your own machine with the commands there, or with any process monitor.
Why does my EDR flag Bolt?
Does Bolt install a root certificate, and can I prevent it?
localhost, so browsers and the Bolt extension get warning-free HTTPS. Be precise about how it is offered: on a normal first run it is a step you can decline, and a decline is permanent. Outside that sequence Bolt will attempt the install at start-up if it is not already trusted and you have not previously declined - in which case the operating system's own prompt is the consent surface. Administrators can switch it off entirely with the AllowLocalCertificateTrust policy key, which defaults to off on a managed device. The exact commands to inspect or remove it are in the certificate section.