From c7d4ef364b12b74dd2f93c1809e74edb079cfdbe Mon Sep 17 00:00:00 2001 From: sdoan99 Date: Fri, 3 Jul 2026 00:30:08 +0000 Subject: [PATCH] chore: bump version and changelog (v1.60.0.0) Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++++ VERSION | 2 +- package.json | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fe889ac0..cdef08288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## [1.60.0.0] - 2026-07-03 + +## **Hand a task from one AI harness to another without re-explaining it.** +## **`/handoff` packages what's done, what's next, and what failed into one block any harness can claim.** + +Running work across Codex, Hermes, Antigravity, and Claude Code used to mean each new harness started cold: re-reading the transcript, re-deriving decisions, re-hitting the same dead ends. `/handoff` makes a task portable. It emits one canonical `[handoff]` block, keyed to a task id, into three places at once: a live Plane comment, your `/context-save` notes, and (for durable research) a gbrain page. Another harness reads only that block, fires one or two targeted gbrain lookups for anything deeper, and claims the task. Release with `/handoff`, pick up with `/handoff take `. The join key is the task id, not the git branch, so a handoff survives across machines and workspaces. + +### The numbers that matter + +Source: the design target of the protocol, not a post-ship measurement. The mechanism is pointer-based handoff (read a fixed-size block plus a couple of semantic lookups) instead of transcript re-ingest (re-read the prior session). + +| Handoff cost | Pointer-based (`/handoff`) | Transcript re-ingest | What it means | +|---|---|---|---| +| Tokens to resume a task cold | ~3-4K | 50K+ | The next harness reads a block, not a history | +| What stops a repeated dead end | the mandatory `failed:` field | nothing | The most expensive mistake is not re-run | +| Where the claim is atomic | Plane state (live) | n/a | Two harnesses cannot grab the same task | + +No post-ship token measurement exists yet; the numbers above are the architecture's target, reproducible by comparing a filled `[handoff]` block against a full session transcript. + +### What this means for builders + +If you run more than one AI harness, `/handoff` is the seam between them. Pause work in one, claim it in another, and the second one starts from a 400-token brief plus pointers instead of your whole session. The `failed:` field is mandatory on purpose: it is what keeps the next agent from burning a context window re-deriving something you already ruled out. The durable protocol lives in gbrain (`gbrain recall "multiplayer handoff protocol"`) so every harness reads the same rules. + +### Itemized changes + +#### Added +- **`/handoff` skill:** release a task (`/handoff `), claim one (`/handoff take `), or list what's waiting (`/handoff list`). Emits one `[handoff]` block into a Plane comment, `/context-save` notes, and a gbrain page. Reads only the latest handoff block plus targeted gbrain lookups on claim, so resuming a task does not re-ingest a transcript. +- **Canonical handoff schema:** `task / repo / branch / commit / by / status / goal / done / next / worked / failed / refs / blockers`. `refs` are pointers only (gbrain slug, PR number, file:line); `failed` is mandatory; the block is capped near 400 tokens with overflow linked from `refs`. + +#### For contributors +- New skill lives in `handoff/SKILL.md.tmpl` (generated `handoff/SKILL.md`), auto-discovered by `discoverTemplates` and fanned out to every host by `./setup` / `gen:skill-docs`. Documented in `AGENTS.md` and `docs/skills.md`; skill-validation doc-inventory cross-check passes. + ## [1.58.5.0] - 2026-06-21 ## **A fresh install now lands on a concrete first move, not a dead end.** diff --git a/VERSION b/VERSION index 2153ce66b..267a65ff8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.58.5.0 +1.60.0.0 diff --git a/package.json b/package.json index 4727042e5..c7358be18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.58.5.0", + "version": "1.60.0.0", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module",