npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@siddr/pi-cmux-status

v0.1.3

Published

cmux sidebar status extension for pi

Readme

cmux-status extension

Sets cmux sidebar status entries for pi when running inside cmux (CMUX_WORKSPACE_ID is set).

Keys:

  • all sessions: pi-cmux-status:<owner>

<owner> is derived from the current cmux surface and panel ids, so each pi instance manages its own deterministic sidebar entry. If cmux does not expose an owner id for the current process, the extension does nothing.

The status text is:

  • π <name>: <status> for named sessions
  • π - <status> for unnamed sessions

Status values:

  • Ready
  • Working
  • Waiting
  • Error

Behavior:

  • Ready when idle
  • Working while the agent is running, with an animated textual spinner prefix
  • Waiting while another extension emits pi:waiting-for-user-input with { waiting: true }, with a dedicated icon and a one-shot waiting notification
  • Error after a tool finishes with an error, until the next session or new agent run, with a dedicated icon
  • named and unnamed sessions both show Ready again once the session returns to idle

Multiple pi instances in the same cmux workspace do not share a sidebar key anymore: each instance writes to its own surface/panel-specific key and clears only that key on disable/shutdown.

This extension does not render any TUI widget or footer content, and it does not use the cmux progress bar.

Install

pi install npm:@siddr/pi-cmux-status

Or symlink it locally into ~/.pi/agent/extensions/cmux-status and run /reload.

Usage

The extension manages the session-specific cmux sidebar status entry through the cmux socket API by default.

  • Sidebar status updates use the socket first and fall back to the cmux CLI if the socket is unavailable or rejects the request.
  • Waiting notifications also use the socket first, with the same CLI fallback behavior.
  • The socket address defaults to /tmp/cmux.sock and can be overridden with CMUX_SOCKET_PATH. Remote cmux ssh sessions may expose this as a relay address like 127.0.0.1:<port>.
  • cmux socket access is also affected by cmux's access mode settings, including CMUX_SOCKET_MODE.

Notes:

  • Ready uses a checkmark icon.
  • Waiting uses an hourglass icon.
  • Error uses an exclamationmark.triangle.fill icon.
  • Working does not use a cmux icon; it animates with the same braille-style textual spinner frames pi uses, such as .

For Waiting, cooperating extensions can emit the shared inter-extension event:

pi.events.emit("pi:waiting-for-user-input", {
	source: "my-extension",
	id: "some-stable-id",
	waiting: true,
});

pi.events.emit("pi:waiting-for-user-input", {
	source: "my-extension",
	id: "some-stable-id",
	waiting: false,
});

Toggle the behavior with /custom-cmux-status.

Tests

bun test cmux-status/tests/utils.test.ts
bun test cmux-status/tests/cmux.test.ts
bun test cmux-status/tests/index.test.ts