Repository navigation
v9.0.0 — Scripts are TypeScript; bash only for the hooks, the worktree resolvers and the installer
Scripts are TypeScript; bash only for the hooks, the worktree resolvers and the installer
Every script the layer installs is now TypeScript, run by Node as node --experimental-strip-types <file>.ts. Bash stays only where Node cannot run: the two hooks your tools fire on every tool call (and the libraries they source), the scripts that create the worktree a session runs in (write-root.sh with the harness.sh and lock.sh it sources, and setup-worktree.sh), and install.sh, which runs on a machine where nothing else exists yet.
What you need
- Node 22.6 or later. Everything is run with
--experimental-strip-types, which Node 22.6 through 26 accept. On Node 22 you will see Node's own "Type Stripping is an experimental feature" warning;.agents/package.jsonnow declares the layer an ES-module tree, so that is the only one. /qastill assumes Node 22.18 or later.
Upgrading from v8
Re-run the installer. The .sh checks v8 installed in .agents/checks/ are removed while they are still as it installed them; one you edited is kept and named, and nothing runs it any more — carry your change to its .ts successor. If you call a Contextium script by name from your own tooling, change x.sh to node --experimental-strip-types x.ts. Details: docs/update-guide.md § Upgrading to v9.0.0.
Also in this release
- The installer keeps more of what is yours: an edited file in an old
apps/folder, a rootAGENTS.mdyou wrote under the old generated marker (moved toAGENTS.md.pre-agents), a retired skill folder that is now your own link, and your hooks and Gemini settings on a machine withoutjq. /close: Codex and Grok worktrees are kept per repository, so two repos never share one; a worktree is never reclaimed for a different repository; a check that ignores its timeout is killed with everything it started;landruns a repo's deploy poller in that repo./qa: a local Cloudflare app gets its own D1 migrations applied (and an optionalqa:seedscript) instead of empty tables; a busy port is never taken for a free one on a machine withoutss/lsof;--afterserves a nested app from its own folder; the visual fallback only accepts a reviewer that proves it saw the screenshots./implement: a directory scope checks the files in it rather than passing without running; a Makefile make cannot read fails the step instead of skipping it.- The checks:
check-skills.tsreads YAML block scalars the way the published validator does;check-harness-config-links.tsrequires the manifest of every tool recorded in.agents/harness.
Tested
- The full suite, 2,867 tests, on Node 26 and on Node 22.6; the bash files and their suites under bash 3.2.
- Live, against a fresh install with a control run for each: Grok Build and Gemini CLI read
AGENTS.md, load a skill from.agents/skills, and the host-infra guard blocks; in Claude Code and Codex the guard blocks (Codex once its hooks are trusted). Antigravity was not re-run for this release; its hook manifest is unchanged from v8.0.1, where it was probed live, and the guard scripts it runs are the ones the other four ran.