v0.1.3
A security-hardening release for the built-in permission gate: dangerous commands can no longer hide inside chained or wrapped shell commands, and file tools now ask before touching anything outside your project.
Highlights
- Chained commands can't smuggle danger — bash approval used to only match the command string as a whole, so
cd xx && ls && rm -rf xxxslipped through without a prompt. The gate now splits on&&,||,;,|,&and newlines, evaluates every segment, and applies the strictest verdict (deny > ask > allow). Splitting is quote-aware:echo "a && rm -rf x"stays a harmless string literal, and2>&1redirections aren't mistaken for separators - No hiding in substitutions or wrappers —
$( )and backtick command substitutions (including nested ones and those inside double quotes) plussh -c/bash -lc/evalwrappers are unwrapped layer by layer and evaluated too.echo $(rm -rf x)andbash -c 'rm -rf x'now prompt just like the bare command - Project boundary for file tools —
read/edit/write/lswith paths that resolve outside the session's project directory (including../../relative escapes) now escalate to an approval prompt instead of passing silently. Paths inside the project stay approval-free as before. Note: bash itself isn't path-constrained (acdcan go anywhere), so the boundary applies to file tools only - "Always allow" remembers less — the session whitelist key for bash now includes flag-shaped second tokens, so approving
rm -rf xxxremembersrm -rf*instead ofrm*. Granting always-allow no longer whitelists every possiblerminvocation for the rest of the session - Approval dialogs for chained commands now title themselves with the actual dangerous segment, so you see at a glance which part of the chain triggered the prompt
Known limits of the pattern-based gate (unchanged): wrappers like xargs, find -exec, python -c, and symlink escapes can't be caught by string matching.
Download
| Platform | File |
|---|---|
| macOS (Apple Silicon) | pi-desktop-mac-arm64.dmg |
| macOS (Intel) | pi-desktop-mac-x64.dmg |
| Windows | pi-desktop-windows-x64.exe (installer) or pi-desktop-windows-x64.zip |
Builds are currently unsigned. On macOS, the first launch may show "Pi Desktop is damaged and can't be opened" — that's Gatekeeper blocking an unsigned download, not actual damage. Fix it by removing the quarantine flag:
xattr -cr "/Applications/Pi Desktop.app", then open normally. On Windows, click "More info" → "Run anyway" when SmartScreen appears.
Full Changelog: v0.1.2...v0.1.3