Releases: Abd0r/porcupineai
Release list
Porcupine v0.1.64: Faster AI-agent foundations
Faster AI-agent foundations
Porcupine v0.1.64 reduces work across model streaming, the agent loop, session persistence, Safe Autonomy, and terminal rendering while preserving ordering, cancellation, replay, approval, and fail-closed behavior.
Highlights
- Faster model streaming: Anthropic, Bedrock, and OpenAI Completions now use stable O(1) content-block indexing instead of repeated linear scans. The OpenAI regression workload performs 12.4x fewer identity probes.
- Smoother terminal UI: Box and Container render each child once on changed frames, stable truncation is cached, trailing trim is single-pass, and unchanged frames emit zero redundant cursor writes.
- Lower agent overhead: no-handler context hooks avoid redundant cloning and dispatch, session persistence avoids repeated history scans and timer churn, and Safe Autonomy formats plan context once.
- Cheaper task-graph updates: repeated active-tool continuations use a zero-allocation fast path; changed steps use targeted copy-on-write updates.
- Safer transcript conversion: incremental conversion is restricted to the proven element-local built-in converter. Custom context-dependent converters always receive the complete transcript.
- Clearer identity: the README now introduces Porcupine as a terminal AI agent.
Verification
- Full GitHub CI build, check, and test workflow passed on the release commit.
- TUI: 826/826 tests passed locally.
- Affected AI, Agent, and Coding Agent suites passed with deterministic regression coverage.
- Signed tag:
v0.1.64.
Install or update:
npm install -g @porcupineai/porcupineai@0.1.64Porcupine v0.1.63: Web Development stack
Web Development stack
Porcupine now ships a dedicated Web Development capability stack with 12 framework-neutral skills:
- Frontend development and UI design systems
- Responsive design and WCAG accessibility
- HTTP API design, request validation, authentication, and sessions
- Database migrations and production observability
- Browser QA, web performance, SEO, and deployment readiness
Browser upgrades
Four new native Playwright tools bring the browser surface to 10 tools:
browser_snapshot: AI-oriented ARIA snapshots with stable refsbrowser_resize: exact responsive viewport checksbrowser_wait: deterministic selector-state synchronizationbrowser_diagnostics: bounded console, page, request, and HTTP failure reporting
All browser tools now route through stacks/webdev/browser/....
Porcupine v0.1.62 — arXiv + Reddit search
Porcupine v0.1.62: arXiv + Reddit search
Added
- arXiv search —
sci/arxiv-searchskill +scripts/arxiv-search.mjstool: structured paper search (id, title, authors, date, categories, abstract) via the free export API, no key. The skill grades results (A-D evidence) and records kept papers in the literature store. - Reddit search —
web/reddit-searchskill +scripts/reddit-search.mjstool: subreddit feeds via the public RSS — the one anonymous path that survived Reddit's 2026 403 purge of the JSON API. Search falls back to web_search site:reddit.com when rate-limited.
Both free, no keys. The skills embed one-liner fallbacks, so they work without installing the tools.
npm i -g @porcupineai/porcupineai
Porcupine v0.1.61 — Token Saving
Porcupine v0.1.61: Token Saving
The read tool is the compiler that turns your filesystem into the model's context — every decision inside it is a token-budget decision multiplied by every read in every session. This release applies the full set of harness-engineering lessons for reads, learned from Command Code's read_file deep dive (Ahmad Awais, "how our read tool saves billions of tokens").
What changed
- Self-expiring dedup: re-reading the same unchanged window returns a short stub instead of re-sending the content. Consume-on-use keeps a stale hit at one wasted turn. Kill-switch: PORCUPINE_READ_DEDUP=0.
- Relational read/write ledger: edits to a partially-seen file are denied with an actionable message — the model reads the full file first. No loops.
- Filename normalization: NFD/NFC, narrow no-break space, curly quotes + Levenshtein-2 did-you-mean, boundary-checked (a repair is never an escape hatch).
- Device blocklist: /dev/zero, /dev/urandom, /proc//fd/* refused before any I/O — reading /dev/zero hangs forever.
- Named recoveries: EOF → use offset=N, empty file, binary → mime note, .pdf → pdftotext hint, byte/line caps → precomputed resume offsets.
- Line numbering: every delivered line carries its 1-indexed number (matches cat -n); the edit tool strips the prefixes from oldText.
- Input repair: path aliases + Number() coercion (never parseInt, never floor).
- Notebooks as documents: tagged cells, plots as images, huge outputs become a jq pointer.
- Images: jpeg quality ladder (95→20, attach at first fit) + scale-factor disclosure ("multiply displayed coordinates by N").
- Hygiene: BOM stripped, utf-8-safe truncation, trailing-newline line counts fixed.
Why it matters
Wasted tokens sit in the window for every turn after the read. Fewer junk reads = cheaper sessions and a model that sees the signal, not the noise.
npm i -g @porcupineai/porcupineai
Porcupine v0.1.60 (optimization + benchmarks)
Porcupine v0.1.60
Performance (all behavior-identical, benchmarked)
- Context conversion 3-4.8x faster; stream parsing 1.55-2.1x with zero heap growth
- TUI footer/task-graph/scroll-view up to 99x faster on unchanged frames; activity-chip fan-out 1.93x
- Headless event emission: 80k writes -> 217 per run (-99.7%)
- Session persistence: debounced batched appends with read-your-writes semantics
Benchmarks
- Aider Polyglot: 194/225 = 86.2% (DeepSeek V4 Flash through the Porcupine harness) — methodology + raw logs in
benchmarks/polyglot/
Skills
- Auto-use capability authoring (extract/craft triggers wired into the agent's default behavior)
- project-hygiene + WORKFLOW.md support
npm: npm install -g @porcupineai/porcupineai
Porcupine v0.1.59 (TUI debug release)
Porcupine v0.1.59
Fixed
- TUI rendering corruption: OSC133 zone markers compounded on every render (components mutated the parent's cached render array) — now copy-before-mutate with a regression test
- TUI flicker: the activity chip no longer forces a full-screen clear per phase change; off-viewport updates (status strip above a long session) no longer trigger clear+redraw — 810/810 tui tests
- CI reliability: protocol benchmark fits CI's 5s test timeout; agent-session-concurrent mock is deterministic (no 5ms-poll starvation); bounded streaming waits
npm: npm install -g @porcupineai/porcupineai
Porcupine v0.1.58 (UI debug + optimize)
Porcupine v0.1.58
Fixed
- stdin reassembly: partial escape sequences split across the flush timeout are held and completed with their tail — no more broken events or garbage fragments (bare ESC still flushes; Kitty negotiation sees buffered prefixes)
- markdown-viewer bottom border no longer truncated on full-viewport docs
- Extension dialogs can't stack over an open overlay anymore
Performance (benchmarked)
- Chat render ~2,700x faster on long sessions: Box/Container instance-stable caches — a 200-message tree went from ~28ms to ~0.01ms per render
- Main screen short-circuits no-op renders (identity check before diff/writes)
- Edit-tool diffs memoized
All ui-proof benchmark tests kept as regressions. Gate + CI green.
npm: npm install -g @porcupineai/porcupineai
Porcupine v0.1.57 (rebrand + core optimizations)
Porcupine v0.1.57
Rebrand
The Pi foundation is now Porcupine — every identifier, file, package, env var and doc renamed (Pi appears only in the README credit: Built on top of Pi (MIT)). PORCUPINE_* env vars with PI_* fallback; extension manifest contract kept compatible.
Performance (benchmarked, zero behavior change)
- EventStream burst drain: 3,016ms → 22ms (200k events, O(n²) → O(1))
- Tool-arg streaming JSON: ~4,300× less parse work (throttled, authoritative at done)
- Agent loop + sub-agents: incremental conversion/estimation (no O(n²) per-turn rescans)
- emitContext clone guard, memoized protected-paths + extension commands
- Kitty-image scans short-circuited; evals share one ModelRuntime
- Client timers unref'd + send-throw cleanup
- Startup: playwright truly lazy, highlight.js core + 44 grammars, lazy email deps — ~570ms → ~450ms cold start, ~40MB less memory
15+ opt-proof benchmark tests kept as regressions. Gate + CI green.
npm: npm install -g @porcupineai/porcupineai
Porcupine v0.1.56 (deep-review fixes + streaming perf)
Porcupine v0.1.56
Result of a whole-codebase deep bug review: 6 parallel workers (5 sub-agents + main agent) audited every source file across ai, agent, coding-agent, tui, client, protocol, evals and scripts. 27 findings, all fixed or documented.
Safety fixes (HIGH)
- rm guard bypass closed:
rm -f -randrm --recursive --force(split/long flags) no longer slip past the destructive-command gate in Normal/Auto mode — every spelling is hardline - Command injection closed:
craft_skill/extract_skilltool names are validated + echo fallbacks shell-quoted - Terminal escape injection closed: control bytes stripped from OSC 8 links, HTML passthrough, titles
Correctness fixes (MEDIUM)
- Sub-agents: LLM errors now fail the run (was: ok:true with empty summary); step budget is a hard cap (over-budget tool never executes)
- Throwing event listener can no longer fabricate a second agent_end
- /refresh rebind subscribes the replaced session (generation-guarded); /restart keeps your CLI config
- Cline env key works on the legacy stream path; Codex SSE handles CRLF
- 413 for oversized serve bodies (no EPIPE); Discord confirmations scoped to message id; store locks retry; atomic settings writes; client request timeouts; TUI error isolation
Performance
- Streaming markdown: 13x less parse work (throttled re-parses, byte-identical output)
All repro tests kept as permanent regressions. Gate + CI green.
npm: npm install -g @porcupineai/porcupineai
Porcupine v0.1.55 (security hardening)
Porcupine v0.1.55 — security hardening release
A deep safety audit found real holes in the trust surface. They are closed, proven by regression tests.
Security
- Write-then-execute is closed: files the agent just wrote are tracked; executing one content-scans it with the danger detector. No more smuggling destructive commands through a script file.
- Auto hardline now complete: path-equivalents of root deletes (double slashes, dot segments, option-terminator form, quoted roots) plus
kill -- -1,init 0,telinit 0. - Serve API: any non-loopback bind requires a token; cross-origin requests rejected (403); permission ids are unguessable.
- Bash output strips ANSI/terminal escapes (no terminal injection through command output).
- Browser: private/internal hosts blocked by default (
PORCUPINE_BROWSER_ALLOW_INTERNAL=1opts out); screenshot paths constrained to the workspace.
Recursive deletes: intent from scope
rm -rf inside the session workspace is the agent's own domain (runs freely in Auto/Normal). Outside the workspace it stays flagged. Protected paths (root, system dirs, plus the new safety.protectedPaths setting) are hardline-blocked in every mode. Deleting the working directory itself is always blocked.
Sub-agent sessions (recallable)
Every sub-agent run persists its full transcript as a normal session file (tagged, same store/format, 4MB cap, retention 100). /resume excludes them; session_search and the new /subagents command recall them; budget-exhausted runs are recoverable.
npm: npm install -g @porcupineai/porcupineai