Changelog
Every release of wdx, generated from the commits by git-cliff: do not edit.
v0.5.0 - 2026-11-11
Section titled “v0.5.0 - 2026-11-11”Features
Section titled “Features”- give wdx its mark, wdˣ, and put it on the site
- site: give tide its mark, a terminal window, on the site
- tide: render Markdown docs and files, m for their source
- read how much of its account’s limits a Claude Code agent’s ACA tells
- serve usage as GET /v1/usage and wdx usage
- tide: show the usage of each AI coding agent’s account in a stats tab
- add the hub’s API spec and its generated internal/hubapi
- add the hub’s settings table and home in internal/hub/hubconfig
- add the hub’s database in internal/hub/hubdb
- add the hub’s certificate authority in internal/hub/ca
- serve the hub’s API on its three endpoints in internal/hub/server
- add wdx-hub’s commands in cmd/wdx-hub and internal/hub/hubcli
- build and ship wdx-hub, and run it from deploy/hub
- add the hub’s accounts store, the audit chain and sealing
- add the hub’s admin commands for accounts and the audit chain
- serve the hub’s sign-in pages on the web endpoint
- store a usage row limited when the ACA says so, whatever its percentage
- read Antigravity’s usage from the quota of its status line
- read Codex’s usage from its session file
- read Cursor’s usage from its dashboard API
- show the usage of Codex, Antigravity and Cursor accounts
- make machines nodes of the hub’s accounts, on the hub’s side
- add hublink, the node’s side of the hub
- add wdx hub login, logout, status and node, served by the daemon
- keep the docs nodes push on the hub, sealed at rest
- queue a synced project’s doc changes for the hub in an outbox
- push synced projects’ docs to the hub with wdx project sync
- relay streams between two nodes of one user through the hub
- set up the host’s authenticator code and keep the node’s audit chain
- open sessions between two nodes of one account with the host’s code
- serve a node’s API through a session to another node
- run a command on another node with –node
- attach to a terminal or an agent on another node with –node
- open TIDE on another node with wdx tide –node
- show in the host’s TIDE that a remote session is open
- wdx-hub update installs and rolls back the installed hub
- install wdx-hub as a system service with install-hub.sh
- deploy wdx-hub on Fly.io with make hub-fly-deploy
- read the draft’s text from every ACA’s input box
- submit a typed message once its paste shows, and confirm it went
- close a removed node’s sessions on the account’s other nodes
- close the sessions into this node from TIDE’s Sessions dialog
- complete wdx-hub on Tab, and run help and completion on any settings
- log in to the central hub when wdx hub login has no –url
- say which usage buckets an agent’s model draws on
- mark an agent limited while a bucket its model draws on is
- show in tide that an agent is limited
- label a holder’s log lines holder, and log each key once
- say a message queued when its shell or agent ends is kept, not lost
- write TIDE in capitals in wdx’s own text, as the site does
- name web.tls_cert before web.tls_key when serve finds both missing
- site: import Since on the stats page
- log why the hub link lost control before saying so
- tell the hub a renewed certificate is saved before using it
- read the sync status in one transaction and log a push before the outbox changes
- bind a session’s code to the step it arrived in, and log every hub request before it stops
- reset the hub’s failed service before an update starts it
- show the host’s reason when a remote TIDE’s session closes
- list a bucket’s usage windows together
- let the hub’s user read the releases in test-hub-install
- release the update lock while a forked child holds its file
- let a remote client open a stream beside one in use
- start a terminal or agent created with –node in the project’s checkout
- close a node’s sessions on their hosts when it logs out
- nest a plan of plans’ plans under it in TIDE’s Plans section
- print Cursor’s footer from the status line wdx pins
- read Cursor’s tell box at 40 columns, recorded under wdx’s status line
- put the hub’s first Fly machine in the region asked for
- refuse –node naming this machine before asking for a code
- say what to do for a worktree in a repository with no commit
- log one debug_id on each line of the host’s session streams
- log where each of the hub’s requests came from
- name a Unix socket path too long before listening on it
- pass the host’s last answer on before a session stream closes
- hand the hub’s control goroutines a copy of the node
- bound the hub’s request bodies and close idle connections
- bound what a login costs on the hub
- cut every stream and session when a node or user is cut off
- keep secret setting values out of the logs and argv
- have an update as root trust only what root chose
- keep a node’s pinned key when the hub says it is gone
- have a node’s wait after wrong codes keep doubling to an hour
- give the wait for a session’s confirm a deadline of its own
- record a node’s certificate saved after the hub sent another
- show the wrong codes tried since the last session opened
- audit a node login’s start only once a user answers it
- count an IPv6 client by its /64 in the hub’s rate limits
- warn when the hub serves plain HTTP and trusts no proxy
- treat a pushed doc the hub does not find as refused for good
- make node login ids unguessable and count unknown ones
- send a browser to log in again without signing it out on a GET
- name the hub’s Fly machine and trust Fly’s ingress address
- deps: upgrade golang.org/x/net to v0.62.0 and filippo.io/edwards25519 to v1.1.1
- bound every step of reaching another node through the hub
- notice a dead stream to another node within 30 seconds
- show reconnecting in a remote TIDE when the project’s stream breaks
- keep a session in use open, whatever passes through it
- move the client’s row of a session as the host moves its own
- close a session gone idle during a suspend, and retry after an error
- check a session open already with the host before saying unchanged
- keep no session on the host that its client does not have
- refuse a stream whose session closed after it was checked
- leave sessions opened after the hub was asked for the account’s nodes
- report a logout racing a stream as session_closed, logged_out
- report a stream to another node cut before it answered as connection_lost
- close a removed agent’s tabs in a remote TIDE
- read a remote TIDE’s failed views again once a session opens
- mark a remote TIDE’s tabs missing as a local TIDE’s are
- give a tab completion with –node 5 seconds to reach the host
- keep this machine’s home out of paths for another node
- give wdx usage –node, as every command the daemon serves has
- take the project from a parent named by id with agent create –node
- try the hub again at least once a minute after it goes away
- send a node’s state once at each control connection
- welcome a node newer than the hub, and check every node request’s API version
- let the hub move to another address without nodes logging in again
- refuse a client whose oldest API version is past the host’s, before any handler
- answer a newer client’s request the host’s spec does not allow with node_version_unsupported
- give the host’s protocol range in a refusal between nodes, and accept a range
- pass the relayed client’s holder version to the holder, which decides
- exit by the problem’s status when its code is unknown
- fail only the doc a push refuses, and split a batch refused as usage
- keep each pushed revision’s hash, and a doc and a plan apart by name
- write a node’s last seen time when its control connection closes
- log a stream the host serves under its stream_id
- refuse an invite’s life below a second before it can overflow
- back up the hub’s certificate authority, and refuse a start without it
- give the hub, the link and remote sessions limits tests lengthen
- close the hub CLI’s connections to the hub when a run ends
- make unixsocket.MaxPath a constant
- log what the daemon’s HTTP servers report of connections
- fail a session’s use when its close reason cannot be read
- say what is so in remote’s, hublink’s and the daemon’s messages
- read wdx-hub’s –json in install-hub.sh, never its text
- name a hub user by –name or –id, with Heading table headers
- log a connect given up on during its upgrade
- run gosec, each finding fixed or annotated with its reason
- run sqlclosecheck and rowserrcheck
- build with Go 1.26.11 for GO-2026-6859
- remove an update’s old CA backup with its database backup
v0.4.0 - 2026-11-07
Section titled “v0.4.0 - 2026-11-07”Breaking changes
Section titled “Breaking changes”- show only the sections tide.section_order names, default awdpc
- run one tide per home
- set out tide’s C-q menu by level, with a Project submenu
- keep an agent’s model and permissions for every start
- choose the AI coding agent of a new agent, from those installed and enabled
- show a plan’s slots, and refuse to land or remove one while it runs
- run plans of plans, each plan after those before it have landed
- start a plan its parent lists on the person’s answer, once the plans before it have landed
- copy a plan of plans with the plans it lists that are not done
- remove a plan’s agents once it is done or cancelled
- remove a plan task’s agent as soon as the task is done or skipped
- give a message starting with ! to the model, never run it
Features
Section titled “Features”- add wdx help agents, the manual for an AI agent wdx runs
- point every agent wdx starts to wdx help agents with a launch note
- keep tide’s tabs in the daemon, closed by removals through wdx
- open tide’s tabs from the daemon and send them on every change
- keep tide’s view in the daemon, outside the line of changes
- bring tide back as it was left, from the view the daemon keeps
- mark tide’s tabs whose file or worktree was removed outside wdx
- keep plans in the docs table, apart from docs by kind
- check a plan’s YAML, order its DAG and reduce it
- serve plans through the API, plans of plans included
- add wdx plan and wdx help plans
- show plans in tide, a section and a tab of each
- rename the agent selected in tide with r
- remove the project shown from tide with C-q p x
- open a tab from tide’s left pane and stay, or go with Shift+Enter or o
- close a row’s tab from tide’s left pane with - or C-q -
- keep plans’ runs and decide each run’s next step
- land on a branch no checkout has, stop one agent, create one linked
- run plans: a runner starts and lands their tasks
- add wdx plan run, plan task done and plan task get
- show a plan’s run in tide, and run a draft with r
- collapse tide’s left-pane sections with a click on the heading or z
- send keys to terminals’ programs by the kitty keyboard protocol
- answer a plan’s stuck tasks and its run in the store, and decide them in Next
- land a plan’s tasks with the project’s check, release slots, cancel, retry
- answer a plan’s stuck tasks and its run through the API
- add wdx plan pause, resume, cancel, set and plan task retry, land, skip
- answer a plan’s stuck tasks and its run from tide
- list the models an AI coding agent offers
- put docs and plans in folders
- show docs and plans in folders in tide, and move them with m
- ask what a new agent is created with in a form in tide
- add wdx plan copy, archive and unarchive
- archive and copy plans from their tab in tide
- add Antigravity as an AI coding agent
- group a plan’s agents under a row for the plan in tide
- group a plan’s slots under a row for the plan in tide’s Worktrees section
- add Cursor as an AI coding agent
- add Codex as an AI coding agent
- show and drive plans of plans in tide, with the plans waiting for you
- read what Codex is doing from its screen
- give an instant message to Codex’s running turn instead of interrupting it
- resume a Codex agent’s conversation on every start
- name the ACA in each session heading of transcript.md
- keep a copy of a Codex agent’s session files in its backup
- render a Codex agent’s transcript.md from its session files
- put back a Codex session file Codex deleted, from its backup
- tell Codex’s tool calls in a few words in the brief
- restart a Codex agent in a new session
- give a Codex agent’s conversation in brief
- lay out a plan’s DAG as a rail, as git log –graph draws commits
- draw a plan’s tab as a header, its tasks on the rail and its keys
- show a plan task’s panel and whole prompt, and plans of plans in the new tab
- choose the plans tide’s Plans section shows: all, draft and in progress, or completed
- steer instant messages into Claude Code’s running turn with its send-now keys
- read a plain message at the agent’s next step, not after its turn
- open a plan’s PR once it is done, with pr: true
- rebase a worktree onto its base when asked, with wdx worktree rebase and R in tide
- stack a plan of plans’ PRs with stacked: true, and rebase a stacked worktree with R
- widen the plan tab’s panel to what the task list leaves
- read Antigravity’s box, draft and model from its screen
- read what Antigravity is doing from its screen
- resume Antigravity agents in their conversation, learned from a SessionStart hook
- steer messages into Antigravity’s running turn with alt+m
- back up Antigravity agents’ conversations and render their transcript
- brief and restart Antigravity agents
- run each Cursor agent with a config folder of its own
- resume a Cursor agent’s chat on every start
- read Cursor’s screen: ready, draft, model, activity and approvals
- back up a Cursor agent’s chats as transcript.md and a snapshot of each store
- steer a Cursor agent, holding a message while a steer is pending
- restart a Cursor agent and read its history in brief
- let the agent asking land or rebase its own worktree
- stop an agent’s leftover processes when its terminal ends
- sign wdx on macOS at install, so its permissions survive updates
- scroll tide’s left pane with the wheel
- sign each release wdx update installs on macOS
- track each agent’s context size
- color each agent’s context size, and show it in tide
- follow a Codex agent’s context size
- follow a Cursor agent’s context size
- paint tide’s own dark background, darker in the focused pane
- tint tide’s open tabs, shown tab and cursor, and soften its headings
- draw tide’s focused pane in heavy lines
- follow an Antigravity agent’s context size
- choose tide’s colors with a tide.theme setting
- read the prompt a waiting Claude Code agent shows
- show the prompt a waiting agent answers
- watch files through one inotify instance the daemon shares
- watch worktrees and tabs through the daemon’s one inotify instance
- follow agents’ context sizes through the daemon’s one inotify instance
- open the daemon’s one inotify instance only once something is watched
- order tide’s tab events by revision, and send the tabs on quitting
- run every change to its end when its client leaves, views too
- mark a tab missing as soon as its file or worktree goes outside git
- keep a project’s cursor where its view left it, not on its current tab
- show a plan’s state and counts as of the run getPlan returns with it
- log every request tide leaves in flight when it quits
- give Codex a message only once its box is ready
- tell Antigravity agents to create files in the project, not the note’s folder
- hold a message until the agent’s terminal reads keys
- render a Cursor reply again when its bytes repeat
- read Cursor’s model and box under a long directory
- run Claude Code agents without the mouse, so tide’s selection works
- read a checkout removed during a project read as not present
v0.3.0 - 2026-11-03
Section titled “v0.3.0 - 2026-11-03”Breaking changes
Section titled “Breaking changes”- show an agent’s info in a tide tab and let it be renamed
- keep a backup of an agent’s conversation
- stop an agent’s background session whatever ends or starts it
Features
Section titled “Features”- show which AI model an agent runs
- change the settings in a tide tab
- show an agent’s model next to its aca
- close a project in tide with C-q w
- start an ended agent or terminal again in tide with C-q g
- open a known project by name or id, or choose from a list
- review worktrees and their diffs in tide
- move around tide’s diffs by change, file, line and search
- review a worktree’s uncommitted changes and ask its agent to commit
- mark files verified in tide’s diffs
- comment on tide’s diffs and send the comments as a review
- find the agent working in a worktree, wherever it started
- keep every message until its holder has typed it
- start an agent on a task with wdx agent create –prompt
- remove a worktree that landed
- land a worktree on its base by rebase
- start an agent again in a new session with wdx agent restart
- land a worktree through a PR with gh
- read a worktree’s files through the API
- list a worktree’s files in tide’s left pane
- read a file in a tab of tide
- colour a file’s text in its tide tab
- name the editor tide edits with, and install vi with wdx deps
- run an editor on a worktree’s file in the daemon
- edit a file in its tide tab with e
- ask to save or discard when closing an editor’s tab
- filter tide’s left pane with /
- send Alt+arrows to the program in focus with tide’s C-q menu
- support vim, nvim, nano, hx and emacs as tide’s editor
- create, rename and delete files and directories in tide’s Code section
- order tide’s left pane with the tide.section_order setting
- read a large repository’s worktrees at once and its files with one walk
- keep docs and their revisions in the database
- keep a read-only copy of each doc’s latest revision in the home
- mark changed files in tide’s Code tree
- count the changed files under each directory in tide’s Code tree
- serve docs through the API
- manage docs from the command line with wdx doc
- write a project’s docs into its repository with wdx doc sync-to-git
- show the Code section’s worktree in bold
- show tide’s hidden-tab arrows as ◀ and ▶, not dimmed
- show a project’s docs in tide’s Docs section and tab
- find the newest dev release whatever order GitHub lists them in
- name the newest dev release in a file each release moves
- see a worktree’s base move whenever it moves
- keep file contents and comments out of the logs
- follow a conversation Claude Code moves to the background
- keep a file’s mark when it is committed while the worktree is read
- release a holder whose client connects as its shell exits
- close the terminal’s input only once its read has ended
- keep a long notice in a text tab’s bar, and describe tide’s Code section
- send arrow, editing and function keys with Shift, Alt or Ctrl as xterm does
- never log a doc’s content in the daemon’s requests and responses
- keep tide’s Code cursor on a new entry until a read shows it
Performance
Section titled “Performance”- prepare the stores’ statements once, and redact only lines with a URL
- give cobra flag completions only in a run that completes
v0.2.0 - 2026-11-01
Section titled “v0.2.0 - 2026-11-01”Breaking changes
Section titled “Breaking changes”- add the terminal commands and stop terminals on project close
- run wdx terminal attach full-window, as tmux does
- make update –rollback –json say whether to restore the backup
- page terminal history by from and count, or by tail
- answer a request to an unknown endpoint with 400
- create agents under other agents, shown as a tree
- show and change settings with wdx setting
Features
Section titled “Features”- update wdx in place and roll it back
- add the terminals table and the terminal.shell setting
- run a terminal’s shell in a holder process that outlives the daemon
- supervise terminals’ holders and keep their state
- serve terminals over the API and stop them with their project
- keep terminals running when the service stops or restarts
- publish a GitHub Release for every pushed tag
- give terminals’ shells WDX_HOME so wdx run in them reaches their daemon
- list a project’s terminals in project get and add terminal get
- write the config file from the settings, and anew on every update
- let the daemon drive holders of protocol version 2
- keep a terminal’s screen in a headless vt for attach
- keep a terminal’s output in a spool and its history in files
- let clients attach to a terminal’s holder
- add a client that attaches to a terminal’s holder
- serve a terminal’s history and delete what removed terminals kept
- add wdx terminal attach and wdx terminal history
- add a Bubble Tea pane that shows an attached terminal
- scroll an attached terminal’s pane back through its whole history
- color attach’s status line by its state
- show an attached pane at the size another client set
- say what did not happen on every changing command’s error
- give a terminal’s updated_at, when its state last changed
- add wdx tide, the terminal IDE’s layout with placeholder panes
- let tide list the projects from the daemon at start
- open closed projects in tide from [Open Project]
- switch projects in tide with the switcher and Alt+Shift+arrows
- frame tide’s popups with a title, a body and their keys
- open a local repository in tide from a directory browser
- clone and create projects in tide, answering their questions
- select text inside one tide pane by dragging, copied on release
- stream a project from the daemon, whole on every change
- show the project’s terminals as tide’s tabs, followed live
- create a terminal with C-q t and remove one with C-q x in tide
- log when a terminal’s vt falls behind its output and catches up
- list what wdx needs besides itself with wdx deps list
- install a dependency with wdx deps install –name
- drop only the features of a missing dependency
- run AI coding agents as terminals of a project
- show a terminal’s history alone, read-only, in termview
- show the selected terminal live in tide’s terminal pane
- list a project’s agents in tide and show the active one live
- open and switch projects in framed popups in tide
- give tide’s left pane a quarter of the width
- start an agent in a worktree, created when it is new
- save the dev channel when installing from it
- take the menu’s letters in tide’s project pane without C-q
- accept holders of protocol versions 3 and 4
- read an agent’s activity and draft from its screen
- keep what an agent is doing in its holder
- send a message to a terminal with wdx terminal send
- send tide’s own keys to the program in a pane
- give a running agent a message with wdx agent send
- show the version in the status bars and reload tide with C-q r
- show what an agent is doing in the API, wdx agent and tide
- show how many messages wait for an agent
- open agents in tabs in tide’s right pane
- publish and update from the srjn45/wdx releases
- build with Go 1.26.10 for its standard library security fixes
- open terminals’ PTYs without reading a stale PTY number
- keep attached clients’ output flowing past the hello’s write timeout
- number an attached pane’s lines as the holder does after a vt reset
- answer hello without waiting for the holder’s vt
- keep the holder’s vt going when a program never reads its answers
- send attached clients the shell’s exit before the holder quits
- fetch failed history again on the next scroll, not at once
- give the window back when wdx terminal attach gets a signal
- refuse ctrl-i and ctrl-m as attach’s prefix key
- finish a change when the client that asked for it leaves
- never leave a clone cut short where a project’s checkout goes
- cancel a change the stopping daemon gives up on, and wait for it
- let the daemon stop while a terminal’s holder is being dialled again
- report a terminal removed with –stop-running as stopped
- stop a project’s terminals together, not one after another
- stop a terminal’s holder even when nothing watches it
- delete the sockets killed holders leave behind
- stop the daemon a failed update started before putting the old one back
- never lose the rollback point, nor fail an update that worked
- finish an update’s switch when wdx is interrupted during it
- refuse a rollback once another install replaced the update
- always say a signal held during an update’s switch
- stream a release’s archive to disk instead of into memory
- let launchd wait for the daemon to stop
- attach shows the screen under less or vim, and the pen and line drawing
- keep out of history lines that never scrolled off the screen
- free what scrolls off the alternate screen
- retry starting the daemon while its binary is text file busy
- keep the last screen in history before telling of the shell’s exit
- stop Claude Code’s idle title from printing at its prompt
- keep all of a shell’s output in history when the vt is behind at its exit
- select a terminal created in tide whichever comes first
- keep a clone that is cancelled once it is in place
- stop a terminal whose connection to its holder just dropped
v0.1.0 - 2026-10-28
Section titled “v0.1.0 - 2026-10-28”Features
Section titled “Features”- scaffold wdx CLI with release build and installer
- add projects with open –local and close
- add project remove
- add project open –git
- add project create
- add flags to answer prompts without a terminal
- add –json output and exit codes
- support –json in project open
- support –json in project create
- add project list
- add project get
- add –help with output, errors and –json
- add structured JSON logging with debug_id
- load settings once into a config passed by value
- name projects by –id or –name in close and remove
- read settings from
/config.yaml - add the daemon API spec and the daemon serving it
- serve every command through the daemon
- install and manage the daemon as a systemd or launchd service
- log the error code at the top level of returned lines
- send the daemon’s request metrics over OTLP
- run Grafana with the logs and metrics via wdx observe
- color text output and split errors into hint and debug_id lines
- render help in our own layout, with examples and help topics
- complete commands, flags and projects in bash, zsh and fish
- tag releases on a stable and a dev channel