Skip to content

Releases: dnouri/pi-coding-agent

v2.2.1

17 Apr 16:55

Choose a tag to compare

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

05 Apr 00:21

Choose a tag to compare

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

17 Mar 14:13

Choose a tag to compare

📺 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)

v2.0.1

09 Mar 22:53

Choose a tag to compare

2.0.1

Fixes

  • Bundled md-ts-mode no longer overrides Markdown globally — Loading pi-coding-agent no longer registers .md files or remaps markdown-mode behind your back, so Doom Emacs and other Markdown setups keep their expected hooks and keybindings; thanks @junghan0611 for the report (#157, fixes #155)
  • Header-line extension status renders cleanly — Extension status and working messages now escape % correctly in the header line, and extension status is rendered neutrally instead of looking like a warning (#154)

v2.0.0

04 Mar 16:23

Choose a tag to compare

2.0.0

Breaking Changes

  • Emacs 29.1 required: The chat buffer now uses Emacs's built-in tree-sitter support for markdown rendering. Emacs 28 is no longer supported. This is the right trade-off: tree-sitter gives us a proper parse tree instead of brittle regexps, and the result is code that works much better together with Emacs's display engine.
  • markdown-mode dependency removed: The markdown-mode / gfm-mode package is no longer used. If you customized markdown-mode faces for the chat buffer, those customizations no longer apply
  • phscroll support removed: The optional phscroll integration for horizontal table scrolling has been dropped. Wide markdown tables that exceed the window width will wrap, which is not ideal. A proper solution is in progress

Tree-sitter Markdown

  • md-ts-mode replaces gfm-mode — A tree-sitter major mode for Markdown, bundled in the package until it is released on MELPA, now renders the chat buffer. Headings, emphasis, code spans, links, tables, fenced code blocks, and markup hiding all come from the parse tree. This replaced a 450-line pre-fontification pipeline that maintained hidden per-language buffers, synchronized content incrementally, and fought with jit-lock; a net reduction of over 500 lines of render code (#150)
  • Syntax-highlighted tool output: Diffs, file contents, and shell output are wrapped in fenced code blocks with language-specific tree-sitter injection. When the file extension is recognized, you get proper syntax highlighting; otherwise the content is left plain (#150)
  • Grammar management: A new module, pi-coding-agent-grammars.el, handles tree-sitter grammar installation. On first session start, you are prompted to install the two essential grammars (markdown, markdown-inline) and optionally ~20 language grammars for code block highlighting. M-x pi-coding-agent-install-grammars is available at any time (#150)

Performance

  • Simpler streaming path: With tree-sitter, modification hooks no longer need to be inhibited during streaming. jit-lock-after-change is very cheap per delta; the idle fontification timer and manual font-lock-flush calls are gone (#150)
  • Incremental thinking-block rendering — Thinking deltas now append only new content instead of deleting and reinserting the entire blockquote region on every delta, eliminating O(n) cost growth in long thinking blocks (#153)
  • Batched redisplay — Multiple JSON lines delivered in a single process read() now produce one redisplay cycle instead of one per event (#153)

Improvements

  • Full tool rendering on session resume — Resuming a session now displays each tool call with its header, output, overlays, and toggle — exactly as it appeared during the live conversation. The old [N tool calls] summary is gone (#152)

v1.3.6

26 Feb 13:10

Choose a tag to compare

1.3.6

Features

  • Built-in slash commands work from the input buffer/new, /model, /compact, /session, /fork, /resume, /export, /copy, /name, /quit, and /reload now autocomplete and dispatch locally instead of being sent to the LLM as prompt text. Extension and skill commands still pass through to pi. (#148)
  • Slash commands accept arguments/model opus pre-fills or auto-selects the model picker with fuzzy matching; /export /tmp/out.html exports to a custom path; /compact keep API details passes instructions; /name my-session sets the name directly. (#148)
  • Smarter model selector — Fuzzy matching (opus → "Opus 4.6"), auto-select on unique match, and shortened display names matching the header-line. Fixes "current: unknown" when invoked from the input buffer. (#148)

Fixes

  • Backslash in \n, \t, \r etc. no longer hidden in chat — markdown-mode was hiding the backslash in escape sequences; now only valid CommonMark escape targets (§2.4) are affected. (#147)
  • phscroll detected correctly with lazy package managers — Users of straight.el, elpaca, and similar no longer get a spurious "Install phscroll?" prompt when the package is already installed. (#142)
  • Dictionary completions removed from input buffer — TAB and C-M-i no longer offer dictionary words; only slash commands, @file references, and file paths are completed; hat tip @luckysori. (#141)

v1.3.5

23 Feb 19:21

Choose a tag to compare

📺 Watch the demo video (7m 18s)

1.3.5

Fixes

  • Fork-at-point is now reliable in deep and compacted sessions — mapping now resolves via get_fork_messages, preserves visible-turn alignment, and surfaces clearer RPC errors when fork lookup fails. (#139)
  • Large generic tool details toggles no longer freeze or overflow — expanding/collapsing big **Details** payloads avoids expensive full-region fontification and prevents regexp stack-overflow failures. (#137)
  • Startup version handling is simpler and more robust — the header stays stable while pi CLI version is detected after process start and shown as a minibuffer notice (Pi: version X.Y.Z), reducing startup lock contention; thanks @jorgeavaldez for the initial report. (#140)
  • Cleaner toggle/session test behavior and CI output — dependency checks are stubbed in unit tests that don’t require a real pi binary, eliminating noisy missing-pi warnings. (#138)

v1.3.4

22 Feb 13:57

Choose a tag to compare

1.3.4

Fixes

  • RET navigation is now accurate across tool outputread, edit, and custom tool outputs now map to the correct file/line in both collapsed and expanded views, with clearer behavior on non-content lines. (#135)
  • Manual compaction is now queue-safe and more resilient — queued send/steer input is handled safely during compaction, steer-send failures preserve input, and compaction is guarded when process state is invalid. (#134)
  • Smoother write-streaming previews — optimized streaming preview updates avoid unnecessary redraw work, while keeping fontify state correct and handling edge-case delta behavior more robustly. (#136)

v1.3.3

19 Feb 23:53

Choose a tag to compare

1.3.3

Features

  • Fork from any chat turn (f) — branch a conversation directly from point in the chat buffer with confirmation flow and improved turn navigation. (#124)
  • More informative status line during work — the header now clearly shows what the agent is doing (thinking, replying, running, compact, idle), refreshes cost/context stats sooner, and surfaces extension status messages. (#121; thanks @SayreBlades)
  • Clearer session command behaviorM-x pi-coding-agent now consistently restores/focuses the current session; M-x pi-coding-agent-toggle is the explicit hide/show command (frame-local behavior). (#125, #133; thanks @conornash)
  • Custom pi launch command — new pi-coding-agent-executable supports wrappers like ("npx" "pi"). (#131)

Fixes

  • Thinking block streaming stability — multiple fixes for whitespace normalization, block separation, and markdown syntax propertization in large thinking blocks. (#123, #128, #132)
  • Local test reliability improvedmake test now prefers the local checkout on load-path, avoiding accidental use of an installed package version. (#130; thanks @jorgeavaldez)

v1.3.2

12 Feb 14:47

Choose a tag to compare

1.3.2

Improvements

  • Copy now defaults to visible textM-w/C-w/C-k strip hidden markdown markup by default; raw markdown copying remains available via customization. (#120, #116)
  • Markdown syntax highlighting for input prompts (opt-in) — GFM highlighting was introduced in this release and is available via customization. (#117, #120)

Fixes

  • Streaming tool output no longer flickers under markdown fontification — prevents temporary heading/bold rendering glitches while deltas stream in. (#119)
  • Extension status text strips ANSI escape sequences — header-line status is now clean and readable in Emacs; thanks @conornash. (#118)
  • Read/tool fence and thinking rendering stability improvements — more robust fenced block handling (including nested backticks) and improved file-line navigation from tool output. (#122)