Releases: mostlydev/talking-stick
Releases · mostlydev/talking-stick
Release list
v0.8.0
Talking Stick 0.8.0
Date: 2026-06-18
Coordination guidance hardening driven by mining real Claude and Codex session logs (134 sessions across both harness stores). Both corpora independently ranked the same root problem — agents distrusting the single long-poll — and surfaced the same meta-insight: the rules mostly already existed but were buried in prose.
Added
- Coordination Quick Reference in the skill. A short, mechanical checklist at the top of the
talking-stickskill front-loads the highest-leverage rules: onett wait --events --after <cursor>loop as the only poll and the only listener, never barett wait, advance the returnedcursor_event_seqand re-arm exactly one loop, boundtt events, no shared mutation without a freshyour_turnand a liveguardian_pid, and test before the final handoff. - Coordination is mandatory and testing-before-final-handoff are now explicit in both the bundled skill and the editable collaboration instructions, plus a "lead a multi-agent kickoff with one room broadcast of the goal and a proposed split" optimization.
LICENSE.md(MIT) added and bothLICENSE.mdandCHANGELOG.mdnow ship in the published packagefiles.
Changed
- Corrected owner-side receive-path guidance. An owner's
tt wait --eventsis a genuine long-poll:isTurnWakesuppressesalready_owneras a turn wake, so the loop blocks until an event arrives or the wait times out, then returnsyour_turnwithreason: "already_owner". The same single loop now serves owner and waiter alike and doubles as guardian keepalive. This replaces prior owner-sidett events --followlistener advice — a recurring leaked-duplicate-listener footgun seen in the logs; the only documented fallback for harnesses that cannot runtt waitis now a single one-shottt events --wait. - Never bare
tt wait. The skill, instructions, and README now require the standby loop to always bett wait --events --after <cursor>; barett waitwakes only on a turn change and silently misses messages and events. - Bound
tt events. Guidance to always pass--after(and--limit); a barett events --target anycan dump the entire log (tens of thousands of tokens).
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runv0.7.0
Talking Stick 0.7.0
Date: 2026-06-16
Added
- Concise
tt health/tt statusaction card. Default health output is now a short, action-oriented summary — owner, whether you own it, lease + renewal status, guardian, listener (with duplicate count), git, and the next recommended command. Full member/receiver/process diagnostics moved behind--verbose(the existing--allstill works). JSON exposeshidden.{members_omitted,receivers_omitted}so consumers know detail is available. (#55) - Listener restart reminder on every
tt wait/tt try. Each return now carries a dedicatednextreminder (JSON field and human line) to restart exactly one listener, and warns when duplicate active listeners are detected for your own harness. (#56)
Changed
- Stable leases across harness process rotation. The lease guardian no longer surrenders a live owner's turn the instant its captured harness pid leaves the process table. It now confirms persistent absence through the same
isGonePersistentgrace the service layer already enforces — process gone and nottactivity past the gone-grace window — before relinquishing asharness_gone. Harnesses whose OS process identity rotates per turn keep their lease as long as they keep issuingttcommands. (#55) - Presence refresh on ordinary commands. Reads such as
tt health/tt stateand owner mutations (release/pass/takeover) refresh the calling harness member'slast_seenand process metadata. This is presence only — reads never renew owner authority or extend the lease. (#55) - Duplicate-listener detection is harness-scoped. Receiver scanning is now scoped to the caller's own process tree and ancestor-deduped (a wrapper shell plus its child
node … waitcount once), so an unrelated room or peer's listeners no longer trigger false duplicate warnings. (#56)
Fixed
harness_gonefalse positive. A live harness that kept runningttcommands could be marked gone and have its lease taken over mid-task. The guardian/service parity above closes that path. (#55)
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runTalking Stick 0.6.0
Talking Stick 0.6.0
Date: 2026-06-15
Added
- Skiller-backed skill installation. Talking Stick now bootstraps the
skillerbinary during package postinstall, verifying release checksums before installing to~/.local/bin, and uses skiller for skill directory install, uninstall, sync, and duplicate cleanup whenever a compatible binary is available. The existing TypeScript installer remains as fallback, while MCP cleanup and the Grok session hook stay Talking Stick-owned.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runTalking Stick 0.5.1
Talking Stick 0.5.1
Date: 2026-06-15
Changed
- README modernized for the CLI-only workflow. Documentation only — no code changes. The quickstart now shows a single shared
/goal … /talking-stick $talking-stickprompt for both panes instead of two long per-harness scripts; stale MCP-era RPC names (add_note,list_notes,release_stick,pass_stick,wait_for_events,get_room_events,leave_room,wait_for_turn) are replaced with theirttCLI equivalents; the version pin was removed from the intro (it belongs in this changelog and on npm); and the post-turn closeout section now points to the bundled skill instead of duplicating it.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runTalking Stick 0.5.0
Talking Stick 0.5.0
Date: 2026-06-15
Added
tt health/tt statusroom health view. A read-only diagnostic that combines room truth (owner, reservation, turn, lease/claim expiry, pending handoff, takeover availability), member liveness, local process truth (the currentcli-session, guardian liveness and whether it protects the current turn, and duplicate/stale receiver detection), and an advisorygit status. Available as text and JSON. It never claims, releases, refreshes wait state, spawns guardians, kicks members, or mutates handoffs.cursor_event_seqontt joinandtt state. Harnesses can seed the canonical wait loop from a returned event cursor instead of replaying history from--after 0.- Automatic recency horizon for default reads.
tt state, non-streamingtt events,tt notes list, andtt healthanchor to the room's most recent activity and collapse older ghost rows behind a summary;--alland explicit--after/--limit/streaming restore full history. The owner, reserved member, and calling agent are never hidden, and JSON exposes the hidden counts.
Changed
- One canonical listen/wait loop. The bundled skill, README, and command help now teach
tt wait --events --after <cursor> --jsonas the single harness loop for both ownership changes and room events;tt events --followandtt msg recvare documented as audit/debug or legacy fallbacks. Events remain observer-only — shared mutation still requires ayour_turngrant with a live guardian. - Explicit terminal closeout guidance. Skill §8 now defines three post-turn branches (active work pending, passive/external wait, shared task complete) with a completion-evidence checklist and worked examples, so a finished shared task closes out cleanly without an operator prompt. A protocol-level terminal marker is deferred to a follow-up issue pending room archive/reopen design.
Fixed
- Command help is side-effect-free.
tt <command> --help/-h(includingtt --json wait --help,tt wait . --help, andtt help <command>) now print help and exit without resolving or claiming a room, spawning a guardian, or writing any events, leases, handoffs, member rows, or wait state. Help short-circuits before startup maintenance and runtime, and the parser recognizes leading global options and normalizes-h.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runTalking Stick 0.4.13
Talking Stick 0.4.13
Date: 2026-06-14
Added
- Antigravity CLI harness support.
ttnow detects Antigravity fromANTIGRAVITY_AGENT,ANTIGRAVITY_CONVERSATION_ID,ANTIGRAVITY_TRAJECTORY_ID, oragyancestry, using the conversation id as the preferred stable session anchor.tt install antigravityinstalls the bundled skill through the shared~/.agents/skills/talking-sticklocation.
Changed
- Shared
.agentsskills are now primary for shared-reading harnesses. Codex, Antigravity, Grok Build, and OpenCode install the Talking Stick skill once at~/.agents/skills/talking-stick; Claude Code remains at~/.claude/skills/talking-stick. Grok still gets its global session hook. Install planning deduplicates same-path skill actions before running them. - Gemini CLI skill installation is deprecated. Gemini identity detection and
## Geminiinstruction aliases remain for existing sessions, buttt install geminiis cleanup-only and points users tott install antigravity. - Shared skill uninstall is explicit.
tt uninstall codex,tt uninstall grok,tt uninstall opencode, andtt uninstall antigravityleave~/.agents/skills/talking-stickin place and print the explicit removal command. Usett uninstall agents,tt uninstall --shared, ortt uninstall --allto remove the shared skill target.
Fixed
- Duplicate skill entries are pruned conservatively. Installs, update cleanup, and first-run migration remove only proprietary
talking-sticksymlinks that resolve to the bundled skill, including both OpenCode roots (~/.config/opencode/skillsand~/.opencode/skills). Copies, foreign symlinks, and hand-authored directories are preserved and audited.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runv0.4.12
Talking Stick 0.4.12
Date: 2026-06-09
Fixed
- No-op
tt installruns are quiet. Legacy MCP cleanup lines are only printed when an entry was actually removed, preserved, or failed —absent/skippedno-ops stay silent. The Grok session hook and Gemini skill installs now inspect their targets and reportalready_presentinstead of rewriting (ok: Updated ...) or re-linking (added: ok) on every run, and thett instructions edithint only prints when an install actually changed something.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runv0.4.11
Talking Stick 0.4.11
Date: 2026-06-09
Fixed
- Guardian no longer leaks when readiness times out.
spawnGuardian's readiness timeout now kills the detached child and clears its listeners before rejecting. Previously the orphaned guardian survived, wroteREADYto a stream nobody read, and held the lease indefinitely with no recorded PID forstopGuardianto reach. (#31) - Fair-turn ordering survives member churn. Round-robin distance is now computed from each member's rank within the current member list instead of raw join ordinals modulo member count, which inverted ordering once departures left sparse ordinals (e.g.
[0, 5, 7]). (#32) - Reserved-member liveness gets the same gone grace as owners. Both room-inspection paths now run the reserved branch through
isGonePersistent, so a transient process-check misread right after claim expiry can no longer deny the rightful recipient its grant. (#33) cli-sessions.jsonand harness config patches are written atomically. Both now write to a temp sibling andrename, so a crash or full disk mid-write can no longer truncate the session store or a user-owned config such asopencode.json. (#34)pslstart parsing is locale-stable. Process inspection invokespswithLC_ALL=C, so non-C locales no longer silently degrade identity resolution and liveness to the weakest fallback. (#35)- Errors are machine-readable in JSON mode. When
--jsonis requested, plain CLI errors serialize as{"error": "cli_error", "message": ...}on stderr (matchingProtocolError's shape) instead of bare text, keeping the non-zero exit code. (#36) - Boolean flags never consume positionals. The CLI parser has a boolean-flag registry, retiring the
--json-eats-positional footgun and the per-command repair shims;--after-style integer options now reject trailing garbage like100ms. (#37) - Non-harness
##headings no longer bleed into harness sections. In instruction files, an unrecognized##heading after harness sections ends the current section; its content is excluded from harness extraction. (#38) - OpenCode skill installs follow the XDG-aware config dir. The skill now lands next to
opencode.json(normally~/.config/opencode/skills/talking-stick, honoringXDG_CONFIG_HOME) instead of the hardcoded~/.opencodetree; verified against OpenCode source, which scans bothskill/andskills/under the config dir. (#39) - Restarted Grok sessions mint fresh identity. When PID identity is available but matches no recorded session, the workspace-candidate fallback no longer hands the new process the previous session's identity while the old
session_endhook is pending. (#40) tt installis idempotent for skills. Skill install actions carryoperation/inspect, so a second run reportsalready_presentinstead of deleting and re-copying the skill directory every time. (#41)- Docs drift from the MCP-to-skill migration cleaned up. AGENTS.md/README no longer reference the removed
src/mcp-server.tsentry point or stale install paths;patchOpencodeConfig's dead install branch is gone and the legacytt mcpcommand constant is marked as match-only. (#42)
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runTalking Stick 0.4.10
Talking Stick 0.4.10
Date: 2026-06-08
Added
- Grok Build harness support.
tt install groknow installs the native~/.grok/skills/talking-stickskill and a trusted global~/.grok/hooks/talking-stick-session.jsonhook. Grok-launchedttcalls work without cmux by detecting agrokroot process in ancestry;CMUX_AGENT_LAUNCH_KIND=grokremains optional fast evidence when present. The hook recordsGROK_SESSION_IDcontext in${TALKING_STICK_DATA_DIR}/grok-sessions.jsonlso identity can upgrade from pid-root identity to the real Grok session id when the record matches the workspace and harness process.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-runv0.4.9
Talking Stick 0.4.9
Date: 2026-06-03
Fixed
- Home-level workspace markers no longer capture scratch directories.
resolveContextPathnow treats the user's home directory as a marker boundary for descendant paths, so an incidental~/package.json,~/AGENTS.md, or similar marker does not make unrelated markerless paths under$HOMEjoin a home-scoped room. Explicitly joining$HOMEstill resolves to home, and real project markers below home still win.
Verification
npm run typecheck
npm test
npm run build
node dist/cli.js --help
git diff --check
npm pack --dry-run