pi-jujutsu

Live jj (jujutsu) working copy status and repo context for pi

Packages

Package details

extension

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

$ pi install npm:pi-jujutsu
Package
pi-jujutsu
Version
0.1.2
Published
Apr 3, 2026
Downloads
52/mo · 11/wk
Author
mgabor3141
License
MIT
Types
extension
Size
14 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "dist/index.js"
  ]
}

Security note

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

README

pi-jujutsu

Live working copy status and repo context for jj repos in pi. No prompts, no commands, no configuration required.

Install

pi install npm:pi-jujutsu

Or in ~/.pi/agent/settings.json:

{
  "packages": ["npm:pi-jujutsu"]
}

What it does

Footer

In jj colocated repos, pi's footer normally shows (detached) because git sees a detached HEAD. pi-jujutsu replaces this with useful context:

  • Bookmark name if @ has one: (main)
  • Commit description otherwise: (add login endpoint)
  • Shortest unique change ID as fallback: (v)
  • Stack depth when working on a stack: (add login [3])
  • Empty prefix when @ has no changes: (empty: main)

Working copy widget

A colored widget above the editor shows the current working copy diff stat (@ vs @-), with green/red for insertions and deletions:

 src/index.ts  | 48 +++++++++++++++++++++++++++++++++++++-----------
 src/config.ts | 12 ++++++++++++
 2 files (+49, -11)

When @ is empty (e.g. right after jj commit), the widget collapses to a one-liner showing the parent commit:

 @- add login endpoint · 2 files (+49, -11)

The widget updates live between agent turns and stays visible after the agent finishes. It also appears on session start if the working copy has uncommitted changes. Stat bars adapt to terminal width on resize.

Changes from other terminals (e.g. running jj commit elsewhere) are detected automatically and the widget and footer update within moments.

Toggle the widget with Ctrl+Shift+J. The widget is display-only; nothing is sent to the LLM.

Requirements

  • jj installed and on PATH
  • A jj repository (colocated or standalone)

The extension silently does nothing in non-jj repos.