Skip to content

Releases: m4ttstack/rt

v2.7.0

Choose a tag to compare

@m4ttheweric m4ttheweric released this 19 Aug 18:46

the worktree lifecycle release. rt worktree replaces the parking lot with a provision/dispose lifecycle backed by an on-deck pool of ready trees, and the daemon moves to realtime event tracking with per-repo grants. also ships the @mattstack/rt-client package, StrongDM agent verbs, and a batch of nav picker quality-of-life work. (an experimental mattcloud sandbox surface was built and retired entirely within this range, so it ships nothing.)

Worktree lifecycle

  • new rt worktree verb family: provision, create, dispose, list, freshen, adopt, and each, with a nav picker when invoked bare
  • on-deck pool: pre-created worktrees kept ready by the daemon (replenish/shrink), a ready-step engine with changed-glob triggers, and name pools with ticket-derived branch names
  • provision claims from the pool or cold-creates, revalidates the claim under lock, and surfaces degraded readiness instead of hiding it
  • dispose is guarded (MR-sha anchor, tolerant of generated drift, lease-aware) and renames to trash with async reaping, so verb latency is independent of tree size; if the trash rename fails, the branch and registry record are kept
  • merge reactor: merged MRs trigger auto-return of your shell and guarded auto-dispose of the finished tree
  • per-repo worktree registry with a reconcile pass (ground-truth branches, unmanaged-tree adoption), epoch-checked saves so stale snapshots cannot clobber concurrent writes, and per-tree operation locks
  • the parking lot is deleted; rt park remains as a deprecated stub pointing at rt worktree
  • install dedup sees through env-var prefixes, and pnpm implicit installs default to a plain install

Daemon: realtime tracking and freshness

  • per-repo tracking levels (live/poll/off) with per-cache opt-in grants, edited interactively via rt daemon track
  • realtime events watchers replace the ActionCable MR subscriptions; events fan out to granted stores (project upserts, teammate pushes, notes)
  • delta sync: incremental updatedAfter pulls with a daily deep reconcile, demand-scoped to a 30-day window; a failed deep reconcile falls back to delta instead of wedging the repo
  • pipeline top-up inside delta sync (4-wide fetches, restores 5-minute pipeline freshness, stuck pipelines age out after 24h)
  • freshness on demand: cache:read takes a max-age gate, and rt daemon status gains --fresh/--max-age plus events freshness reporting
  • discussions lifted into ~/.rt/discussions.json with grant-aware reads; bot-authored notes are skipped
  • MR actions write back: mutations refresh the stores they changed, and a failed read-back can no longer report a succeeded mutation as failed
  • notification correctness: mr_ready keys on mergeability, mr_approved requires a new approver, conflict flaps stopped
  • mr:by-branch batch read (store-first with forge write-back)
  • secrets:forge-token, a grant-gated forge-token verb
  • cron trigger layer: broadcast pattern to debounced command
  • rt daemon status stops calling a live daemon dead

rt-client

  • published as @mattstack/rt-client: typed commands, unix-socket transport, relay, repo-name resolution, and a fake-daemon subpath export for tests
  • daemon handlers for the client catalog carry the catalog's own types

StrongDM

  • agent JSON envelopes for connect, status, and connections, with a production guard and non-interactive reason/duration defaults
  • desktop-app preflight: launches SDM.app when the CLI probe errors
  • rt sdm connections listing, and the rt-sdm-connect agent orchestration skill

Navigation

  • image previews in the fzf preview pane, with iTerm2 routing and character-art fallback when kitten cannot render
  • live listing refresh while the picker is open, via the nav-watch fs-event bridge
  • sort menu on ctrl-s, list wraparound at both ends, and cursor retention after opening a file
  • fzf --expect keys are honored on exit 1, so ctrl-up no longer acts as a cancel; the run repo picker treats ctrl-up as back

Notifications and tray

  • notification sounds coalesce, so a burst plays one tone
  • notifier fallback dispatch is an async spawn with kill escalation

Fixes and internals

  • dev-mode wrapper replaces --tsconfig-override with a cwd pivot (bun#22023)
  • glance renamed to @mattstack/glance and bumped through 0.18, following its rebase contract
  • tests isolate HOME via a bunfig preload, and log writers resolve ~/.rt/logs at call time, so test runs stop polluting real logs
  • README refreshed for the public profile

Full Changelog: v2.5.0...v2.6.0

v2.6.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 18:59

the worktree lifecycle release. rt worktree replaces the parking lot with a provision/dispose lifecycle backed by an on-deck pool of ready trees, and the daemon moves to realtime event tracking with per-repo grants. also ships the @mattstack/rt-client package, StrongDM agent verbs, and a batch of nav picker quality-of-life work. (an experimental mattcloud sandbox surface was built and retired entirely within this range, so it ships nothing.)

Worktree lifecycle

  • new rt worktree verb family: provision, create, dispose, list, freshen, adopt, and each, with a nav picker when invoked bare
  • on-deck pool: pre-created worktrees kept ready by the daemon (replenish/shrink), a ready-step engine with changed-glob triggers, and name pools with ticket-derived branch names
  • provision claims from the pool or cold-creates, revalidates the claim under lock, and surfaces degraded readiness instead of hiding it
  • dispose is guarded (MR-sha anchor, tolerant of generated drift, lease-aware) and renames to trash with async reaping, so verb latency is independent of tree size; if the trash rename fails, the branch and registry record are kept
  • merge reactor: merged MRs trigger auto-return of your shell and guarded auto-dispose of the finished tree
  • per-repo worktree registry with a reconcile pass (ground-truth branches, unmanaged-tree adoption), epoch-checked saves so stale snapshots cannot clobber concurrent writes, and per-tree operation locks
  • the parking lot is deleted; rt park remains as a deprecated stub pointing at rt worktree
  • install dedup sees through env-var prefixes, and pnpm implicit installs default to a plain install

Daemon: realtime tracking and freshness

  • per-repo tracking levels (live/poll/off) with per-cache opt-in grants, edited interactively via rt daemon track
  • realtime events watchers replace the ActionCable MR subscriptions; events fan out to granted stores (project upserts, teammate pushes, notes)
  • delta sync: incremental updatedAfter pulls with a daily deep reconcile, demand-scoped to a 30-day window; a failed deep reconcile falls back to delta instead of wedging the repo
  • pipeline top-up inside delta sync (4-wide fetches, restores 5-minute pipeline freshness, stuck pipelines age out after 24h)
  • freshness on demand: cache:read takes a max-age gate, and rt daemon status gains --fresh/--max-age plus events freshness reporting
  • discussions lifted into ~/.rt/discussions.json with grant-aware reads; bot-authored notes are skipped
  • MR actions write back: mutations refresh the stores they changed, and a failed read-back can no longer report a succeeded mutation as failed
  • notification correctness: mr_ready keys on mergeability, mr_approved requires a new approver, conflict flaps stopped
  • mr:by-branch batch read (store-first with forge write-back)
  • secrets:forge-token, a grant-gated forge-token verb
  • cron trigger layer: broadcast pattern to debounced command
  • rt daemon status stops calling a live daemon dead

rt-client

  • published as @mattstack/rt-client: typed commands, unix-socket transport, relay, repo-name resolution, and a fake-daemon subpath export for tests
  • daemon handlers for the client catalog carry the catalog's own types

StrongDM

  • agent JSON envelopes for connect, status, and connections, with a production guard and non-interactive reason/duration defaults
  • desktop-app preflight: launches SDM.app when the CLI probe errors
  • rt sdm connections listing, and the rt-sdm-connect agent orchestration skill

Navigation

  • image previews in the fzf preview pane, with iTerm2 routing and character-art fallback when kitten cannot render
  • live listing refresh while the picker is open, via the nav-watch fs-event bridge
  • sort menu on ctrl-s, list wraparound at both ends, and cursor retention after opening a file
  • fzf --expect keys are honored on exit 1, so ctrl-up no longer acts as a cancel; the run repo picker treats ctrl-up as back

Notifications and tray

  • notification sounds coalesce, so a burst plays one tone
  • notifier fallback dispatch is an async spawn with kill escalation

Fixes and internals

  • dev-mode wrapper replaces --tsconfig-override with a cwd pivot (bun#22023)
  • glance renamed to @mattstack/glance and bumped through 0.18, following its rebase contract
  • tests isolate HOME via a bunfig preload, and log writers resolve ~/.rt/logs at call time, so test runs stop polluting real logs
  • README refreshed for the public profile

Full Changelog: v2.5.0...v2.6.0

v2.5.0

Choose a tag to compare

@m4ttheweric m4ttheweric released this 21 Jul 17:07

first release with docs. ships the rt.cool documentation site (generated command reference plus hand-written guides), full flag/arg coverage across every built-in command, and the release tooling that keeps it current. also lands the interactive commit picker and a batch of daemon and tray fixes.

Documentation

  • rt.cool docs site: Docusaurus scaffold, 97-page generated command reference, and hand-written guides (getting-started, daemon, logging, plugins, StrongDM, tray, context extension, common flags)
  • full flag/arg coverage: every built-in command now declares its real flags and positionals (0 coverage gaps)
  • docs:gen and docs:check scripts: reference regenerates from the command tree, and drift is caught in the validator
  • release tooling: update-docs.ts regenerates docs and drafts these notes, deploy-docs.sh publishes to Cloudflare Pages, and the rt-release and rt-docs skills drive the flow

Commit

  • interactive commit picker: select-all on load, visible discard prompt, backed by tested lib/commit-ops primitives

Daemon

  • stop dropping the first process of headerless ps output
  • make periodic scanners async so status polls can't time out
  • add async runCapture subprocess helper

Tray

  • require two consecutive failed polls before going red

Full Changelog: v2.4.0...v2.5.0

Full Changelog: v2.4.0...v2.5.0

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 17 Jul 03:21

v2.4.0

Navigation

  • Add a preview pane to the file/directory picker — file contents or directory listings alongside the list (skips node_modules, caps output, one name per line for directory previews)
  • Add deep-jump mode — recursive listing via fd (with a walk fallback) to jump deep into a tree, with a total result cap
  • Add a hidden-files toggle
  • Hide key hints behind a Ctrl+/ reveal — a true toggle rendered as a narrow two-column block spread across the list width
  • Picker cursor now opens on the first real row instead of a heading separator

Worktrees

  • Add rt worktree each to run a command across every worktree of a repo, with a parsed per-worktree summary

Repos

  • rt cd now surfaces unregistered sibling repos — scanned one level deep from your registered repos and shown dimmed with an "unregistered" hint, so you can jump to a repo the first time without `cd`-ing there manually first

Tray & Notifications

  • Tray surfaces process changes within ~2s, plus panel interaction polish
  • Drop parked-workload alerts and exempt agents from runaway-process alerts

Fixes

  • Fix parking lot errors

Full Changelog: v2.3.0...v2.4.0

v2.3.0

Choose a tag to compare

@m4ttheweric m4ttheweric released this 08 Jul 15:57

v2.3.0

Tray Improvements

  • Detect when macOS Mission Control has stolen Control+Up at startup; fire a one-time notification with a "Show Me How" action that opens step-by-step instructions for disabling it in System Settings

Navigation

  • Add Ctrl+F shortcut to open the current directory in Finder

Full Changelog: v2.2.0...v2.3.0

Full Changelog: v2.2.0...v2.3.0

v2.2.0

Choose a tag to compare

@m4ttheweric m4ttheweric released this 08 Jul 04:27

v2.2.0

Process Scanner Enhancements

  • Discover processes in sibling git worktrees (not just registered repo roots)
  • Extract package-script invocations from process env (pnpm start:lite:watch)
  • Track scan readiness so the tray can show a spinner before the first scan completes

Park-Time Process Killing

  • When parking-lot parks a worktree, running workload processes (dev servers, builds, watchers) are killed automatically
  • AI agents (claude, codex, gemini, aider, cursor-agent, copilot), shells, and .app processes are protected
  • SIGTERM with 5s escalation to SIGKILL
  • Configurable via killProcesses in parking-lot config (default true)

Notification Improvements

  • Multiple simultaneous runaway processes collapse into a single summary notification
  • New parked-workload sweep detects processes still running in already-parked worktrees
  • Kill action button on runaway and parked-workload notifications
  • File-backed dedup store so notifications survive daemon restarts

Tray Single-Panel Consolidation

  • Replaced separate NSMenu and popover with a unified single panel view
  • Status strip with daemon health dot and gear menu (restart, stop, view logs, login toggle, updates, quit)
  • New Script column showing the package-manager invocation that launched a process
  • Worktree column now shows worktree name instead of full cwd path
  • Loading spinner before first scan completes instead of misleading "No processes running" empty state

Full Changelog: v2.1.0...v2.2.0

Full Changelog: v2.1.0...v2.2.0

v2.1.0

Choose a tag to compare

@m4ttheweric m4ttheweric released this 07 Jul 16:38

v2.1.0

User Plugins

Extensible plugin system for adding custom commands to rt:

  • ~/.rt/plugins/<name>/ with a plugin.json manifest
  • rt plugin new scaffolds a new plugin (bun module or shell exec)
  • rt plugin list and rt plugin validate for discovery and diagnostics
  • Plugin commands merge into the root command tree with collision policy (user plugins win over built-ins)
  • Lazy module handlers (Bun) and exec handlers (any shell script)
  • Injected API contract (~/.rt/plugin-api) for plugins to call back into rt
  • Plugin-scoped logging with correct day rollover (local time)
  • Reserved fast-path name guard + kebab-case aliases in validation
  • Dedicated plugin author guide in docs
  • E2e test suite for user plugins

SDM Picker Improvements

  • Connection-state gutter indicator in the connect picker
  • Live tunnel with flaky query probe correctly shows as connected, not failed
  • Scan only postgres-family datasources, drop non-DB status entries
  • Dedup picker + recents by resource, not key

Full Changelog: v2.0.2...v2.1.0

v2.0.2

Choose a tag to compare

@github-actions github-actions released this 07 Jul 14:28

SDM Scan + Enrichment Rewrite

Replace the connector-based SDM architecture with a simpler scan + enrichment model:

  • Direct catalog scanner (rt-side, no connector binary needed)
  • Declarative enrichment loader (JSONC files)
  • Build connections from scan + enrichment data
  • Drop connector runner, protocol, url resolver, map, suggest commands
  • Daemon sdm:catalog serves the rt scan directly (drop sdm:resolve)
  • Rewritten README StrongDM section for the new model
  • Updated e2e tests (drop orphaned connector tests, add enrichment tests)

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 06 Jul 15:16
  • Fix: auto-login on rt sdm connect when the session has expired
  • Fix: auto-login on rt sdm connect <url> too

v2.0.0

Choose a tag to compare

@m4ttheweric m4ttheweric released this 05 Jul 20:46

Highlights

Major release introducing the StrongDM (SDM) subsystem, system process panel, sync/rebase escalation, and a complete logging architecture overhaul.

StrongDM Integration (rt sdm)

Full-featured SDM resource browser and connector management:

  • Grouped picker with tiered resource display (recents, favorites, all)
  • Browser-login popup flow for connector authentication
  • Persistent catalog cache for instant cold starts
  • rt sdm connect <url> resolves remote deployed resource urls to sdm connection
  • rt sdm map audit view with LLM-powered suggest pass for unresolved gaps
  • Resolution provenance tracking (protocol v1.1)
  • Connector runner with validation, TCP/query probes, and warm-up retry verification
  • Daemon-side catalog/snapshot/recents/reconnect handlers

System Process Panel (rt-tray)

  • Full system process scanner with CPU sampling and runaway detection
  • NSOutlineView-based process tree with breadcrumb compression
  • Kill actions, herdr pane focus, output reading
  • Pop-out resizable window with autosaved frame
  • Configurable runaway detection thresholds via rt settings
  • Purple herdr badges, coral Claude Code badges
  • Multi-select menus, hover masks, tooltips

Sync & Rebase Escalation

  • Agent-driven conflict resolution via herdr panes
  • --json/--agent/--no-agent flags for sync
  • Rebase conflict escalation with the same flow
  • lib/herdr-agent.ts drives Claude panes with readiness detection and retry logic

Logging Architecture

  • Structural logging at central seams (CLI dispatch, daemon handleCommand, crashes)
  • ~/.rt/logs/<surface>.YYYY-MM-DD[.N].log convention with auto-discovery
  • Native stderr redirect captures bun panics
  • Crash forensics for managed processes
  • CLI invocation-level logging via exit/crash hooks

E2E Test Suite

  • Termwright-based terminal automation harness
  • Picker navigation, fzf separator skipping, identity selection tests
  • Daemon lifecycle tests, verify --json backbone tests
  • CI workflow with Termwright install + cargo cache

Breaking Changes

  • Removed: daemon process-management subsystem (use herdr/tmux)
  • Removed: proxy/bounce/tunnel/endpoints stacks from daemon
  • Removed: apps/dashboard web app
  • devOnly command-tree gating (SDM suggest hidden behind it)

Other

  • rt sdm set-email (moved from settings)
  • ctrl-up backs up one picker level in command tree
  • Tray pop-out window frame persistence fix

Full Changelog: v1.3.3...v2.0.0