Perch
Run Claude across every project. See it all.
Multi-project terminals
Launch multiple repos into a split layout — one focused project in the main pane, the rest in a grid. Each tile shows live terminal output, service status, and port activity at a glance.
Smart project picker
Auto-discovers git repos and worktrees. See which projects have uncommitted changes, which are ahead, and what Claude is doing — then launch your whole session in one click.
Claude Code integration
See Claude's status on every tile — working, waiting, or done. Launch Claude Code in any project with one shortcut. Know at a glance which projects need your attention.
One-key actions
Cmd/Ctrl+Shift+C for Claude Code. Cmd/Ctrl+Shift+D for dev server. Cmd/Ctrl+Shift+B for browser. Cmd/Ctrl+Shift+E for your editor. Every action is one shortcut away.
Multi-service projects
Projects with multiple services (API, worker, cron) get separate tabs. Each service gets its own port, its own terminal, and its own status indicator.
Persistent sessions
Quit and relaunch — your sessions are still running exactly where you left off. Tabs, scroll history, and running processes all survive across restarts.
Perch × Stashville
Stashville turns developer work into a social city you actually want to visit. Every commit, file change, and coding session you make in Perch feeds your Stashville city — so the work you're already doing grows something you can show off.
Connect once in Perch's setup panel. Each project tile shows its live Stashville cadence — THRIVING, STIRRING, RESTING — right in the grid. Visit stashville.city →
See it in action
A focused workspace for everything you're working on.
Terminal grid — live terminals, Claude status, and service tabs across all your projects
Project picker — see what's dirty, what's running, and pick up where you left off
Version History
See GitHub release for details.
See GitHub release for details.
See GitHub release for details.
See GitHub release for details.
Full Stashville integration: device-code auth, per-project reporting opt-out, and a live cadence badge on every tile — THRIVING, STIRRING, RESTING — updated over SSE. Event emitter batches and persists across restarts, with 10s debounce, rate-limit self-throttling, and selective pruning of events too old for the server. SSE stream proactively rotates its token ~30s before expiry and has a 60s ping watchdog that self-heals silently-wedged connections by reconnecting and reconciling via GET /api/projects.
Major CPU/battery fix: stopped polling git status against every registered worktree on a 5s interval. With 100+ worktrees, that was pinning fseventsd and driving sys-CPU to 47% — now only visible tiles are polled (sys-CPU 47%→17%, load avg 72→33). Planning picker now surfaces stale tmux sessions (orphaned or idle ≥72h) so you can reattach or clean them up in one place. Added a confirm dialog when closing a tile to prevent accidentally losing a session.
See GitHub release for details.
See GitHub release for details.
See GitHub release for details.
Fix "disk image is damaged" error when downloading on macOS. The DMG wrapper is now signed and notarized (not just the app inside), so macOS Gatekeeper accepts it from the web.
See GitHub release for details.
Hardened tab ↔ tmux session binding: fixed three bugs that could lose tabs across app restarts (active tab snapping to 0, deselected workspaces losing their tabs, new-tab focus landing on the wrong tab). Added a "Tab health" button next to the layout toggles that surfaces any drift between tabs and terminal sessions, with one-click cleanup of orphan sessions. Saved sessions now have versioned schema migration.
See GitHub release for details.
Fix two tab/tmux bugs that could lose work: duplicate tabs no longer bind to the same tmux session, and the startup GC no longer kills live tmux sessions when the saved session file is missing or stale — orphans are adopted as rescued tabs instead. Tabs now default to "Terminal" (no more escalating counter), auto-label from the shell's title escape sequence, and can be renamed by double-clicking (or the pencil icon in the dropdown).
Fix tmux not being detected when Perch is launched from Finder — Homebrew-installed binaries (tmux, dmux, gh, git-lfs) now resolve correctly. Bundled tmux config with a 50k-line scrollback and alt-screen disabled, so long Claude Code plans and TUI output land in xterm.js's scrollback instead of getting clipped.
Fix window drag-and-drop repositioning across all views — tiles can now be reordered reliably from any layout.
Terminal usability fixes — click-and-drag to select text now works everywhere (including inside tmux), right-click selects the word under the cursor, and the mouse wheel always scrolls scrollback instead of acting like arrow keys in TUI apps. Split layout: 3-project mode stacks the right pane top/bottom for 50/50 tiles instead of squeezing them side-by-side.
PostHog analytics and Sentry error tracking. Custom events for session starts, tile actions, shortcuts, and layout changes — enriched with project metadata (frameworks, languages, monorepo detection). Sentry crash reporting with breadcrumbs for service start/crash.
Graceful tmux detection — app works without tmux installed, shows a banner with install instructions. Fixes saved session refresh on tile changes.
Smoother Claude state transitions (3s debounce on working→waiting), rotating hero taglines, updated screenshots.
Fix Claude state stuck on "waiting", remove default ~/repos scan dir, branch checkout mode, tile claude-state styling.
React migration, planning picker, workspace session persistence, Claude session detection, setup flow, code signing, and CI pipeline.
Fix missing detect-profile module in packaged app causing crash on launch.
Per-service browser buttons, auto-detected dev profiles, project setup UI, split-view default.
Tile-scoped tabs, stable grid with placeholder tiles.