You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat: realtime blocked-child notifications for the orchestrator
When a child session blocks on a tool approval or question, the parent
orchestrator now gets an immediate push notification with the requestId
and the exact API call to respond, instead of the child silently dying
at timeout. Adds a 'blocked' child status, stops auto-denying pending
prompts when the last client leaves an agent session, and replaces the
headless-agent fast-deny with the normal prompt flow (5-min timeout
remains the backstop).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: persistent notification outbox with replay when the orchestrator returns
Notifications to the orchestrator (Agent Joe) were silently dropped when
its Claude process was not running — terminal child-session events and
monitor alerts vanished, so Joe woke up with no idea what happened while
it was down.
- New OrchestratorOutbox: JSON-file-backed queue (survives restarts,
capped at 200 items) with a 60s background flusher that replays queued
items as a single digest message once the orchestrator session is
alive again. Flush is gated on the rate-limit circuit breaker and
clears the queue before sending to avoid double-delivery.
- sendOrchestratorNotification now enqueues to the outbox when the
parent is unreachable and returns true (the outbox owns delivery from
that point); false only when queueing itself fails.
- OrchestratorMonitor.deliverToOrchestrator enqueues instead of
dropping when the orchestrator process is down.
- Flusher wired up at server boot in ws-server.ts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: pausable child timeouts, broader allowlist, worktree status in spawn response
Blocked children used to burn their whole timeout waiting on an approval
the orchestrator never saw — with PR1's realtime blocked notifications in
place, the timeout now pauses while a child waits for an answer.
- Working-time clock pauses when a child blocks on an approval/question
and resumes (with the remaining budget) once the prompt is answered;
a separate 30-min blocked-time cap still terminates abandoned children.
- DEFAULT_TIMEOUT_MS raised from 10 to 30 minutes; spawn API now accepts
and validates timeoutMs (1 min – 4 h), documented in Joe's CLAUDE.md.
- AGENT_CHILD_ALLOWED_TOOLS broadened: python3, pytest, sed, rg, jq,
mkdir, cp, mv, touch (rm/sudo/docker still require approval).
- ChildSession now reports worktree status ('active'/'failed'/'none')
and worktreePath so the orchestrator knows when isolation failed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: verify child completion against ground truth instead of transcript sniffing
Completion checks used to grep the child transcript for keywords like
"pull request" — false-positive on mentions, false-negative on terse
output — and treated >100 chars of output as success on process exit.
- isFinalStepMissing asks the real systems: gh pr list --head <branch>
for 'pr' policy, git ls-remote --heads origin <branch> for 'merge'
(run in the child's worktree, injectable exec for tests). Transcript
sniffing remains only as a fallback when the command itself fails.
- Children are nudged once when the final step is missing; if it still
doesn't land, the terminal notification carries a "Completion not
verified" note so the orchestrator knows to follow up.
- Exit-path status now derives from ground truth, not output length;
removed the dead supersededMsgs tracking.
- Joe's CLAUDE.md template: drop the "poll children every 30 min" cron
example — the server pushes blocked/terminal notifications and owns
completion verification now.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
0 commit comments