github opensec-git/Pi-Bolt bolt-v1.0.4
Pi-Bolt 1.0.4

6 hours ago

Pi-Bolt 1.0.4 is a fixes and hardening release: compaction recovers from context overflows and scales with large context
windows, grep and find stay small on huge files and trees, pi-bolt compile takes extensions with optional imports, sixteen
fixes from upstream Pi land early, and installing, updating, links, terminal output, the HTML export and the ACP and MCP modes
are hardened. Everything else is 1.0.3.

Fixed

  • Context overflow recovery: when a request is still too long after one compaction, Pi no longer stops with "Context overflow
    recovery failed after one compact-and-retry attempt". It tries up to twice more, each time smaller: a quarter of the recent
    messages with oversized tool results shortened (start and end kept), then only the latest turn
    (#171).
  • A summary request too large for the model is summarized over several requests instead of failing, and the file lists in
    summaries keep the 100 most recent paths instead of growing with every compaction (#171; upstream
    earendil-works/pi#11281 and #11297).
  • grep and find on large files and trees: Pi-Bolt's built-in search read whole files and kept whole directory trees in
    memory, so a search over a few large files (model weights, disk images) could take gigabytes, as seen in terminal-bench runs
    on Windows. Large files are now read in pieces, a file stops at its first NUL byte, the walk keeps only what it returns, and a
    search can be stopped. Results and speed are the same as in 1.0.3
    (#163, #164,
    #169).
  • pi-bolt compile with an optional import(): an extension that loads a package only if it is installed (such as
    @plannotator/pi-extension) no longer stops the build; the import fails, or finds the package, when it runs, as it does when
    the extension loads from its files (#160,
    #162).
  • From upstream Pi, ahead of its next release (#161):
    • Anthropic: a fixed low top-level effort with per-message effort.
    • Gemini: tool schemas send const as an enum and keep literal data.
    • Nested blockquotes no longer take exponential time to draw.
    • Extensions: pi.exec keeps spawn errors and decodes UTF-8 split across output chunks.
    • macOS: a stopped shell's process group is stopped before it is killed.
    • Pi starts when a configured package fails to install, and says how to remove it.
    • Forking writes the session through one file handle.
    • HTML export: system messages, and sessions deeper than the call stack.
    • Provider ids containing / resolve; the npm prefix is the real path when ~/.pi is a symlink; managed npm ci no longer
      overrides min-release-age.

Changed

  • Compaction on large context windows (#173): Pi compacts at 90% of the window at most (1M: at 900K instead of 984K),
    keeps 5% of the window verbatim (1M: 50K instead of 20K), and allows a longer summary (1M: up to 32K tokens). Windows of
    128K and smaller behave as before; 200K compacts at 180K instead of 184K. Settings you set yourself (reserveTokens,
    keepRecentTokens) keep their meaning; compaction.thresholdPercent and compaction.summaryMaxTokens are new.

  • Shaded code blocks (shadedCodeBlocks, off by default) are shaded to the full width, one rectangle that keeps its shape
    while a reply streams in (#159).

  • Installing and updating check more strictly (#165):

    • PIBOLT_UNVERIFIED=1 and PIBOLT_ALLOW_UNSIGNED=1 no longer turn off the signature check. Installing without it now needs
      the SHA-256 of that release's SHA256SUMS, which the installer prints, so a setting left in a profile or an image applies
      to nothing else.
    • On macOS the installer checks with ssh-keygen before an earlier Pi-Bolt, and an earlier Pi-Bolt counts only when it
      reports what it checked. Releases from before 0.6.0, which are unsigned, need the same explicit value.
    • A mirror (PIBOLT_DOWNLOAD_BASE) needs PIBOLT_VERSION when the latest release cannot be found.
    • pi-bolt update passes only the installer settings it needs on to the installer.
  • Links in replies open only web and mail addresses. On macOS and Linux a local file is shown in the file manager, not
    opened (#167).

  • Terminal output: control sequences in text Pi did not write (replies, tool calls and results, MCP text, errors) are
    removed before it is drawn; Pi's own colors and styles are unchanged (#167).

  • HTML export: every field from the session is escaped, Markdown images are shown as links, and the page loads nothing
    remote (#167).

  • ACP and MCP modes check a project's trust for every session, as interactive mode does, and ACP's read-only mode applies to
    every tool, also ones added later; /export names stay inside the session's folder
    (#166).

  • MCP sign-in follows only https (http to this machine) for discovery, registration and tokens, and reads at most 1 MiB of
    each response (#166, #161).

  • Files Pi writes: session folders are private to you (0700) and transcripts 0600; pasted images go to a private folder that
    is removed when Pi exits; the startup update check runs in Pi's own folder, never the opened project's (#166).

  • Contributing: clearer issue and pull request guidance, a code of conduct, and a fuller security policy with response times
    and how to verify a download's signature (#170).

Thanks to the reviewers who reported the installer and Windows issues.

With the default settings Pi draws the same screens and sends the same requests as 1.0.3 (except where a change above says
otherwise), at the same speed. 1.0.3 / 1.0.4, Linux on GitHub's runners pinned to one CPU, the M5 in instructions:

Linux x86-64 Linux ARM64 Apple M5 Windows x64
Ready to type 36 / 38 ms 34 / 35 ms 160.9 / 160.2 M 93 / 93 ms
pi -p, CPU 53 / 54 ms 48 / 49 ms 212 / 213 M 94 / 94 ms
60,000-character answer 2.19 / 2.15 s 2.12 / 2.21 s 3,747 / 3,772 M 2.60 / 2.48 s
Peak memory, interactive 28 / 28 MB 33 / 33 MB 30 / 30 MB 70 / 71 MB
grep over a large tree 309 / 298 ms, 377 / 73 MB 274 / 273 ms, 319 / 76 MB 1,304 / 974 ms, 354 / 100 MB

Pi is 1.4.0, with the fixes above. The runtimes are 1.0.3's.

Install

curl -fsSL https://pi-bolt.opensec.in/install.sh | sh
irm https://pi-bolt.opensec.in/install.ps1 | iex
powershell -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, or:

  • Homebrew (macOS on Apple silicon, Linux): brew install opensec-git/tap/pi-bolt
  • Scoop (Windows): scoop bucket add opensec-git https://github.com/opensec-git/scoop-bucket, then scoop install opensec-git/pi-bolt
  • mise: github:opensec-git/Pi-Bolt with the options in the installation guide

The installer checks the release signature with OpenSSL 3, ssh-keygen (OpenSSH 8.1 or later), or an installed Pi-Bolt.
Every archive also has a GitHub build attestation: gh attestation verify <file> -R opensec-git/Pi-Bolt.

Asset For
pi-bolt-linux-x64.tar.xz / .tar.gz Recommended on Linux x86-64. 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-linux-arm64.tar.xz / .tar.gz Linux on ARM64, any 64-bit ARM CPU; Android in Termux, with the installer.
pi-bolt-linux-arm64-jit.tar.xz / .tar.gz Linux on ARM64, JIT also on.
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-linux-arm64.tar.gz, pi-bolt-runtime-darwin-arm64.tar.gz, pi-bolt-runtime-win32-x64.zip The Pi-Bolt Bun runtime, for compiling plugins in.
pi-bolt-kit-linux-x64.tar.gz, pi-bolt-kit-linux-arm64.tar.gz, pi-bolt-kit-darwin-arm64.tar.gz What pi-bolt compile builds with, besides the runtime.
install.sh, install.ps1 The installers, listed in the signed SHA256SUMS: pi-bolt update runs them only after checking them.

Linux x86-64 or ARM64 with glibc 2.17 or later; Android 7 or later on 64-bit ARM, in Termux; macOS 13 or later on Apple silicon;
Windows 10 1809 or later, or Windows 11, on x64.

Don't miss a new Pi-Bolt release

NewReleases is sending notifications on new releases.