pi-anycopy

Pi's /tree with a live syntax-highlighted preview, ability to copy any node(s) to the clipboard, and persistence of folded branches

Packages

Package details

extension

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

$ pi install npm:pi-anycopy
Package
pi-anycopy
Version
0.3.5
Published
Sep 7, 2026
Downloads
325/mo · 49/wk
Author
w-winter
License
MIT
Types
extension
Size
55.6 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "image": "https://raw.githubusercontent.com/w-winter/dot314/main/assets/anycopy-demo.gif",
  "extensions": [
    "extensions/anycopy/index.ts"
  ]
}

Security note

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

README

anycopy for Pi (pi-anycopy)

This extension mirrors all the behaviors of Pi's native /tree while adding a live, syntax-highlighting preview of each node's content, the ability to copy any node(s) to the clipboard, and optional node creation timestamps.

Install

From npm:

pi install npm:pi-anycopy

From the dot314 git bundle (filtered install):

Add to ~/.pi/agent/settings.json (or replace an existing unfiltered git:github.com/w-winter/dot314 entry):

{
  "packages": [
    {
      "source": "git:github.com/w-winter/dot314",
      "extensions": ["extensions/anycopy/index.ts"],
      "skills": [],
      "themes": [],
      "prompts": []
    }
  ]
}

Restart Pi after installation.

Usage

/anycopy

Keys

Defaults (customizable in config.json):

Key Action
Enter Navigate to the focused node (same semantics as /tree)
Shift+A Select/unselect focused node for copy
Shift+C Copy selected nodes, or the focused node if nothing is selected. Tool results include the originating call
Shift+X Clear selection
Shift+R Start or finish inclusive range selection
Tab Toggle between tree-focused and preview-focused layouts
Shift+L Label node (native tree behavior)
Shift+T Toggle label timestamps for labeled nodes
Shift+Ctrl+T Toggle node creation timestamps
Shift+Up / Shift+Down Scroll node preview by line
Shift+PageUp / Shift+PageDown Page through node preview
? Show available anycopy and native tree keybindings
Esc Close

Notes:

  • Enter always navigates the focused node, not the marked set
  • After Enter, /anycopy offers the same summary choices as /tree: No summary, Summarize, and Summarize with custom prompt
  • If branchSummary.skipPrompt is true in Pi settings, /anycopy matches native /tree and skips the summary chooser, defaulting to no summary
  • Escaping the summary chooser reopens /anycopy with focus restored to the node you tried to select
  • Cancelling the custom summarization editor returns to the summary chooser
  • If no nodes are selected, Shift+C copies the focused node
  • Tool-result previews always show the originating tool name and arguments above the result. Copying the node includes both the call and result
  • Shift+R anchors a range at the focused node. Tree movement extends or shrinks the inclusive range and adds every node in that range to the existing selection
  • Search, filter, and fold changes finish an active range while preserving its selected nodes
  • The default and no-tools views hide custom messages listed in hiddenCustomTypes. Use the all-entries filter to inspect or copy those messages.
  • Tab switches directly between the tree-focused and preview-focused layouts. Both panes remain visible according to their configured ratios
  • ? lists the anycopy and native tree keybindings available in the overlay
  • An optional Pi shortcut opens anycopy without clearing the editor draft. This copy-only view keeps Shift+C available; use /anycopy when you want Enter to navigate the session tree
  • Custom session entries use readable labeled content in previews and clipboard output. Timestamps in custom session entries use the local time zone
  • Single-node copies use just that node's content; role prefixes like user: or assistant: are only added when copying 2 or more nodes
  • When copying multiple selected nodes, they are auto-sorted chronologically by position in the session tree, not by selection order
  • Shift+A/Shift+C multi-select copy behavior is unchanged by navigation support, while plain space remains available for search queries
  • /anycopy opens over the session view, so widgets above the editor do not reduce the space available to its preview
  • Shift+T is configurable via keys.toggleLabelTimestamps in config.json
  • Shift+T shows timestamps for labeled nodes only, using the latest label-change time for each label
  • Shift+Ctrl+T is configurable via keys.toggleEntryTimestamps in config.json
  • Shift+Ctrl+T shows each node's creation time right-aligned at the far right of each visible tree row
  • Nodes without a creation time show no timestamp
  • Timestamps use a compact format: same-day HH:MM, same-year M/D HH:MM, cross-year YY/M/D HH:MM
  • Label edits are persisted via pi.setLabel(...)
  • Folded branches are persisted by default in hidden /anycopy session entries, so closing/reopening /anycopy, switching to a sibling branch, or revisiting the session later restores the same folded view until you explicitly unfold it again
  • Search and filter changes still reset the live overlay's fold state temporarily; reopening /anycopy restores the persisted folded branches

Configuration

Edit ~/.pi/agent/extensions/anycopy/config.json:

  • treeFilterMode: initial tree filter mode when opening /anycopy; defaults to default to match /tree
    • one of: default | no-tools | user-only | labeled-only | all
  • hiddenCustomTypes: custom message type names to hide in default and no-tools views. Names match the entry's customType exactly and case-sensitively, for example ["background-status", "tool-diagnostics"]. Defaults to []. Each name must be a nonblank string.
  • persistFoldState: whether /anycopy persists folded branches across reopenings and later sessions; defaults to true; when disabled, /anycopy does not read or write hidden fold-state session entries
  • shortcut: optional Pi shortcut that opens copy-only anycopy without clearing the current editor draft. Set it to a key such as ctrl+shift+c, or leave it as null
  • hints.mode: full displays shortcut hints below the tree, while compact uses one status row for help and Enter guidance
  • layout.treeFocusTreeRatio: fraction of pane rows used by the tree in tree-focused mode; must be greater than 0 and less than 1
  • layout.previewFocusTreeRatio: fraction of pane rows used by the tree in preview-focused mode; must be greater than 0 and less than 1
  • keys: keybindings used inside the /anycopy overlay
{
  "treeFilterMode": "default",
  "hiddenCustomTypes": [],
  "persistFoldState": true,
  "shortcut": null,
  "hints": {
    "mode": "full"
  },
  "layout": {
    "treeFocusTreeRatio": 0.85,
    "previewFocusTreeRatio": 0.15
  },
  "keys": {
    "toggleSelect": "shift+a",
    "copy": "shift+c",
    "clear": "shift+x",
    "toggleLabelTimestamps": "shift+t",
    "toggleEntryTimestamps": "shift+ctrl+t",
    "scrollUp": "shift+up",
    "scrollDown": "shift+down",
    "pageUp": "shift+pageup",
    "pageDown": "shift+pagedown",
    "togglePaneFocus": "tab",
    "toggleRangeSelection": "shift+r",
    "help": "?"
  }
}