pi-copy-message

Pi extension with a searchable TUI picker for copying raw session messages

Packages

Package details

extension

Install pi-copy-message from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-copy-message
Package
pi-copy-message
Version
1.0.4
Published
Jun 8, 2026
Downloads
not available
Author
fitchmultz
License
MIT
Types
extension
Size
30.5 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "./extensions"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi copy-message extension

A pi extension that adds /copy-message: a keyboard-first picker for copying raw session message text without terminal wrapping, padding, or rendered TUI artifacts. It also adds /copy-user as a direct shortcut for the most recent user message.

pi-copy-message supersedes pi-copy-user-message, which only copied the most recent user message.

What it does

  • Adds /copy-message
  • Adds /copy-user for copying the most recent user message directly
  • Copies raw stored session message text, not rendered terminal lines
  • Shows messages in chat order: oldest at top, newest at bottom
  • Selects the newest visible message by default
  • Supports role filters for user, assistant, and tool/bash messages
  • Hides tool/bash messages by default
  • Supports type-to-filter search across role and message text, with time:<term> for timestamp search
  • Supports Home/End jumps for oldest/newest visible messages
  • Includes fast paths: /copy-message latest, /copy-message last, and /copy-message newest
  • Supports direct numbered copies like /copy-message 3
  • Supports metadata copies with --with-meta, --with-metadata, or --with-role

Install

Install it from npm with pi:

pi install npm:pi-copy-message

Or install it directly from GitHub with pi:

pi install https://github.com/fitchmultz/pi-copy-message

Then reload pi from inside the app:

/reload

If you prefer to load it directly from a local checkout during development:

pi -e ./extensions/copy-message.ts

Usage

Open the picker:

/copy-message

Copy the most recent user message directly:

/copy-user

Copy the latest visible default message directly:

/copy-message latest

Aliases:

/copy-message last
/copy-message newest

Copy the 3rd default-visible message directly, matching the picker's 1-based oldest-to-newest numbering:

/copy-message 3

Copy with role and timestamp metadata instead of raw text only:

/copy-message latest --with-meta
/copy-message 3 --with-role
/copy-user --with-meta

Keyboard controls

Key Action
Move to older visible message
Move to newer visible message
Home Jump to oldest visible message
End Jump to newest visible message
Type text Filter visible messages
time:<term> Search timestamps
Backspace Delete one search character
Ctrl+U Toggle user messages
Ctrl+A Toggle assistant messages
Ctrl+T Toggle tool/bash messages
Tab Toggle a wrapped preview of the selected message
Alt+M Toggle raw vs metadata copy format
Enter Copy selected message text
Esc Cancel

Behavior notes

  • Entry IDs are hidden from the picker.
  • The picker caps visible rows and scrolls instead of filling the screen.
  • Search preserves your original selected message and restores it when the search is cleared.
  • General search does not match timestamps; use time:<term> when you want to search by displayed time.
  • Filter labels honor the active pi theme.
  • Copy notifications include the role and a short preview so you can verify what was copied.
  • /copy-message latest respects default visibility: user and assistant messages are visible, tool/bash messages are hidden. If only hidden messages exist, it falls back to the newest message so the command still does something useful.
  • /copy-message with no direct selector requires interactive TUI mode because the picker is a custom TUI component.
  • Direct commands such as /copy-user, /copy-message latest, and /copy-message 3 do not require TUI mode, though non-UI modes may not display notifications.

Compatibility

  • Tested with pi 0.78.1
  • Supported Node.js range for local repo tooling: >=22.19.0
  • .nvmrc pins Node 22.19.0 for local development

This package keeps pi core packages as optional wildcard peers per current pi package guidance. Local development uses @earendil-works/pi-coding-agent and @earendil-works/pi-tui as dev dependencies for typechecking and tests.

Development

npm install
npm run check

Key files:

  • extensions/copy-message.ts — publishable extension implementation
  • tests/copy-message.test.ts — regression tests for command wiring, filtering, search, jumps, and clipboard behavior