Join the older storage and authority audits to the SAF principal contract. Passwd entries are not isolation while one human-owned process still executes every agent, and the existing souveraine account is machined's—not Souvie's.\n\nKeep the readiness task honest: its current health fields inventory paths, but do not yet prove admission or the UID handling a live turn.
6.5 KiB
| task_id | title | status | assignee | priority | phase |
|---|---|---|---|---|---|
| alpha-readiness-001 | Alpha-Tester Readiness — Close the "it builds" / "a stranger can use it" gap | partial | high | readiness |
Task: Alpha-Tester Readiness
Origin
Ani's own alpha-tester critical-path assessment (May 18, 2026), plus two TUI gaps Casey flagged alongside it. The codebase is ~13K lines, ~150 tests pass, clean compile — but there is a real gap between "it builds" and "a stranger can run it."
Resolved decision (May 18, 2026) — onboarding is the first-run wizard
The confusion between souveraine init and the TUI setup wizard is settled:
onboarding is the first-run TUI wizard. init is demoted to a scriptable
config-template writer.
The setup wizard (ui/setup.rs) already is the first run: souveraine tui
on a fresh install routes through core::bootstrap::BootstrapPlan →
SetupWizard (the FreshInstall flow) — Bifrost config, model picker, agent
name, agent creation. souveraine init was a partial duplicate.
Done (Part A): run_init no longer pretends to onboard. It writes the
souveraine.toml template and points at souveraine tui. The interactive
Bifrost-key prompt was dropped (the wizard owns credentials). Command help
updated.
Remaining (Part B) — make the wizard a complete onboarding:
The wizard collects bifrost_url + key + model but the loop is not closed:
finish_setup(ui/app.rs) buildsLocalBackend::new(self.config…)from the in-memory config — it ignores thebifrost_url/key the wizard just collected. Wire the wizard's Bifrost values into the config used for agent creation.- Nothing persists
souveraine.toml. The wizard must write the config file on completion so the next launch isReadywith real Bifrost settings — not anotherFreshInstall. Decide the write location (CWD vs a stable path; seeConsciousnessConfig::discover_path()). - Store the Bifrost key in the OS keyring from the wizard (as the old
interactive
initdid).
Once Part B lands, the first-run circle is fully closed: souveraine tui on a
bare machine → wizard → working agent + persisted config, no CLI dance.
Hard Blockers — LAN-bound defaults ✅
Bifrost defaults point to Casey's LAN
default_bifrost_url() returns http://10.10.20.120:3360 — Casey's internal
gateway. An alpha tester needs either their own Bifrost / OpenAI-compatible
endpoint configured, or the local/in-process backend to work with a direct
provider (it currently always routes through Bifrost).
Landed in 01b3d0e: All LAN IPs stripped from code, defaults, config
template, doc comments. Replaced with 127.0.0.1 or empty placeholders.
Voice config also points to Casey's LAN
stt_url defaults to http://10.10.20.19:7862, tts_url to :7861. Gated
behind voice.enabled = false, so it won't crash — but a tester who flips
voice on hits a silent failure.
Landed in 01b3d0e: Defaults changed to 127.0.0.1.
Soft Blockers — work, but feel broken
-
No onboarding flow. The TUI has a
Setupscreen (ui/setup.rs, ~1033 lines) with a wizard — model picker, agent import, text input. But the CLIsouveraine initdoesn't offer to enter it, andsouveraine inithits the no-agent error before the TUI ever loads. -
No
souveraine.tomltemplate in the repo.CONFIG_TEMPLATEinmain.rsis written byinit, but there's no example file a tester can read before running the binary. The README'ssouveraine.tomlreference is minimal. -
Config validation absent. A fat-fingered TOML (wrong model name, missing Bifrost URL) surfaces as a cryptic parse failure or a streaming error mid-conversation — not a friendly "I can't reach your Bifrost at that URL."
-
$MEMORY_DIRstale-host override. An alpha tester who inherited$MEMORY_DIRfrom Letta-era config sees the wrong path in agent tools. Fixed in this batch:for_agent()now strips stale host env vars before injecting agent-specific values. -
Tool posture visibility. No glanceable indicator of whether tool gestures are expanded (
/code) or folded (/chat). Fixed in this batch: header bar shows[tools shown]/[tools folded]. -
Agent Health screen. Settings Agent category had no diagnostic info — no agent ID, subconscious pairing, filesystem layout. Fixed in this batch: read-only fields for agent id, subconscious id, memory/subconscious paths, disk existence check.
This is inventory health, not identity health. It still does not say whether the agent has a node-local Unix account or whether the live turn and its tools are running as that account instead of the human. The living acceptance contract is
../../../../souveraine/saf/identity/02-agent-principal.md: missing admission isunadmitted; uid-1000 execution isacting-as-human, never green.
TUI Interaction Gaps (flagged by Casey, May 18)
These also block a comfortable first session — they match open entries in the
subconscious's ledger/commitments.md:
- Click-to-copy is broken. Added in commit
8d393bf; does not work. - Scrolling is a gap. Scroll-wheel events are not handled — the user is stuck with arrow keys. Casey prefers the scrollwheel.
(See also docs/tasks/tui-message-interactions.md and
docs/tasks/chat-viewport-scroll-clip.md.)
What Already Works
- CLI ergonomics —
souveraine --helpis well-written. - The TUI, once running, is genuinely strong: chat bubbles, tool cards, cockpit panel, portrait, presence, schedules editor.
- Federation transport — built end-to-end (all 8 phases).
- Compaction, reflection, archivist, skills, subconscious inbox — wired and tested.
The Delta to Alpha-Ready — roughly two focused sessions
- Bootstrapping.
souveraine initcreates an agent with a seed identity and minimal memfs — orsouveraine chatautocreates one if none exists. Highest leverage; do this first. - Config portability.
souveraine initprompts for (or accepts flags for) Bifrost URL and API key at minimum, and writes them into the TOML. The generated template should carry comments explaining each section. - First-run TUI. After
souveraine init,souveraine tuishould land in the setup wizard and tell the tester what to configure.
Notes
- Blockers 2 and 3 (LAN defaults) overlap with the secrets-rotation note in
CLAUDE.md— Casey is aware the Bifrost token ships insouveraine.tomlandconfig.rs. Portability and de-LAN-ing the defaults should land together before any public push.