v2026.05.31.3 — mind visibility + arbiter starvation fix + strategy registry awareness
Substantive patch on top of v2026.05.31.2 — seven coordinated fixes around the autonomous mind's visibility and decision-making.
Dashboard: see what the mind is actually doing
Three layered improvements turn the TUI's empty whitespace into a real narrative:
-
Chat-shaped mind feed in the center area. Each tool call renders as a verb-first line (
Wrote …/research/brief.md,Searched memory for: recent X reply lessons,Switched to role sales) with the artifact preview quoted underneath — first paragraph or headline of whatever the agent wrote. Operators can see BOTH process and outcome without leaving the dashboard. -
Cycle banner shows intent. Was:
mind cycle #6 — waking to think. Now:cycle #6 · advancing goalwith the action_spec the arbiter ranked top: "Map X conversation landscape — checkpoint 2/12 of 'Make X the primary brand-voice proving ground…'". Verb-first source labels (advancing goal,switching role,building capability,productizing company, etc.) so the operator parses at a glance. -
Sidebar hydrates immediately. The MIND panel used to read
? unknownfor the first 4 minutes after restart even when autonomous mode was on. Now hydrates from the connect-time dashboard snapshot AND from a new MIND_RESUMED broadcast on start — covers both auto-start and runtime enable paths.
Arbiter: stop role-rotation starvation
Production log review showed 9.5h of autonomous mode producing zero artifacts — every cycle picked "switch to SUPPORT role" (meta-action) over real work like "build the missing tool that unblocks 10 strategy tactics." Two compounding bugs in from_role_neglect:
expected_value=4.5treated a pure role-switch as real work. Dropped to2.5— role rotation stays in the menu but below candidates with concrete output.kpi_gap=1.0for never-activated roles inflated their score by +4. Actuals were 0 because the role hadn't RUN, not because it was failing targets. Pinned to 0 for never-active roles; gap becomes meaningful only after the role accumulates real ledger data.
Net effect: never-active SUPPORT scores ~3.97 (was 9.71). Real work (buildable_blocker ~7.4, unproductized_company ~8.3) wins.
Bonus: file_write + file_read added to the role-gate exemption — every role needs to write its own scratchpad.
Strategy: stop hallucinating tool names
The autonomous mind kept trying to self_create_plugin(goal='build x_post_and_reply') when twitter_post + twitter_reply already shipped. Root cause: the strategy LLM (company_plan) was called with NO awareness of the live tool registry — the prompt literally said "list tool_requirements; for each, propose self_create_plugin." So it invented capability names that "sounded right."
Two-layer fix:
-
Registry injection into the strategy prompt.
CompanyPlanToolnow passes the live[(name, description), ...]list tobuild_system_prompt, which renders a "TOOLS ALREADY AVAILABLE (use these EXACT names)" block. Instruction tightened: "ONLY list tools NOT in the registry. Use snake_case matching the registry's naming convention (twitter_postnotx_post_and_reply)." -
Alias map for legacy blockers (
core/strategy._TOOL_ALIASES). Pre-existingblockers.yamlfiles already contain hallucinated names.auto_resolve_blockersnow consults an alias map after exact-match miss — a blocker requiringx_post_and_replyresolves when BOTHtwitter_postANDtwitter_replyare registered.
ABE: skip the agent's own meta-company
The mind picked "Company elophanto-self is productized but has no active strategy" as cycle #1's top candidate, beating the real ABE (alphascala) with 22 actual blockers. elophanto-self is the agent's identity row, not a business to autonomously drive. New _is_self_company() helper in core/mind_candidates.py skips it in all 5 ABE-work generators (from_unproductized_companies, from_voiceless_companies, from_unplanned_companies, from_blocked_strategy_days, from_buildable_blockers).
Upgrading
./update.sh
./start.sh --web # restart so all the dashboard hydration + arbiter changes take effect
After restart:
- MIND sidebar shows
runningfrom the first frame (not after 4 min) - Cycle banner shows
cycle #N · <intent>with the arbiter's top action_spec - Tool calls show
Wrote …/path.md+ the file's first paragraph quoted - Mind stops picking SUPPORT role-switches over real work
elophanto-selfnever appears in ABE-work candidates- New
company_planruns (re-run for existing companies if you want fresh strategies) won't hallucinate tool names - Existing
x_post_and_reply-style blockers auto-resolve on the next sweep
Everything in v2026.05.31 + v2026.05.31.1 + v2026.05.31.2 is included.
Full diff: v2026.05.31.2...v2026.05.31.3