Skip to content

Releases: zkzofn/pier

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 08:49
  • ^T checks before it promises. Claude Code starts fine with
    --channels plugin:telegram… when the plugin is off or its bot token is
    missing — the session just never gets the channel (with no token the
    plugin's MCP server exits within a second; only /mcp shows it). The
    picker now keeps ^T off in either case and says what's missing:
    telegram plugin not enabled · /plugin or no telegram token · /telegram:configure. Enter and restore-all run the same check.
  • The picker's hints sit on two lines: the first names what Enter and
    ^S do on the row, the second the keys that don't depend on it —
    ^T: telegram, Tab: name (only where there is a session to name),
    Esc: close. The header shows telegram ✓ only while it's on; the
    tg abbreviation is gone.
  • The new-session popup grew from 18 to 22 rows (17 list rows instead of
    13). pier ensure refreshes the tmux block on the next attach, as usual.
  • Known, from the telegram plugin (0.0.7): one Claude Code session at a
    time holds the bot, and any new Claude Code session with the plugin
    enabled takes it over — the earlier session's channel goes quiet.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 08:40
  • The picker creates, it never switches. Inside tmux the new-session
    picker now lists every running session — the one you are in on top, marked
    , with the cursor on it — and Enter on a running session starts
    another Claude Code session in that session's directory instead of jumping
    back into it (jumping is the sidebar's job). ^S still opens a terminal
    there, and Tab now names the new session on running-session rows too.
    So prefix+N Enter is "one more Claude Code here".
  • Names follow the directory on every row, -2, -3, … past taken ones: a
    third agent in ~/dev/suite1 is suite1-3, never suite1-2-2.
  • Fixed: since 1.0.0 the picker dropped the session it was opened from, which
    left no row for its directory at all — no way to open a terminal or a
    second agent where you already are.
  • Outside tmux (bare pier) Enter on a running session still attaches to
    it: without a sidebar, that is the way back into a session.

v1.2.0

Choose a tag to compare

@zkzofn zkzofn released this 25 Aug 01:22

Two picker fixes that make ^S behave — and make the picker teach itself.

^S on a running session opens a terminal there. Since 1.0.0 the picker's cursor boots on the first running session, and ^S on such a row silently jumped instead of creating anything — "new session → ^S" hopped to a different session on every try. ^S now means "terminal session at this row's directory" on every row; Enter still jumps back in.

The picker explains itself. The bottom hint follows the cursor and says what Enter/^S will do to that row (jump · terminal there · resume). The ? cheatsheet says keys act on the row and gains the missing ^T line; both READMEs now spell out that picker keys are pressed inside the popup — no prefix needed.

Upgrade: pier upgrade (or brew upgrade zkzofn/tap/pier).

v1.1.1

Choose a tag to compare

@zkzofn zkzofn released this 21 Aug 06:16

A tmux client picks its server from $TMUX, $TMUX_TMPDIR or -L, so pier setup can reload a different server than the one you are looking at — and it used to say nothing about which one.

The reload line now names the socket:

tmux: config reloaded on the running server (/private/tmp/tmux-501/default)

No behaviour change otherwise.

v1.1.0

Choose a tag to compare

@zkzofn zkzofn released this 21 Aug 06:04

Update notices that actually reach you, and a command to act on them.

  • pier upgrade — asks the Homebrew tap right now (no waiting for the daily check) and runs the upgrade. Source installs get the git pull && make setup instructions instead
  • Sidebar notice — while the tap carries a newer pier, every sidebar shows an ↑ <version> · pier upgrade line at the bottom
  • The gap this closes: the daily check only ran on a bare pier, so anyone whose habit is tmux attach + prefix+N never heard about a new version — and never got the new tmux settings either. pier ensure, which runs from the attach / session-change hook no matter how you use pier, now quietly refreshes the managed ~/.tmux.conf block (keeping the binary path it already records) and reloads tmux
  • Config writes are atomic, since that refresh can fire from several attaching clients at once
  • README gained an Updating section

PIER_NO_UPDATE_CHECK=1 silences every notice.

Updating from an older pier

brew update && brew upgrade zkzofn/tap/pier

v1.0.0

Choose a tag to compare

@zkzofn zkzofn released this 21 Aug 05:47

pier itself is now the way you start a session — the shell wrapper people used to hand-roll is built in.

The entry point

  • pier — outside tmux it opens the picker and attaches to whatever you pick; inside tmux it runs claude in the current pane. pier -r, pier --continue, … pass straight through to claude (pier keeps only -v / -h), and an unknown bare word prints usage instead of starting a session
  • First run is a short wizard: it offers to wire tmux and the Claude Code hooks (same as pier setup), then to write a shell alias — cl by default — as a marked block in your login shell's rc file (zsh / bash / fish). pier alias <name> changes it later
  • Update check — once a day a pier start compares your version against the Homebrew tap and offers brew upgrade (source installs get a one-line notice). PIER_NO_UPDATE_CHECK=1 turns it off. After an upgrade the first run refreshes pier's ~/.tmux.conf block, keeping whatever binary path it already points at

Leaving a session is clean

  • set -g detach-on-destroy off plus a pane-exited hook (pier reap): a session ends the moment only its sidebar is left, and your client moves to the most recent session instead of being dropped out of tmux — plain exit now behaves like prefix+x
  • When the last session closes, the standalone attach erases tmux's [exited] line, so the terminal looks as it did before pier ran

Picker

  • Running sessions are listed above the directories, with the sidebar's own status icons — Enter on one jumps back into it. Typing filters both groups; the cursor starts on the first running session
  • The plain-shell option (^S) is called a terminal session everywhere

Also in this release (never published separately)

  • v0.11.0 — explicit resume from the picker: a ↻ resume button per casualty directory, an ↻ restore all row, ^T for the telegram channel
  • v0.10.0 — crash and OS-shutdown detection that makes those offers possible

v0.9.0

Choose a tag to compare

@zkzofn zkzofn released this 06 Aug 04:17

Highlights since v0.4.1

  • Shell sessions: ^S in the new-session picker starts a plain shell instead of Claude Code (v0.7.0); shell sessions are listed and jumpable in the sidebar, marked $ (v0.8.0)
  • prefix+N opens the new-session picker from anywhere (v0.8.0)
  • ? help at the bottom of the sidebar (or ?) pops up a keybinding cheatsheet (v0.9.0)
  • Sidebar labels show the prompt each session is working on, blanking after /clear (v0.5.0)
  • prefix+x kills the current session and jumps to the next one in sidebar order (v0.6.0, v0.6.1)
  • pier setup now upgrades its managed tmux.conf block in place, picking up new bindings (v0.8.0)

v0.4.1

Choose a tag to compare

@zkzofn zkzofn released this 20 Jul 01:45

Typing a nonexistent path in the new-session picker now offers 'mkdir & create' — the directory is created and the session starts there in one Enter.

v0.4.0

Choose a tag to compare

@zkzofn zkzofn released this 20 Jul 01:32

New-session picker: click '+ new session' in the sidebar (or press n), pick a directory in a popup — filter-as-you-type, Enter to create (session named after the directory, Tab to rename), open paths jump instead.

v0.3.2

Choose a tag to compare

@zkzofn zkzofn released this 20 Jul 01:18
  • Fix ghost/duplicated sidebar lines after multi-client pane reflows
  • Much stronger highlight for the session you're currently in
  • Keyboard cursor stays hidden until you use j/k