The ticket blamed a wrong table list — that the hook catches tickets and ticket_history but misses ticket_deps and ticket_idmap. Filing the T-454 findings disproved that: tickets and ticket_history were left unstaged too, aborting the commit. The hook has no logic to fix; it is one line delegating to `pql plan export --stage`. That call reports writing both files and stages neither, with rows_written 0. Tested both ways — untracked-new and tracked-modified fail identically, so this is not about new-month rollover. The only common factor is the zero row count. Since ticket mutations already write through synchronously, the export always finds nothing left to append, which makes rows_written 0 the normal case and the staging step effectively dead. Changes that did persist likely did so because another file in the commit was staged by hand. The fix belongs in pql: stage on file state, not row count. Raised to high — a silent data-loss path, invisible behind the hook's `2>/dev/null || true`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
clide
An IDE for Claude Code CLI. Native rendering, terminal-first interaction, pql-powered queries, canvas and graph surfaces. Linux, macOS and Windows.
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. Claude session persistence is --resume <session-id> against Claude Code's transcript files (D-77, superseding the tmux-backed D-41).
lib/— all Dart code. Core subsystems (lib/src/), kernel services (lib/kernel/), UI widgets (lib/widgets/), built-in extensions (lib/builtin/), the extension framework (lib/extension/).- PTY —
lib/src/pty/spawns child processes via Dart FFIposix_openpt()+posix_spawn()directly; no external helper binary. native/— vendored native libraries (libtree-sitter.sowith wasmtime embedded). Linux only today.- 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 (D-6).
Built-in extensions
canvas, claude, claude_control, cli_install, decisions, deeplink, default_layout, diff, editor, extensions_ui, files, git, grammars_core, graph, ipc_status, keybindings_ui, markdown, menubar, output, pql, problems, search, settings_ui, terminal, theme_picker, tickets, todos, view, vim, welcome.
Building
Requires Flutter (stable channel) and pql
on the host. pql is a hard dependency — the pre-push gate runs pql decisions validate and the governance + ticket workflow is built on it (see its repo for
install). One-time setup:
make hooks && flutter pub get
pql init # once, in the repo root — wires up the pql skill + perms
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-a11y # accessibility contract tests
make test-integration # real app boot integration tests
make build-linux # flutter build linux
make build-macos # flutter build macos
make push-check # pre-push gate: decisions + core + fast + a11y + coverage + changelog
Status
Active development; the interaction model, panel system, and settings engine have landed. The Python Textual predecessor is archived under legacy/.
Documentation
docs/architecture.md— current architecture (read this first).CONTRIBUTING.md— how to clone, build, test, file tickets, and write D-records.docs/initial-plan.md— historical design doc; preserved as a snapshot of the 2026-04 plan, much of it now superseded.governance/decisions/— confirmed decisions (D-NNN), open questions (Q-NNN), rejected alternatives (R-NNN).CLAUDE.md— Claude-addressed working notes (guardrails, repo layout).
License
MIT. See LICENSE.