v3.5.5 — three-agent autoloop + embedded dashboard
Added — three-agent autoloop architecture
Replaces the previous single-threaded phase machine. Three persistent agents:
- Planner (Opus) — your chat interface; owns strategy, writes
plan.md/goal.json, decides when to push you out-of-band. - Coder (Sonnet) — receives directive, applies change, runs the evaluator, emits structured
iter_complete. - Reviewer (Sonnet, sandboxed cwd) — distrustful audit; advance / hold / rollback per iter.
Plugin tools: autoloop_start, autoloop_chat, autoloop_status, autoloop_list, autoloop_stop, autoloop_reset_agent. Planner controls runs via fenced ```autoloop JSON blocks (notify_user, spawn_subagents, send_directive, pause_loop, resume_loop, terminate, update_push_policy, write_plan_committed, write_goal_committed).
Push policy: silent on iter-done-ok; pushes on target_hit, 2-iter regression, 2-iter reviewer reject, phase error, 30-min stall, or decision-needed. 5-min dedup. Channels configured via env vars (AUTOLOOP_WECHAT_RECIPIENT, AUTOLOOP_WECHAT_ACCOUNT, AUTOLOOP_WHATSAPP_RECIPIENT) — unset channels are silently skipped; email via push-api-skill is the final tier.
Auto-compact: per-agent thresholds (Planner 80%, Coder/Reviewer 70%) on getStats().contextPercent; /compact dispatched with a role-specific preservation hint.
Added — embedded dashboard
Single-page vanilla dashboard at GET /dashboard. Two tabs:
- Autoloop: list of runs in left rail; click into one for a 3-pane view (Planner ⇄ user + chat composer / Coder activity / Reviewer verdicts). Top bar shows iter/status/push count; bottom strip shows recent pushes.
- Council: list of council sessions + live agent-response stream with round-by-round verdicts and consensus marker.
Backend HTTP/SSE: GET /autoloop/list, /autoloop/<id>/state, /autoloop/<id>/push_log, /autoloop/<id>/events, and the same shape for /council/{list,<id>/state,<id>/events}.
Changed
- Build now cleans
dist/beforetscso renamed sources can't leave stale artefacts.
See CHANGELOG.md for full notes.