propose(agentic): narrated runs — live run-progress ledger + narration on the pause envelope
The model already narrates its intent in a text block before every tool call;
agentic_loop DISCARDED that prose on tool rounds. Now: (1) each loop round
appends {i, t: narration, tool} to state key run_progress_<sid>, reset at run
start, closed with {done:true}; (2) new GET /api/run-progress/<sid> returns the
ledger so clients poll live step updates during a run (the Cowork pattern,
no streaming needed); (3) tool_pending envelope gains a narration field;
(4) handle_config display default aligned to the intended product default
(claude-sonnet-4-5 silently became fresh-profile pickers' default).
Compiled proof for the running test bed:
neuron-container-build/soul-narrated-runs-20260713.patch (applies on top of
soul-webfix-20260711.patch); E2E-verified live: ledger filled DURING an agentic
run (narration + tool per round), safety-contact and workspace scoping intact.
Evidence for why: Tim's 2026-07-13 research run — 9 minutes of silence, then a
timeout banner, zero step visibility (compounded by the Haiku 4.5 incident
14:44-15:24 UTC same morning).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -46,7 +46,9 @@ fn handle_config(method: String, body: String) -> String {
|
||||
}
|
||||
}
|
||||
let current_model: String = state_get("soul_model")
|
||||
let display: String = if str_eq(current_model, "") { "claude-sonnet-4-5" } else { current_model }
|
||||
// Display fallback aligned with the intended product default (was claude-sonnet-4-5,
|
||||
// which silently became the app's picker default on fresh profiles — 2026-07-13).
|
||||
let display: String = if str_eq(current_model, "") { "claude-opus-4-8" } else { current_model }
|
||||
return "{\"model\":\"" + display + "\",\"ok\":true}"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user