Skip to content

Release 0.16.0: native harness wake - #73

Merged
mostlydev merged 16 commits into
masterfrom
release/0.16.0
Sep 15, 2026
Merged

mostlydev merged 16 commits into
masterfrom
release/0.16.0

Conversation

@mostlydev

Copy link
Copy Markdown
Owner

Native harness wake plus operator chat room retention, released as 0.16.0.

Summary

  • Native harness wake (Wake an idle harness when the operator (or a peer) sends it a directed message #69). A directed message, assignment, pass, or pending handoff wakes an idle Claude Code session through its inbox socket, or an idle Codex session through codex queue, when it isn't running tt wait. One async dispatcher with per-member unread-batch dedupe. cmux stays the fallback for parked standby and explicit interrupts. The wake is a fixed prompt without the message body, credentials are private and owner-only, and errors are fixed codes.
  • Wake status. tt msg send reports delivery transport and state, tt chat shows per-recipient notices, tt standby reports wake_transports, and tt health shows the last wake.
  • Standby rearms wake, so the next directed message wakes an agent again after it returns to standby.
  • Operator chat keeps its room open after agents leave. This includes and supersedes Keep operator chat rooms open after agents leave #72.
  • Fixed: CLI tests no longer open the real data directory.

Affected commands: tt msg send, tt chat, tt standby, tt wait, tt join, tt health. Harnesses: Claude Code and Codex (native); cmux (fallback).

Verification

  • npm run typecheck, npm test (538 passed, 1 skipped), npm run build, git diff --check, npm pack --dry-run
  • Live: idle Codex wake via codex queue; idle Claude wake via inbox socket (default settings and bypass permissions); operator-chat wake; crossSessionInbound: refuse produces no wake; standby rearm woke the same session twice in a row.
  • Design and live evidence: docs/plans/2026-09-15-native-harness-wake.md

Register Claude Code inbox sockets and Codex threads as private
per-member wake endpoints, and wake a member with no live receiver
once per unread batch when a directed message, pass, or reservation
targets it. Delivery sends a fixed body-free prompt, reserves the
batch before I/O, falls back to cmux only on definite failure, and
reports delivery_transport and delivery_state on sends.
A running tt chat console now keeps its room when the last agent leaves
or is kicked, so the operator can stay and agents rejoin the same room.
The last console closing an agent-less room deletes it, and a console
whose process is gone never retains a room. Chat explains when an
addressed agent has left, and the skill tells agents to finish with
tt standby instead of tt leave while an operator console is present.
Close a member's wake batch only when the acknowledged cursor passes
the newest event queued on any of its endpoints, so a partial ack
cannot reopen the cmux row and re-wake the native endpoint. Document
native wake in the README, skill, bundled instructions, changelog,
and plan implementation notes, and recommend tt standby --json.
A wake transport registered for the same harness session while a batch
is outstanding now joins that batch instead of re-waking the member.
A recipient-scoped flushWakes no longer drops other queued recipients
from the room's pending set.
Throw send errors synchronously from sendMessageAndWake so tt chat
reports them instead of a vague delivery notice. Release a batch whose
every eligible transport definitely failed, so a later sender or an
interrupt can still reach the member. Requeue a wake skipped for a live
receiver when that receiver exits before reading the event. Sweep
pending wakes left by other processes on unscoped flushes and during
long waits. Report ambiguous delivery as ambiguous, and keep Claude
inbox credentials out of the codex child environment.
Also mark Codex queue as live-verified in the plan and define queued
as transport submission.
Standby's transport field only names the cmux-or-manual fallback, so a
native-wakeable session looked like manual standby. Add wake_transports
to the result and CLI text, and record the default-settings Claude idle
wake in the plan.
@mostlydev
mostlydev merged commit f44f0b0 into master Sep 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant