Skip to content

Releases: dnouri/pi-coding-agent

v2.6.0

Choose a tag to compare

@dnouri dnouri released this 02 Jul 10:53

2.6.0

Features

  • TRAMP project support — Remote projects now start the Pi CLI on the remote host and translate paths at the Emacs/Pi boundary, so session files, exports, commands, completion, and tool navigation use the right names on each side (#239)

Fixes

  • Safer session switching — Resuming, reloading, and opening session files now use each session's saved directory, retarget chat/input buffers when that directory changes, preserve named sessions, and keep the old Pi process alive unless the switch succeeds (#239)
  • Safe backend path metadata — Tool output and session state now tolerate malformed, mismatched, or control-character path metadata without breaking rendering or process filters; valid TRAMP paths still open from tool output with RET (#239)
  • Clearer missing-Node startup errors — When Emacs can find pi but /usr/bin/env node cannot find Node, startup now explains the PATH vs exec-path difference and points to safe recovery options (#244)

Documentation

  • Troubleshooting cleanup — First-run notes are now organized as collapsible sections and cover missing Pi, missing Node, project trust, grammar installation, TRAMP, and transient problems (#245, #244)
  • Comparison guide — The README now gives a more explicit comparison with gptel/gptel-agent, Aidermacs, claude-code-ide.el, agent-shell, and eca-emacs (#241)

Development

  • More reliable CI setup — GitHub Actions now use a local Emacs setup action with a pinned nix-emacs-ci flake revision to avoid setup rate limits (#240)

v2.5.2

Choose a tag to compare

@dnouri dnouri released this 28 Jun 10:24

2.5.2

Fixes

  • Much faster reload and resume — Large session reloads and resumes avoid quadratic JSON line buffering and skip unnecessary full-message parsing when building the session picker. Synthetic benchmarks showed roughly 9-11x faster reload/resume on the affected workloads (#238)
  • Reload/resume benchmarks — Added deterministic GUI, batch, and smoke benchmarks so future session performance changes have fast feedback (#238)
  • Projectile-backed projects start cleanly — Sessions no longer crash when an older Projectile project backend returns a (projectile . "/path") project value instead of implementing project-root; thanks @jhamm (#235)
  • Clearer README guidance — Added a comparison with other Emacs LLM helpers and corrected the Pi authentication instructions, including the /login flow and provider API key setup (#237)

v2.5.1

Choose a tag to compare

@dnouri dnouri released this 15 Jun 14:56

2.5.1

Improvements

  • Large resumed sessions become usable promptly — Session history no longer waits for whole-buffer fontification or old table decoration before the buffer appears; the visible tail still gets Markdown and table polish (#233)

  • Full dates in chat message headings — User turns now always show YYYY-MM-DD HH:MM, including messages from today, so saved transcripts stay unambiguous across days (#230)

Fixes

  • C-c C-k cancels compaction too — The abort key now stops the current compaction operation instead of silently doing nothing; streaming abort behavior is unchanged (#232)

v2.5.0

Choose a tag to compare

@dnouri dnouri released this 13 Jun 13:55

2.5.0

Features

  • Project-local Pi resources work by default — Pi 0.79 introduced a new project trust model. The Emacs frontend is more lenient than the Pi CLI here: project .pi prompts, skills, settings, themes, and extensions are trusted by default. Customize pi-coding-agent-project-trust-policy to use Pi's saved trust defaults or force --no-approve (#229)

  • Open session files directlyM-x pi-coding-agent-open-session-file opens an existing Pi JSONL session as a live chat/input session, with convenient Dired/visited-file defaults; thanks @etern for the request (#224)

  • Activity phase hookspi-coding-agent-activity-phase-functions lets user config react to thinking, replying, running, compact, and idle transitions for notifications, mode-line integrations, and similar UI tweaks; thanks @conornash (#223)

  • Slash command runner APIpi-coding-agent-run-command runs Pi slash commands by name with optional arguments from Emacs Lisp; thanks @bobrowadam (#212)

  • Configurable extension status faces — Style individual extension header statuses with pi-coding-agent-extension-status-faces, keyed by the extension statusKey; thanks @bobrowadam (#210)

Defaults

  • Thinking stays visible — Completed thinking is expanded by default, while still toggleable per chat or per block with the existing controls (#217)

  • Markdown-highlighted input — Input buffers use Markdown highlighting by default while keeping the raw markup visible as typed (#217)

Performance

  • Faster long chat rendering — History replay now batches display post-processing, and ordinary streaming text avoids table scans unless a pipe table is possible; thanks @leo-ar (#222)

Fixes

  • Clearer Markdown grammar diagnostics — Warn when an incompatible loaded Markdown tree-sitter grammar shadows the expected one, instead of reporting that all grammars are installed; thanks @2mc for the report (#218)

  • Input buffer kill confirmation — Killing the input buffer now gives the same chance to cancel as killing the chat buffer, instead of silently terminating a live Pi session (#214)

Compatibility

  • Pi CLI 0.79.1 or later is required — This release depends on Pi's project trust behavior, including defaultProjectTrust, and warns when an older CLI is detected (#229)

v2.4.0

Choose a tag to compare

@dnouri dnouri released this 27 May 21:59

2.4.0

Features

  • Safer compaction and queued input — Emacs now follows Pi’s current compaction_start / compaction_end protocol, renders manual compaction completion once, preserves queued text when compaction fails, and keeps follow-up prompts behind Pi’s automatic retry instead of letting them overtake it; thanks @nicabarnimble (#213)
  • Session resume uses Pi’s actual session file — Resume now starts from the sessionFile reported by get_state, so custom PI_CODING_AGENT_DIR setups and sessions outside ~/.pi/agent/sessions work correctly; thanks @yurikhan for the report (#206, fixes #205)

Compatibility

  • Current Pi CLI baseline — The supported Pi CLI is now @earendil-works/pi-coding-agent 0.75.5 or later, with real integration CI aligned to that runtime (#213)

Fixes

  • Prompt recovery around backend edges — If Pi exits while a prompt is being handed over, the prompt is restored to the input buffer; stale idle state replies and JSON false failure cases are handled correctly (#213)
  • Cleaner resume picker — If cached state has no session file yet, Emacs refreshes get_state before listing sessions and filters out sibling JSONL files that are not Pi sessions (#206)
  • No hardcoded /bin/bash — Helper scripts and Makefile now resolve bash through the environment/PATH for better portability; thanks @broughjt (#204)

v2.3.1

Choose a tag to compare

@dnouri dnouri released this 06 May 14:49

2.3.1

Fixes

  • Chat windows stay filled after thinking collapses — Long hidden thinking blocks no longer leave mostly blank panes; tail views stay at the new tail, and other chat windows keep their reading context (#200)
  • Unsupported extension UI warnings are quieter — Repeated unsupported widget or title updates now warn once per pi session instead of filling the minibuffer (#202)
  • Tables format correctly on other frames — Chat buffers visible on another frame now format table output as it arrives, without waiting for a later resize refresh (#203)

v2.3.0

Choose a tag to compare

@dnouri dnouri released this 27 Apr 22:12

2.3.0

Features

  • Completed thinking collapses by default — Live thinking still streams while pi is working, then completed thinking folds into a short preview once the answer lands. Press TAB to expand one thinking block, use C-c C-p h to toggle this chat, or C-c C-p H to choose the default for future chats; thanks @DevGiuDev for pushing this direction (#195)

Performance

  • Responsive generic tool previews — Large subagent or extension tool calls no longer make the chat pause while JSON arguments stream. Emacs now shows the generic tool name during the live preview, then restores full arguments when the call finishes streaming or starts executing; thanks @DevGiuDev for helping surface this pain point (#199)

Fixes

  • Syntax highlighting stays readable in edit diffs — Added and removed edit lines now use theme-derived background tints instead of foreground-heavy diff faces, so code colors remain visible across dark and light themes (#193)

  • Startup failures show pi’s stderr — When pi cannot start, the chat now includes the useful stderr message instead of only showing “Process exited”; huge stderr is capped while keeping the beginning and end. Thanks @fdgonthier for the proxy startup report and @koddo for workaround context (#197)

v2.2.1

Choose a tag to compare

@dnouri dnouri released this 17 Apr 16:55

2.2.1

Features

  • Direct thinking-level selectiont in the transient menu now opens a minibuffer selector instead of cycling through thinking levels (#191)
  • Provider names in the model selector — model choices now include the provider, making duplicate model names from different backends easy to tell apart; thanks @DevGiuDev (#187)

Fixes

  • Saving a chat buffer no longer retargets the live sessionC-x C-s and C-x C-w now write a Markdown transcript without breaking session (#192)
  • Table rendering is more robust across tree-sitter mismatches; thanks @DevGiuDev (#188)

v2.2.0

Choose a tag to compare

@dnouri dnouri released this 05 Apr 00:21

2.2.0

⚠️ Requires pi ≥ 0.65.0

This release takes advantage of pi 0.65.0's streamlined wire format for command metadata and context usage, removing ~250 lines of client-side tracking (#184). Update pi before upgrading the Emacs package:

npm install -g @mariozechner/pi-coding-agent

Features

  • Box-drawing table borders — Tables in chat now render with Unicode box-drawing characters (┌─┬─┐) instead of raw markdown pipes and dashes, giving them cleaner visual structure. The underlying buffer text stays canonical markdown so copy, search, and session history work exactly as before. Set pi-coding-agent-prettify-tables to nil to restore the old look (#173)
  • Navigate chat from the input buffer — Scroll and jump between user messages in the chat pane without leaving the input buffer. Emacs's other-window commands are scoped per session so multi-session frames stay predictable (#172)
  • Proportional input window heightpi-coding-agent-input-window-height now accepts a float (e.g. 0.3 for 30%) in addition to an integer line count. The split rebalances automatically when you resize the frame; thanks @sg-qwt for the request (#182, closes #179)
  • Quit without confirmation — New option pi-coding-agent-quit-without-confirmation suppresses the live-process prompt when killing a session buffer; thanks @sg-qwt (#175)
  • Unsupported extension UI warnings — When a pi extension tries to use a UI method Emacs doesn't handle yet (setWidget, editor, etc.), a minibuffer warning now appears instead of silent failure; thanks @erwagasore for the report (#183, #176)

Performance

  • Cool old tool blocks in long sessions — Completed tool blocks that scroll out of the hot tail are rewritten to plain text, shedding overlays, buttons, diff faces, and syntax fences. Long conversations with many tool calls stay responsive. Controlled by pi-coding-agent-hot-tail-turn-count (#160)

Fixes

  • Input window no longer hijacked by other packages — The input pane is now soft-dedicated, so magit, help, compilation, and friends pick a different window for their buffers (#174)
  • Tables no longer overflow with line numbers enabled — Width calculations now use usable columns instead of total window width, fixing truncation when display-line-numbers-mode is active; thanks @Jostar1024 for the report (#181, fixes #178)
  • Immediate reload feedbackPi: Reloading... appears instantly when you reload a session instead of waiting for the server round-trip (#171, fixes #163)

v2.1.0

Choose a tag to compare

@dnouri dnouri released this 17 Mar 14:13

📺 Demo videos

Pipe table wrapping

Pipe table wrapping demo

Parallel tool output

Parallel tool output demo

2.1.0

Features

  • Pipe tables wrap to fit the window — LLM responses often contain wide pipe tables that run off-screen. Tables are now automatically wrapped to the visible window width — during streaming, on history replay, and when you resize the window. Copy, isearch, and tree-sitter all operate on the original markdown underneath. New dependency: markdown-table-wrap (#167, #170)
  • Parallel tool output stays with its tool call — When the assistant runs several tools in one turn, each tool now keeps its own output from start to finish instead of interleaving. Stale previews from revised tool calls disappear cleanly (#169)

Fixes

  • Ghost tool blocks after clearing or reloading chats — Stale tool overlays no longer survive a buffer clear or session reload (#161)
  • TAB re-expand on collapsed tool blocks — After collapsing a tool block, TAB now reliably re-expands it instead of jumping to a heading; thanks @microamp for the report; fixes #166 (#168)
  • md-ts-mode from MELPA — pi-coding-agent now depends on the md-ts-mode MELPA package instead of shipping a bundled copy. If you're upgrading, your package manager will pull it automatically (#158)