Skip to content

Releases: mostlydev/talking-stick

v0.8.0

Choose a tag to compare

@mostlydev mostlydev released this 18 Jun 21:24

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-stick skill front-loads the highest-leverage rules: one tt wait --events --after <cursor> loop as the only poll and the only listener, never bare tt wait, advance the returned cursor_event_seq and re-arm exactly one loop, bound tt events, no shared mutation without a fresh your_turn and a live guardian_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 both LICENSE.md and CHANGELOG.md now ship in the published package files.

Changed

  • Corrected owner-side receive-path guidance. An owner's tt wait --events is a genuine long-poll: isTurnWake suppresses already_owner as a turn wake, so the loop blocks until an event arrives or the wait times out, then returns your_turn with reason: "already_owner". The same single loop now serves owner and waiter alike and doubles as guardian keepalive. This replaces prior owner-side tt events --follow listener advice — a recurring leaked-duplicate-listener footgun seen in the logs; the only documented fallback for harnesses that cannot run tt wait is now a single one-shot tt events --wait.
  • Never bare tt wait. The skill, instructions, and README now require the standby loop to always be tt wait --events --after <cursor>; bare tt wait wakes only on a turn change and silently misses messages and events.
  • Bound tt events. Guidance to always pass --after (and --limit); a bare tt events --target any can 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-run

v0.7.0

Choose a tag to compare

@mostlydev mostlydev released this 16 Jun 20:07

Talking Stick 0.7.0

Date: 2026-06-16

Added

  • Concise tt health / tt status action 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 --all still works). JSON exposes hidden.{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 dedicated next reminder (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 isGonePersistent grace the service layer already enforces — process gone and no tt activity past the gone-grace window — before relinquishing as harness_gone. Harnesses whose OS process identity rotates per turn keep their lease as long as they keep issuing tt commands. (#55)
  • Presence refresh on ordinary commands. Reads such as tt health/tt state and owner mutations (release/pass/takeover) refresh the calling harness member's last_seen and 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 … wait count once), so an unrelated room or peer's listeners no longer trigger false duplicate warnings. (#56)

Fixed

  • harness_gone false positive. A live harness that kept running tt commands 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-run

Talking Stick 0.6.0

Choose a tag to compare

@mostlydev mostlydev released this 15 Jun 18:08

Talking Stick 0.6.0

Date: 2026-06-15

Added

  • Skiller-backed skill installation. Talking Stick now bootstraps the skiller binary 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-run

Talking Stick 0.5.1

Choose a tag to compare

@mostlydev mostlydev released this 15 Jun 04:18

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-stick prompt 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 their tt CLI 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-run

Talking Stick 0.5.0

Choose a tag to compare

@mostlydev mostlydev released this 15 Jun 03:55

Talking Stick 0.5.0

Date: 2026-06-15

Added

  • tt health / tt status room 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 current cli-session, guardian liveness and whether it protects the current turn, and duplicate/stale receiver detection), and an advisory git status. Available as text and JSON. It never claims, releases, refreshes wait state, spawns guardians, kicks members, or mutates handoffs.
  • cursor_event_seq on tt join and tt 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-streaming tt events, tt notes list, and tt health anchor to the room's most recent activity and collapse older ghost rows behind a summary; --all and 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> --json as the single harness loop for both ownership changes and room events; tt events --follow and tt msg recv are documented as audit/debug or legacy fallbacks. Events remain observer-only — shared mutation still requires a your_turn grant 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 (including tt --json wait --help, tt wait . --help, and tt 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-run

Talking Stick 0.4.13

Choose a tag to compare

@mostlydev mostlydev released this 14 Jun 21:25

Talking Stick 0.4.13

Date: 2026-06-14

Added

  • Antigravity CLI harness support. tt now detects Antigravity from ANTIGRAVITY_AGENT, ANTIGRAVITY_CONVERSATION_ID, ANTIGRAVITY_TRAJECTORY_ID, or agy ancestry, using the conversation id as the preferred stable session anchor. tt install antigravity installs the bundled skill through the shared ~/.agents/skills/talking-stick location.

Changed

  • Shared .agents skills 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 ## Gemini instruction aliases remain for existing sessions, but tt install gemini is cleanup-only and points users to tt install antigravity.
  • Shared skill uninstall is explicit. tt uninstall codex, tt uninstall grok, tt uninstall opencode, and tt uninstall antigravity leave ~/.agents/skills/talking-stick in place and print the explicit removal command. Use tt uninstall agents, tt uninstall --shared, or tt uninstall --all to remove the shared skill target.

Fixed

  • Duplicate skill entries are pruned conservatively. Installs, update cleanup, and first-run migration remove only proprietary talking-stick symlinks that resolve to the bundled skill, including both OpenCode roots (~/.config/opencode/skills and ~/.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-run

v0.4.12

Choose a tag to compare

@mostlydev mostlydev released this 09 Jun 22:44

Talking Stick 0.4.12

Date: 2026-06-09

Fixed

  • No-op tt install runs are quiet. Legacy MCP cleanup lines are only printed when an entry was actually removed, preserved, or failed — absent/skipped no-ops stay silent. The Grok session hook and Gemini skill installs now inspect their targets and report already_present instead of rewriting (ok: Updated ...) or re-linking (added: ok) on every run, and the tt instructions edit hint 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-run

v0.4.11

Choose a tag to compare

@mostlydev mostlydev released this 09 Jun 22:07

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, wrote READY to a stream nobody read, and held the lease indefinitely with no recorded PID for stopGuardian to 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.json and harness config patches are written atomically. Both now write to a temp sibling and rename, so a crash or full disk mid-write can no longer truncate the session store or a user-owned config such as opencode.json. (#34)
  • ps lstart parsing is locale-stable. Process inspection invokes ps with LC_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 --json is requested, plain CLI errors serialize as {"error": "cli_error", "message": ...} on stderr (matching ProtocolError'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 like 100ms. (#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, honoring XDG_CONFIG_HOME) instead of the hardcoded ~/.opencode tree; verified against OpenCode source, which scans both skill/ and skills/ 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_end hook is pending. (#40)
  • tt install is idempotent for skills. Skill install actions carry operation/inspect, so a second run reports already_present instead 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.ts entry point or stale install paths; patchOpencodeConfig's dead install branch is gone and the legacy tt mcp command 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-run

Talking Stick 0.4.10

Choose a tag to compare

@mostlydev mostlydev released this 08 Jun 23:03

Talking Stick 0.4.10

Date: 2026-06-08

Added

  • Grok Build harness support. tt install grok now installs the native ~/.grok/skills/talking-stick skill and a trusted global ~/.grok/hooks/talking-stick-session.json hook. Grok-launched tt calls work without cmux by detecting a grok root process in ancestry; CMUX_AGENT_LAUNCH_KIND=grok remains optional fast evidence when present. The hook records GROK_SESSION_ID context in ${TALKING_STICK_DATA_DIR}/grok-sessions.jsonl so 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-run

v0.4.9

Choose a tag to compare

@mostlydev mostlydev released this 03 Jun 05:33

Talking Stick 0.4.9

Date: 2026-06-03

Fixed

  • Home-level workspace markers no longer capture scratch directories. resolveContextPath now 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 $HOME join a home-scoped room. Explicitly joining $HOME still 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