Releases: dnouri/pi-coding-agent
Release list
v2.6.0
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
pibut/usr/bin/env nodecannot find Node, startup now explains thePATHvsexec-pathdifference 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
transientproblems (#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-ciflake revision to avoid setup rate limits (#240)
v2.5.2
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 implementingproject-root; thanks @jhamm (#235) - Clearer README guidance — Added a comparison with other Emacs LLM helpers and corrected the Pi authentication instructions, including the
/loginflow and provider API key setup (#237)
v2.5.1
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
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
.piprompts, skills, settings, themes, and extensions are trusted by default. Customizepi-coding-agent-project-trust-policyto use Pi's saved trust defaults or force--no-approve(#229) -
Open session files directly —
M-x pi-coding-agent-open-session-fileopens 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 hooks —
pi-coding-agent-activity-phase-functionslets user config react tothinking,replying,running,compact, andidletransitions for notifications, mode-line integrations, and similar UI tweaks; thanks @conornash (#223) -
Slash command runner API —
pi-coding-agent-run-commandruns 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 extensionstatusKey; 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
2.4.0
Features
- Safer compaction and queued input — Emacs now follows Pi’s current
compaction_start/compaction_endprotocol, 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
sessionFilereported byget_state, so customPI_CODING_AGENT_DIRsetups and sessions outside~/.pi/agent/sessionswork correctly; thanks @yurikhan for the report (#206, fixes #205)
Compatibility
- Current Pi CLI baseline — The supported Pi CLI is now
@earendil-works/pi-coding-agent0.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
falsefailure cases are handled correctly (#213) - Cleaner resume picker — If cached state has no session file yet, Emacs refreshes
get_statebefore 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
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
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
TABto expand one thinking block, useC-c C-p hto toggle this chat, orC-c C-p Hto 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
2.2.1
Features
- Direct thinking-level selection —
tin 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 session —
C-x C-sandC-x C-wnow write a Markdown transcript without breaking session (#192) - Table rendering is more robust across tree-sitter mismatches; thanks @DevGiuDev (#188)
v2.2.0
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-tablesto 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-windowcommands are scoped per session so multi-session frames stay predictable (#172) - Proportional input window height —
pi-coding-agent-input-window-heightnow 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-confirmationsuppresses 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-modeis active; thanks @Jostar1024 for the report (#181, fixes #178) - Immediate reload feedback —
Pi: Reloading...appears instantly when you reload a session instead of waiting for the server round-trip (#171, fixes #163)
v2.1.0
📺 Demo videos
Pipe table wrapping
Parallel tool output
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)

