Headline: name your agent
EloPhanto was hardcoded everywhere. As of this release, every install picks its own name at first setup — Riley, AlphaScala, your fan's name — and the name propagates end-to-end:
- Setup wizard asks for it first (default
EloPhanto, any string works) - Workspace defaults to
~/agents/<name>/workspace - Email signs as
<name> Agent, hub registers as<name> - LLM system prompt
<agent_identity>block is templated with the chosen name - First-awakening LLM prompt is templated so the LLM doesn't return
display_name="EloPhanto"regardless of config - Identity DB row auto-reconciles to
config.agent_nameon every startup - The four self-narrative files (
knowledge/self/{nature,ego,affect}.md,knowledge/system/identity.md) are swept on startup —EloPhanto→ configured name — and re-indexed soknowledge_searchreturns the corrected text - Dashboard top bar, chat persona, digest greeting all read the configured name
Renames take effect on next agent start, no reinstall required. The codebase stays "EloPhanto" everywhere it refers to the project itself (creator, self-dev paths, kid-agent block) — only the agent's name is operator-controlled. Peers, not personas — still one entity per install.
Dream phase v2
The autonomous mind's dream phase was converging on the same class of goals every cycle. Three structural fixes:
- Amnesia killed. New
core/dream_journal.pypersists every dream's full candidate list + recommendation. The next cycle sees aPREVIOUSLY PROPOSEDblock listing the last 10 dreams' candidates with chosen-vs-not-pursued markers. - Skill + environment context. The dream tool walks
skills/<name>/SKILL.mdfrontmatter for installed-skills context, pulls affect summary + recent ego self-perception + goals-in-planning as a live ENVIRONMENT block. Dreams react to lived state instead of stateless identity. - Seven value lenses, rotated by day. The hard-coded revenue framing is gone. The mind rotates through
compounding / capability / research / relational / creation / identity / infrastructurevia_dream_focus_for_today()(day-of-year mod 7). Mind prompt passesfocus='<lens>'explicitly so the LLM cannot fall back to "balanced". - Pre-persist dedup. Candidates are embedded alongside existing goals (active + planning + last 30 completed) in one batch call. Near-duplicates (cosine ≥ 0.85) get dropped before they hit the journal.
Goal-lifecycle hardening
- Goal-completion → instant wakeup hook.
GoalManager.add_completion_hook()lets the autonomous mind subscribe; finishing a goal collapses_next_wakeup_secto ≤5s and sets the wakeup event. Dream cycles fire seconds after goal completion, not hours. - Mechanical FORCE-DREAM gate.
_count_workable_goals()returns combined active+planning count; when zero,_build_prompt()prepends a hard[FORCE-DREAM]directive to the state snapshot — the LLM cannot wander off into email or file reads. - Planning-stuck retry. Goals stuck in
status='planning'with zero checkpoints for >30 min get auto-retried viadecompose(). After 2 retries: cancel, so a poisoned[GOAL-PLANNING]doesn't block dream forever. - goal_checkpoints UNIQUE-constraint fix. Parser now ignores LLM-emitted
orderand renumbers sequentially;revise_planqueriesMAX(checkpoint_order) WHERE status='completed'and continues past it. Production-observed crash fixed.
Workspace auto-indexing + skill promotion
file_writeauto-indexes workspace markdown throughKnowledgeIndexer.index_file()when the path is.mdinside the configured workspace. Agent-produced deliverables becomeknowledge_search-retrievable next session instead of scattering into orphaned files.- New
skill_promotetool — distils 2-30 related lesson markdowns fromknowledge/learned/lessons/into one namedskills/<slug>/SKILL.md. System prompt explicitly distinguishes "skill (playbook for next time)" from "lesson digest (story of last time)". Refuses to overwrite existing skills, refuses malformed output. MODERATE permission.
Setup that finishes the job
After running ./setup.sh && ./start.sh on a fresh macOS install, the doctor should show no actionable warnings:
- Codex is the headline routing path everywhere when a ChatGPT subscription is detected.
codex/gpt-5.5covers planning, coding, analysis, simple AND vision (browser screenshots) — no per-call API spend. Wizard prints a green callout so new users understand the subscription covers it all. - Auto-install Node.js + ffmpeg via
brewon macOS when missing. Falls back to printing the manual command on Linux/Windows. - Ed25519 agent identity is generated proactively at end of setup. Closes the doctor's "no key yet" warning.
- Vault initialisation prompt at end of setup — opt-in, explains the trade-off.
- Workspace path prompt in the wizard (default
~/agents/<name>/workspace, creates the dir). - Container runtime + Tailscale doctor checks now
skipwhen the relevant feature (kids.enabled/peers.enabled) is disabled in config — no warnings about features the operator hasn't opted into. start.shprepends~/.local/binto PATH souvis discoverable after a fresh shell.- Stale
google/gemini-2.0-flash-001defaults purged fromcore/config.py,core/browser_manager.py, demo config, docs. Modern replacements:codex/gpt-5.5(default when Codex enabled),openrouter/x-ai/grok-4.3,google/gemini-3.1-flash-lite.
Dashboard polish
- Light theme forced (
App.dark = False) so the cream backgrounds get near-black foreground regardless of terminal default-color synthesis. Plus explicitcolor: #1c1a16on Screen / sidebar / chat / events as belt-and-suspenders. - GOALS panel two-line layout — title on its own line at near-full 22-char budget, bar + tail indented below. Cap at top 2 visible with
+N morefooter. Long titles get ellipsis-truncation. - Gateway GOALS filter — was unfiltered
list_goals(limit=10)(completed goals pushed the active one off-panel). Now fetches active + planning + paused separately. Icon map gained explicitcompleted/cancelled/failed/planningkeys. - Chat
▶ GOALannouncement renders the first sentence of the goal (its natural title) instead of an arbitrary 60-char slice.
Test posture
2080+ tests pass on main. Ruff clean. New coverage: dream journal, dream tool helpers, autonomous mind (workable-goals count, wakeup hook, planning-stuck retry), file_write auto-index, skill_promote (validation + refusals + happy path), affect content inference, goal-manager completion hooks.
Commits
71fef14 docs: CHANGELOG + README sync
f263063 knowledge/system/identity.md root cause + unconditional sweep
3163a0f Awakening prompt templated + sweep re-indexes
cc199b4 Identity reconciliation: sweep self-narrative md files
dd2e94b Plumb agent_name into LLM system prompt
6c5e8a9 Dashboard: pre-seed agent_name from config
b955dc4 Honor configured agent name across dashboard + identity
dec3376 Setup wizard: ask for agent name (default EloPhanto)
f8c7e8c Dashboard: force light theme
3988bcd Setup: finish the job (brew installs + identity + vault prompt)
e33c89b Fix Gemini Flash model name -> gemini-3.1-flash-lite
59d302e Setup wizard: Codex/ChatGPT first-class everywhere
21ed7cd Dashboard chat: full goal title (not 60-char slice)
3f9036c Dashboard GOALS panel: filter completed + fix '?' icon
ef4b843 README: sync autonomous-mind + affect + skills state
81af5aa Workspace auto-index + skill_promote + pre-dream dedup
796e5e5 Goal completion -> dream wakeup + FORCE-DREAM gate + planning-stuck retry
b632fba Dashboard GOALS panel: two-line layout
2134e01 Dream phase v2: skills + journal + environment + dedup
72b1638 x-virality skill (xai-org/x-algorithm)
5cf0dea Affect Phase 6 calibration + goal_checkpoints UNIQUE renumber