Skip to content

Releases: Abd0r/porcupineai

Porcupine v0.1.64: Faster AI-agent foundations

Choose a tag to compare

@Abd0r Abd0r released this 11 Aug 12:03
v0.1.64
f58697a

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.64

Porcupine v0.1.63: Web Development stack

Choose a tag to compare

@Abd0r Abd0r released this 11 Aug 10:28
v0.1.63
ccb77ab

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 refs
  • browser_resize: exact responsive viewport checks
  • browser_wait: deterministic selector-state synchronization
  • browser_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

Choose a tag to compare

@Abd0r Abd0r released this 11 Aug 02:58
v0.1.62
40bc5a4

Porcupine v0.1.62: arXiv + Reddit search

Added

  • arXiv searchsci/arxiv-search skill + scripts/arxiv-search.mjs tool: 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 searchweb/reddit-search skill + scripts/reddit-search.mjs tool: 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

Choose a tag to compare

@Abd0r Abd0r released this 11 Aug 01:59
v0.1.61
9f6806a

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)

Choose a tag to compare

@Abd0r Abd0r released this 10 Aug 23:43
v0.1.60
ff6a16a

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)

Choose a tag to compare

@Abd0r Abd0r released this 09 Aug 00:10
v0.1.59
3153688

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)

Choose a tag to compare

@Abd0r Abd0r released this 08 Aug 23:04
v0.1.58
9a6782a

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)

Choose a tag to compare

@Abd0r Abd0r released this 08 Aug 22:23
v0.1.57
0cf93d9

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)

Choose a tag to compare

@Abd0r Abd0r released this 08 Aug 08:27
v0.1.56
5ec23b5

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 -r and rm --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_skill tool 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)

Choose a tag to compare

@Abd0r Abd0r released this 08 Aug 06:11
v0.1.55
e7d7397

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=1 opts 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