Repository navigation
Pi-Bolt 0.8.2
Pi-Bolt 0.8.2 runs Pi 1.1.0 on Linux x86-64, macOS on Apple silicon and Windows x64. It works with Herdr, offers opensec-pi-fff,
and has many fixes for Windows, the installers and the engine.
Herdr
In a Herdr pane, Pi-Bolt shows up as pi-bolt in Herdr's sidebar and in herdr agent list:
| When | Herdr shows |
|---|---|
| Pi-Bolt starts, or a run ends | idle (done, until you look) |
| A run is going, or background subagents still are | working |
An extension waits for an answer during a run (a dialog, or the herdr:blocked event of pi-ask-user and pi-subagents) |
blocked, with its message |
| You quit | the pane is free again |
- Sessions come back. Pi-Bolt hands Herdr the command that reopens its session,
pi-bolt --session <file>, so after a Herdr
server restart the same conversation is back in the same pane. This needs Herdr 0.9.2 or later andpi-bolton the PATH of
the Herdr server: start Herdr from a terminal, not withbrew services. - Only the interactive session reports.
pi-bolt -p, JSON and RPC runs, and subagents started inside Pi-Bolt do not take
over the pane of the session that started them. - Herdr's own Pi integration is not needed, and not used. The file
herdr integration install piwrites reports aspi
and restores withpi --session, which starts Pi, not Pi-Bolt; Pi-Bolt does not load it. Pi, which shares~/.pi/agent,
still does. - pi-herdr, which starts other agents in Herdr panes from a Pi
session, works in Pi-Bolt (pi-bolt install npm:@andrewjacop/pi-herdr). Herdr starts Pi agents aspi, so the Pi agents it
spawns run Pi, which must be installed; Claude Code, Codex and the others need only their own CLIs. Pi-Bolt turns off
pi-herdr's own report of its pane (PI_HERDR_NO_SELF_REPORT=1), which would show the pane aspiand lose the resume command. - On Linux and macOS the reports go to Herdr's socket, with no process started for each; on Windows they go through the
herdr
executable of the pane (HERDR_BIN_PATH), as Herdr recommends there. - Outside Herdr nothing changes.
"-builtin:herdr"in theextensionssetting turns it off.
Extensions
- The installers offer opensec-pi-fff: pi-fff's fast find, grep and @-mentions, as fast on the default build as pi-fff with the
JIT (not offered when @ff-labs/pi-fff is installed). - opensec-pi-todo 2.13.1: the todo panel now closes once the work is done, and finished tasks no longer come back after
compaction or /reload. scripts/build-pi.sh --plugins-from-installedcompiles in the extensions installed on this machine: it generates the
manifest folder that docs/PLUGINS.md asks for (scripts/gen-plugin-manifest.mjs), with--plugins-only
and--plugins-excludeto choose (Windows:-PluginsFromInstalled). Thanks to @toadkicker (#10).- docs/PLUGINS.md: what to do when a plugin's module is over the compiler's size limit, and when a build stops without saying
why (#7, @toadkicker). - The tool-conflict hint links to a new README section, "Pi and Pi-Bolt side by side" (
piBolt.packages).
Windows
- Stopping a command ends everything it started, also the programs a Git Bash command started.
- The bash tool passes a command to Git Bash unchanged: doubled backslashes (
C:\\Usersin a heredoc, a regex) are kept.
Git Bash is found wherever Git for Windows is. AshellPaththat is not a bash (cmd.exe, PowerShell) is refused with a
message. - A bare program name in a tool's command is looked up on PATH only, not in the working folder.
- read, write and edit take Git Bash's
/tmpfor the user's temporary folder. - Ctrl+Break and closing the console window shut Pi-Bolt down as SIGTERM does (the terminal is restored, extensions get
session_shutdown). - A link's click opens web and mail links and local images, text and PDFs; any other local file is shown in Explorer.
- The find tool's path patterns: escapes and classes (
src/[[]id]/*.ts) and\as a separator. - A trusted folder stays trusted in any letter case; a project's settings apply to the session directory once it is trusted.
install.ps1: an install folder outside the profile is checked together with the folders above it; extensions are installed
and removed from Pi-Bolt's own folder; the install command turns TLS 1.2 on first (README, site).pi-bolt updateleaves PATH as the user left it.- docs/TROUBLESHOOTING.md has a Windows section; docs/BUILDING.md covers building on
Windows.
Install and update
install.shstages the download in the install folder: a/tmpmountednoexecno longer stops an install or an update
with "the downloaded executable does not run on this system". A download that fails or is stopped is removed.pi-bolt updatedownloads the installer with curl or wget, whichever there is, and runs it from the home folder.- On macOS the PATH line for bash goes in the file a login shell reads (
~/.bash_profile). - The npm launcher removes the builds of earlier versions from
~/.pi-bolt/npmonce a new one is installed.
Pi-Bolt
- MCP: a sign-in page is opened over https, or http to this machine, as the token endpoint already was.
- Bedrock: a tool call whose stream ends without its
contentBlockStopgets its full arguments. - bash: the full output of a command that printed more than the output file holds ends with what the command printed last.
- A finished message is lexed in full, so its final rendering is what the whole text gives.
--smolis not left inprocess.execArgv.
Engine
- x86-64: a function constructed by calling it unwinds an exception it throws with the stack aligned as C++ expects.
- Inlined code reads which items of a spread are spread from its own code; a module variable declared with
varat more than
one place is not taken to keep its first value; a regular expression search from past the end of a string finds nothing at
once; off ARM64, a typed field whose structure has to be checked is read the generic way. - The build without the JIT keeps the JIT off also where it cannot open its own file (no
/proc). - macOS:
resourceUsage()of a child process is the program's own (it was pi-spawn's, about 1 ms); a sync spawn in a process
group of its own starts directly; a Pi-Bolt started with two of descriptors 0 to 2 closed keeps its spawn helper. fs.WriteStream: a batched write that is retried after a short write goes on at the right position.- The runtime stamp includes the linker-order hints (
profiles/runtime-*.hints), so a change to them builds new runtimes.
The runtimes
The engine changed, so the runtimes of this release were built by hand (RELEASING.md).
From the engine trees that patches/webkit.patch and patches/bun.patch make on the pinned sources (git rev-parse HEAD^{tree}):
WebKit b553f99e901bf720ece4b679123e50fcfb657aa0, Bun 38c350d92af2b622768f89794c6710ed03ef6202.
| Runtime | Built on | bun.exe / bun SHA-256 |
|---|---|---|
| Windows x64 | the maintainer's Windows 11 machine (Intel Core i5-1335U), ThinLTO, Control Flow Guard | 3ba3fe7d6f5bc35265ff4540fd0485dd493da9817f6b3f3a62e9f86564b23394 |
| Linux x86-64 | a Linux x86-64 VM (AMD EPYC 7B13), LLVM 23.1, ThinLTO, glibc 2.17 sysroot | 6a65d31165a9d9a37eb0690d3e4caa11f8c19d5be42e9bfe3bd8065d66bc1db3 |
| macOS arm64 | the maintainer's MacBook Air (M5), LLVM 23.1, ThinLTO | 80499e790a2bf9287b330c51b2583fa24101ba8703aae4a6a0680277625e9c30 |
A runtime is not yet built bit for bit the same twice, so these are what was built, not what anyone would get. Tested on each
platform: tests/aot 61/61 (new: edge-cases.mjs), tests/runtime 6/6 and Pi's checks on every build; on Linux also the old
distributions and CPUs (tests/compat: CentOS 7, Debian 9, Amazon Linux 2, Haswell to Nehalem).
Releases
release: a dry run of the latest release takes its runtime from the signed release.tagtags a version bump also when
pi-boltmoved on only with filesciignores.fetch-sourceschecks an existing checkout againstsources.jsonand the
patch, and stops when it is another engine's.- The site has documentation: pi-bolt.opensec.in/docs.
Install
curl -fsSL https://pi-bolt.opensec.in/install.sh | shpowershell -c "irm https://pi-bolt.opensec.in/install.ps1 | iex"or pi-bolt update, or npm install -g --allow-scripts=pi-bolt pi-bolt, or bun add -g --trust pi-bolt.
| Asset | For |
|---|---|
pi-bolt-linux-x64.tar.xz / .tar.gz |
Recommended on Linux. CPUs with AVX2 (Intel Haswell 2013+, AMD Zen+). |
pi-bolt-linux-x64-baseline.tar.xz / .tar.gz |
Any x86-64 CPU with SSE4.2. |
pi-bolt-linux-x64-jit.tar.xz / .tar.gz |
JIT also on, for plugins loaded at run time. |
pi-bolt-darwin-arm64.tar.xz / .tar.gz |
macOS. Macs with Apple silicon, macOS 13 or later. |
pi-bolt-darwin-arm64-jit.tar.xz / .tar.gz |
macOS, JIT also on. |
pi-bolt-win32-x64.zip |
Windows. Windows 10 (1809) or 11 on x64; compiled code on AVX2 CPUs, bytecode on others. |
pi-bolt-win32-x64-jit.zip |
Windows, JIT also on. |
pi-bolt-runtime-linux-x64.tar.gz, pi-bolt-runtime-darwin-arm64.tar.gz, pi-bolt-runtime-win32-x64.zip |
The Pi-Bolt Bun runtime, for compiling plugins in. |
Linux x86-64 with glibc 2.17 or later; macOS 13 or later on Apple silicon; Windows 10 1809 or later, or Windows 11, on x64.