Skip to content

Releases: gunasekar/trails

trails 1.9.2

Choose a tag to compare

@gunasekar gunasekar released this 25 Oct 20:57

trails server, 1.9.0's name for trails boot, is gone. A service started under 1.9.0 and not restarted since still runs trails server: run brew services restart trails before upgrading, or after it if the service has stopped.

trails 1.9.1

Choose a tag to compare

@gunasekar gunasekar released this 25 Oct 20:20

trails server is now trails boot: it starts tmux and the trails tmux lost, then waits as the server's parent for the service manager. It isn't a trails daemon, and the old name suggested one. Nothing changes in how you use it: brew services start trails.

trails server still works, as another name for boot, for a service started under 1.9.0. Run brew services restart trails to switch it over. That restarts tmux, and your trails come back as they would after a crash. The service log moves to $(brew --prefix)/var/log/trails-boot.log.

trails 1.9.0

Choose a tag to compare

@gunasekar gunasekar released this 25 Oct 19:59

trails server: the tmux server, for a service manager to keep running.

brew services start trails

On macOS, a tmux server started from a terminal belongs to that app, however detached it looks, and a Force Quit of the app (kitty, Ghostty, Zed) takes the server down with every agent in it. Started as a service (a launch agent on macOS, a systemd user unit on Linux), it belongs to no app. It also brings back the lost trails as it starts, without waiting for a terminal to attach, and starts tmux again after a crash or a kill-server.

The server takes your login shell's environment, so put the PATH your agents need in ~/.zprofile or ~/.zshenv, not only ~/.zshrc. It's opt-in: installing or upgrading trails starts nothing. See ADR 21.

trails 1.8.4

Choose a tag to compare

@gunasekar gunasekar released this 25 Oct 19:35

Two restores running at once (a launch agent's and tmux.conf's, say) now report each trail once. The restore that finds a trail already back says "is back already" a single time, instead of twice followed by a restored … as line with no session after it. Nothing was restored twice before either: this is about what it said.

trails 1.8.3

Choose a tag to compare

@gunasekar gunasekar released this 25 Oct 12:15

A restore the agent refuses starts the trail fresh once, not twice. 1.8.1's late-refusal path and restore's own fallback could both start it, leaving two fresh agents on one trail (consent and consent-2). A restore now checks, inside the launch lock, whether a window already carries the trail's ID.

A trail's window gets its options in the same tmux command that makes it. On a slow start, the agent's first hook could run before them and start a pass that rewrote records, which could bring back a forgotten record or make a restored trail's own name read as taken.

trails 1.8.2

Choose a tag to compare

@gunasekar gunasekar released this 25 Oct 12:15

The picker clears the temp folders that killed pickers left behind: trails.XXXXXX folders and probe sockets more than a day old, yours only.

trails 1.8.1

Choose a tag to compare

@gunasekar gunasekar released this 24 Oct 21:55

A restore the agent refuses late now starts fresh in its place, as the same trail, instead of coming back lost. Claude can take longer than trails' start-up check to refuse a conversation it never kept (one opened and never typed into), so trails restore said "restored" and the trail came back lost, to be refused again by every restore.

trails 1.8.0

Choose a tag to compare

@gunasekar gunasekar released this 24 Oct 21:20

A trail has an ID of its own (ADR 20). Every trail gets one when it starts, t and eight hex digits, and keeps it until it ends, through a restore included. Its record is filed under it, by codebase: ~/.local/state/trails/sessions/<codebase>/<ID>, the codebase named as the checklist's folder under data is. Nothing changes in what you see: the tmux session (acme/checkout-2) stays the trail's name in tmux, the picker and trails ls.

  • A restore comes back as the same trail, its record in place, even when it lands on -2 because something took its session.
  • trails ls's tab-separated output gains a trail column, before the title, which stays last.

Upgrading: nothing to do. The first 1.8 command that reads records moves 1.7's to the new layout, once. Trails running through the upgrade keep reading as running, and close into the history as before when their agents exit.

trails 1.7.2

Choose a tag to compare

@gunasekar gunasekar released this 24 Oct 20:27
  • The checklist stays open as you add. In prefix N, Enter on a typed item adds it and keeps the list open on it, ready for the next. With nothing typed, Enter still copies the item and closes, so pasting into the agent is one key. ctrl-e brings the list back once you quit the editor.
  • The list is ten rows, and the pane showing the item whole takes the rest of the popup, now 60% wide.
  • The editor and a shell open on the right. prefix e: the agent on the left 40%, the editor on the right 60%. prefix `: the agent on the left 60%, the shell on the right 40%. With both, the shell sits under the editor. Windows already open re-lay themselves the next time you press either key.
  • A shorter README, with the reference material folded away, and docs/ brought up to date.

Upgrading: reload tmux after brew upgrade, so prefix N picks up the new popup width.

trails 1.7.1

Choose a tag to compare

@gunasekar gunasekar released this 24 Oct 14:23

The checklist (prefix N) shows the item under the cursor whole. A row is one line, cut to the popup's width; a pane under the list now has the item the cursor is on in full, wrapped at words, with the lines written under it. It is what Enter copies.