Three remaining acceptance criteria for T-87: 1. Cold-start reap. The Claude extension's activate() now kills every leftover secondary tmux session for the current repo before any new spawn. activate runs before any UI mounts, so _nextSecondary's starting value of 1 is correct even when a previous run died abruptly (kill -9, OOM, force-quit). The deactivate() hook also calls reapSecondaries as a courtesy on explicit extension teardown — but Flutter's deactivate doesn't fire on app quit, so activate is the load-bearing path. 2. claude.kill-all-sessions actually kills server-side. The command previously called pane.close on every claude pane, which only kills the tmux client. It now also calls tmux.killAllForRepo to kill the sessions on the clide socket. 3. Tests. test/builtin/claude/tmux_session_test.dart covers killSession, listClideSessions, reapSecondaries, and killAllForRepo via the TmuxRunner override — no real shell-out in tests. Co-Authored-By: Claude <noreply@anthropic.com>
clide
An IDE for Claude Code CLI. Native rendering, terminal-first interaction, pql-powered queries, canvas and graph surfaces. Linux and macOS.
Architecture
Single Flutter package at the repo root. The app hosts everything in-process: IPC server, subsystem handlers (pane, files, editor, git, pql), and the extension framework. tmux owns Claude session persistence.
lib/— all Dart code. Kernel services (theme, i18n, settings, panels, commands, focus), UI widgets, built-in extensions, and the extension contract.ptyc/— small C helper. Spawns a PTY + child and hands the master fd back overSCM_RIGHTS. Every pane (shell, tmux, claude, LSP, debug adapter) goes through it.- pql — external supporter tool. Clide wraps it for every query surface; never re-implements it.
Claude drives the UI through a clide CLI surface (Bash, not MCP). Every CLI subcommand has a UI affordance and every UI action has a CLI equivalent.
Built-in extensions
canvas, claude, claude_control, decisions, diff, editor, extensions_ui, files, git, graph, grammars_core, ipc_status, keybindings_ui, markdown, pql, problems, settings_ui, terminal, theme_picker, tickets, todos, welcome.
Building
Requires Flutter (stable channel) on the host. One-time setup:
make hooks && flutter pub get
Then:
make run # launch the desktop app
make test # fast suite: analyze + format + unit + widget + golden
make test-core # core subsystem tests (IPC, PTY, git, pane registry)
make test-integration # real app boot integration tests
make build-linux # flutter build linux
make build-macos # flutter build macos
make ptyc-build # build the ptyc PTY-spawn helper
make push-check # pre-push gate: decisions + core + fast tests
Status
Pre-v2.0 (2.0.0-dev). Interaction model and panel system landed. The Python Textual v1.2.0 predecessor is archived under legacy/.
Design doc: docs/initial-plan.md. Architectural decisions: decisions/.
License
MIT. See LICENSE.