Repository navigation
Releases: DWS-LLC/grandcentralterminal
Releases · DWS-LLC/grandcentralterminal
Release list
v0.12.0
v0.12.0
Added
- Clipboard access from programs in a pane: OSC 52 and kitty's OSC 5522 read and write the macOS pasteboard, with a confirm sheet before anything is read or written.
Changed
- Ghostty 1.4.0 (zig 0.17) under the hood.
- Paste goes through Ghostty's own paste path, so bracketed paste and unsafe-paste protection apply.
v0.11.1
v0.11.1
Added
- Remote hosts that drop or aren't up at launch are redialed every 60s, so updating a remote daemon no longer needs a config reload. "New remote pane" shows a retry button on the row of a host that's down.
Changed
- Relax by Relation glides panes to their new spots (over
camera-animation-duration) instead of jumping, and holds the focused pane where it is: the rest of the layout moves around it. - Resizing a pane with the mouse no longer zooms the camera to fit it.
camera-fits-resizecovers keyboard resizes only.
Fixed
- Dead remote connections (sleep, wifi flip, killed daemon) are noticed in ~30s via TCP keepalive. Before, the host looked connected forever and creating a remote pane did nothing.
v0.11.0
v0.11.0
Added
- Cables: a pane is wired to the panes it spawned (
gctd open,⌘T,⌘⇧H/J/K/L). Bézier cables whose handles hang on springs (they lag, overshoot, and settle when you move a pane), leave each edge square on the side facing the other pane, and sit where the cable comes out straightest (level with the other pane when they overlap, else as near as the edge allows), spread apart so strands don't cross, never within 15% of a corner. Strands of one of your ties that share a pane leave it together, on the side facing the whole tie, and meet each other pane on the opposite side. Each cable gets one palette color hashed from its start -> end window names when it first appears;cable-colortakes a hex orpalette:Nfor all.cables = falseturns them off. - Cable ties (grabbing a cable is forgiving: 14px reach, measured along the rope, not just its points): strands leaving a pane side are tied into a bundle. Press on a cable and drag across strands to tie them together; a stroke needs two or more strands, and always lands (near the ends it slides to the closest free spot); drag a tie to slide it smoothly along the cable (ties collide and keep their order); a tie is a waypoint the strands pass through side by side, drawn as smooth curves, so it works on strands from anywhere, however far apart, with no humps; a strand that would have to loop back through a tie isn't held by it; which way a bundle flows comes from how its ports face, so a wide fan of children still ties), double-click it to remove.
gctd open parent=<pane>wires a new pane to any pane, not just the caller;gctd tie <parent> <child>...andgctd untiemanage cable ties from scripts. Ties (yours and scripted) are kept by the daemon: they survive restarts and show on every canvas. Protocol 4 (older daemons keep working; their ties stay canvas-local).
Changed
- Relax by Relation (
⌘⇧A) uses only the cables as the relation (spawned by) and lays them out as a left-to-right tree: a pane right of the pane that spawned it, siblings in a column with room for their ties, a parent centered on its children, unrelated panes in rows. Replaces the spring pass; same repo, dir and host no longer pull panes together.
Fixed
- A pane's spawn parent never matched a live pane on the canvas, so Relax by Relation ignored the strongest link (spawned by).
v0.10.0
v0.10.0
Added
- Auto names: panes without a custom name show what runs in them (
gct,nvim · gct,claude · gct · pip fit,gct@feat-x), shortest-unique across the canvas. Rename to nothing to go back to auto. - Notifications: OSC 9/777, the bell, and OSC 7501 blocked/done/error from panes you're not looking at post a desktop notification and mark the titlebar with
●; click focuses the pane.notifications = falseturns it off. gctd notify <pane> [title=..] <text>, andgctd agent-setup install --hooksnow merges ClaudeNotificationandStophooks that use it.dim-inactive/dim-delay: quiet unfocused panes fade; output, blocked status, and notices wake them.- Relax by Relation (
⌘⇧A,relax-layout): a deterministic spring pass pulls related panes (spawn parent, same repo, same dir, same host) together and pushes strangers apart. Undoable. gctd sendreads stdin when given no text, takes--paste(bracketed paste), and understands\xHH/\eescapes (\x03is ^C).
Changed
- Titlebars abbreviate the home directory to
~. gctd listshows auto names.
v0.9.0
v0.9.0
Added
pip-aware(default true): camera fits and centering land panes in the free strip beside the picture-in-picture window, not under it.focus-move-memory(default true): cmd+h/j/k/l remember where you came from, so the opposite key goes back, staggered layouts included.[background]top-fade/top-fade-exponential: the canvas fades into the menubar.
Fixed
- Camera fits clear the top fade strip; bottom-bar centering was off.
v0.8.0
v0.8.0
Added
gctd openorbits the calling pane: spawns land in the free air around it, pulled toward the caller and pushed away from every other pane, instead of wedged against a neighbor.gctd version(--version).
Changed
- Homebrew installs no longer self-update; the app shows the
brew upgradecommand instead.
Fixed
gctd openfrom a grouped pane landed on a sibling when the pane to its right was taken.gctd agent-setupfound no skill whengctdran through the/usr/local/binsymlink.
v0.7.0
v0.7.0
Added
- Every color takes -dark/-light variants and palette:N (your ghostty theme's ANSI color N, so it follows the theme).
- New color keys under [titlebar]: border, accent, shadow-color. New [switcher] section: background, border, text, text-active.
- Group color picker: "Auto", a 2x8 swatch grid (normal | bright ANSI), or a custom color panel.
- gctd open size=w,h: size a new pane for the job (world points) and keep the beside-the-caller spot.
Changed
- Accent, snap guides, host and group colors default to your ghostty palette, hashed from the name so they stay put across launches and machines.
- The agent skill and SessionStart hook now say it plainly: panes, not run_in_background; nearby, and sized for the job.
- cmd+shift+z and cmd+hjkl share one fit margin.
v0.6.0
Added
shaderunder[background]: a ShaderToy GLSL shader as the canvas, transparency included. ShaderToy uniforms incl.iMouse, noise iniChannel0..3so pasted shaders work as-is;shader-fpsandshader-scaleto keep raymarchers off your GPU's throat.reload-configrecompiles; a broken shader keeps the last good one.- Ghostty themes load, light/dark variants included, and follow the system appearance.
background-dark/background-lightunder[titlebar]."ghostty"derives titlebar and text colors from the theme.
Fixed
- A ghostty
themeno longer gets stomped by GCT's base colors. - New panes render at the camera's zoom instead of backing scale.
- Zooming a pane while the camera is zoomed no longer reflows at camera scale (half the columns at 2x).
Docs
[background]gets its own section; it was documented under[canvas].
v0.5.0
Added
- Auto-update from GitHub releases: checks daily and via "Check for Updates…", verifies the Developer ID signature, then replaces the app and restarts the daemon with it (running panes end).
camera-fits-resize(default true): the camera zooms to fit a pane after a mouse or keyboard resize.scripts/dev.sh: run the working tree beside an installed GCT (own daemon, loud dev config).
Fixed
- Frontend crash when two output chunks in a row ended mid-escape sequence.
- Doubled lines and a cursor one row low after zooming: vector-zoom re-renders no longer reflow the terminal.
- Closing a pane now moves the camera to the newly focused one.
- Pane and group titles stay sharp when zoomed in, and on mixed-DPI displays.
gctd open/moverespectwindow-gap(the canvas pushes it to the daemon).- Grouping never refuses for lack of room: loose panes and foreign groups are shoved out of the new border.
Changed
- Titlebar height scales with
font-sizeunder[titlebar]; group headers match.
v0.4.0
v0.4.0
GCT is on GitHub now, under the MIT license.
New
- Remote daemons can sit behind an ssh jump host. Set
proxy = "user@bastion"on a[host.<name>]and the canvas runs
ssh -W host:port proxyfor you. It uses key or agent auth only. See
docs/remote.md. - Releases are also published at
https://github.com/DWS-LLC/grandcentralterminal.
Fixed
- ctrl+tab and ctrl+return now reach the terminal instead of the menu.
- Installing the agent skill from the zip failed with "skill source not
found". The app now stagesSKILL.mdnext to the daemon. This shipped in
v0.3.1.
Docs
- The README is rewritten, and the config, keybinding, usage, agent, remote
and build docs now live indocs/. The demo reel is removed.
Downloads
GrandCentralTerminal-0.4.0-macos-arm64.zip: signed and notarized.gctd-0.4.0-linux-x86_64.tar.gz: headless daemon, static.