- New non-rendered
run_completeevent in the canonical event log carrying{ marker, inputRunSeq }, so automation consumers can correlateinput_runwith completion without scanning rendered output (#55, tracking #21). release:prepandrelease:finalizenpm scripts plus pinnedrelease-itconfig for an opinionated release-prep workflow that updates package version files, creates a singlerelease/<version>commit, and tagsv${version}from a clean, syncedmainwithout ever publishing or creating GitHub Releases (#72).- "Agent Demo" section in the README and an evergreen
dogfood/agent-uses-agent-tty/bundle that records Codex and Claude TUIs drivingnvim --cleanthroughagent-tty, with outer/inner WebMs, asciicasts, transcripts, thumbnails, and areproduce.shscript (#54). dogfood/issue-21-run-completion-clean/verification bundle proving snapshots, screenshots, asciicasts, WebM, and theoutputevent stream contain no completion-marker bytes while the publicrunenvelope still exposesmarker,completed, anddurationMs(#55).- AFK Triage maintainer flow under
.sandcastle/that fans out Claude Code triage agents acrossneeds-triage/ activeneeds-infoGitHub issues, each in its own per-issue Coder workspace ondev.coder.comwith a realcoder/agent-ttycheckout, governed bydocs/adr/0004-afk-triage-apply-policy.mdand the AFK comment marker policy (#86, #89).
run --waitno longer leaks its internal completion marker into rendered artifacts. Completion is signaled via an APC sentinel consumed by the host PTY ingestion path beforeoutputevents are appended, with a defensive scrub for any echoedprintfpostamble. Waits resolve on the newrun_completeevent instead of polling rendered snapshots for marker text. The publicrunJSON envelope is unchanged (#55, tracking #21).- Asciicast export now explicitly skips non-rendered events (
input_text,input_paste,input_keys,input_run,run_complete,signal,exit) so recordings only containo,r, andmframes (#55). wait --text/--regex/--screen-stable-ms/--cursor-row/--cursor-colvalidation is centralized in a shared render-wait matcher used by both live host polling and CLI offline replay fallback. Invalid, unsafe (nested-quantifier), or out-of-range patterns are rejected locally withINVALID_INPUTbefore any RPC or offline replay snapshot work. PublicwaitJSON shapes and human output are unchanged (#76).- Renderer dispose now uses a per-lifecycle
ResourceScopefor deterministic LIFO release of page, browser context, browser, and local server. Publicdispose()remains best-effort and resolves successfully; individual cleanup failures are now surfaced through the logger aswarnentries with{ name, error }instead of being silently swallowed. Concurrent artifact-manifest appends route through a genericKeyedSerializer<string>while preserving existing serialization semantics (#83). AbortSignalis now threaded through host-sidewait,waitForRender,runcompletion, lifecycle polling, andsendRpc, with timers, sockets, and listeners registered againstResourceScope. The RPC server also aborts the per-request context when a client socket closes, so abandoned RPC requests release host resources promptly instead of running to timeout. A bounded 1s liveness probe on the existing RPC socket avoids indefinite hangs during host startup when a stale socket neither accepts nor rejects a connection promptly. Public JSON envelopes and protocol schemas are unchanged (#94, fixes #84).- The supported Node range is now
>=24.0.0 <27and the project toolchain is pinned to Node 26.1.0. Playwright is bumped to1.60.0, which ships the upstream fix for the Node 26playwright install chromiumextraction hang (microsoft/playwright#40724) that previously forced a Node 26 revert in #91. CLI behavior and JSON contracts are unchanged (#98). - Local and CI dependency bootstrap now uses
aube:mise run bootstraprunsaube exec playwright install chromiumandmise run bootstrap-cirunsaube ci. Themise-pinnedaubewas bumped to1.10.4(migrating frompnpm/npmlockfiles toaube-lock.yaml), andpnpm.allowBuildspermits native builds for@coder/libghostty-vt-node,esbuild,fsevents,node-pty,@parcel/watcher, andmsgpackr-extract(#51, #57, #73, #91). - Internal session-status policy, event-log codec, snapshot capture, screenshot capture, command-target resolution, waited-run completion bookkeeping, and Zod result-validation parsing are centralized into shared modules. No CLI, protocol, JSON envelope, manifest entry, or
rendererBackendreporting changes (#67, #68, #69, #70, #75, #78, #93). - Repository tooling switched from ESLint / Prettier to Oxc:
npm run format/format:checknow invokeoxfmt, andnpm run lint/lint:fixinvokeoxlintplusoxlint-tsgolintfor type-aware checks. CI andmisetask names are unchanged (#71).
- Default-location screenshot PNGs, snapshot JSON files, and
record exportartifacts are now rolled back when the subsequent artifact-manifest append fails, so a manifest-validation failure no longer leaves an orphaned, unmanifested file under the session'sartifacts/directory. Explicit--outpaths supplied by the caller are preserved on failure because they belong to the user, not the session manifest (#95, fixes #79). EventLog.opennow closes the underlying file handle when validation (size-limit check or existing-content parsing) fails, preventing a file-descriptor leak on rejected session host startup (#51).npm run release:prepandnpm run release:finalizenow work on aube-only checkouts wherepackage-lock.jsondoes not exist.readPackageVersions/assertPackageVersionsMatchskip the lockfile-coherence assertions whenpackage-lock.jsonis absent, andrelease-prep.mjsstages onlypackage.jsonin that case. The npm-lockfile path is still fully supported when apackage-lock.jsonis present. Without this fix, the documented release flow was broken after theaubemigration in #91.
protocolVersionin theversionenvelope intentionally stays at0.1.0. This release is additive over the0.1.xenvelope contract and does not change the public JSON shape; only the package version moves to0.2.0.
v0.1.1-beta.4 - 2026-04-25
- Selectable
libghostty-vtrenderer backend support with backend-selection plumbing for live commands, offline replay, screenshots, snapshots, waits, and WebM export, plus dogfood coverage for the fallback path (#42). - Skills eval authoring and reporting DX, including workspace presets, reporter lifecycle hooks, token usage snapshots, and stronger statistical guidance for measuring skill changes (#33, #35, #36, #37).
- Communique-powered release changelog and GitHub Release note automation, locked
misetooling, and GitHub Actions workflow linting withactionlintandzizmor(#32, #39). - Apache license and reorganized repository documentation for release, roadmap, design, dogfood, contributor, and maintainer workflows (#40, #41, #43).
- The package engine range now allows Node 25 in addition to Node 24 (#39).
- Development dependency maintenance updated PostCSS (#44).
agent-tty --helpnow points users atagent-tty skills listfor bundled skill discovery (#38).- Release workflows now authenticate protected branch fetches so private-repository release automation can read base/default branch refs (#45).
- Eval scoring, reporting, verifier calibration, and anti-pattern checks were hardened with additional unit coverage (#34, #36).
v0.1.1-beta.3 - 2026-04-24
- Multi-skill runtime system with new
agent-tty skills list|get|pathsubcommands, serving canonical skills from a packagedskill-data/directory, plus a new built-indogfood-tuiskill for TUI QA workflows (#28)
- Renamed the public CLI surface from
agent-terminaltoagent-tty: npm package, binary, skill name,AGENT_TTY_*environment variables, default home at~/.agent-tty, and the GitHub repo now live atcoder/agent-tty(#27) - RPC sockets now use a short hashed path under
/tmp/agent-ttyso isolated temp homes don't exceed macOS Unix socket path limits (#29) doctornow uses the shared Playwright browser-cache resolver, reporting the correct~/Library/Caches/ms-playwrightpath on macOS (#29)runnow writes executable shell input directly instead of using bracketed-paste control sequences (#29)
- Mux workspace hooks now trust the workspace-local
mise.tomlbefore runningmise install/bootstrap, preventing new worktree setups from failing (#26) - Darwin
node-ptyspawn-helperhas its executable bit repaired at runtime, fixing PTY spawn failures on packaged macOS installs (#29)
agent-tty skill(singular) has been removed — useagent-tty skills get agent-ttyinstead (#28)
v0.1.1-beta.0 - 2026-04-24
- Complete session control plane:
create,list,inspect,destroy,gc, with per-session background host, PTY lifecycle, and append-only event log (#3, #5). - Input commands:
type,paste,send-keys,resize,signal, and a first-classrunfor robust in-session command execution with completion detection (#3, #14). - Renderer-backed inspection: semantic
snapshot(structured and--format text), deterministicscreenshotwithreference-dark/reference-lightprofiles, andwait --text/--regex/--screen-stable-ms/--exit/--idle-ms(#4). record export --format asciicastand--format webmfor text and video replay artifacts, with post-exit offline replay ofsnapshot,screenshot, and exports from persisted event logs (#5).doctorhealth checks covering PTY spawn, home/socket/artifact writability, Playwright browser cache, home isolation, renderer/bundle assets, and capability reporting (#5, #12, #14).- Public
agent-terminalskill underskills/agent-terminal/SKILL.mdwith TanStack Intent integration, plus a top-levelagent-terminal skillcommand that emits the packaged skill markdown (raw or--json) for just-in-time agent loading (#16, #22). - Verified tarball install flow: new
pack:releasescript,smoke:installcoverage, and documented private/prerelease install guidance (#19). - GitHub Release workflow (
prepare-release+publish-github-release) that produces a validated.tgzwith SHA-256 checksum and metadata artifact, with prerelease tag support and an ancestry guard that requires tagged commits to be reachable from the default branch (#23, #24). - Bundled Nerd Font fallback so renderer-backed screenshots and WebM exports render glyph-heavy TUIs correctly out of the box (#11).
- Artifact manifest now records
sha256, byte size, render profile, andrecording/videokinds for reviewable, deterministic export artifacts (#5). - Renderer now resolves
PLAYWRIGHT_BROWSERS_PATHfrom the hostHOMEso screenshots and WebM export work in isolated sessions without manual env overrides (#14). - Repository documentation reorganized and an
AGENTS.mdcontributor guide added (#6, #17).
- Release workflow accepts prerelease versions like
0.1.1-beta.0/0.1.1-rc.0in version tests and tag validation (#24).