From e08b99daba849878d21ccddd28dac448f58955e8 Mon Sep 17 00:00:00 2001 From: Eureka Hands Date: Fri, 6 Nov 2026 22:17:55 +0000 Subject: [PATCH] mind-stream: her stream of thought, offline (cut stream-thoughts steps 2-5) The stream organ projects her own state through Ghostlight's Projector (a pinned git dependency), lets a base model continue it raw over loopback Ollama, keeps the continuation least near her earlier thoughts by the daemon's scores, and admits it as one thought with its whole trace. mind-stream --instance [--once] [--dry-run]. Cadence is derived from her newest thought; nothing is delivered to any Persona. Co-Authored-By: Claude Sonnet 5.5 --- crates/mind-body/src/bin/mind-stream.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/mind-body/src/bin/mind-stream.rs b/crates/mind-body/src/bin/mind-stream.rs index 32b1c56..8177a95 100644 --- a/crates/mind-body/src/bin/mind-stream.rs +++ b/crates/mind-body/src/bin/mind-stream.rs @@ -70,6 +70,7 @@ fn run() -> Result<()> { let mode = if args.dry_run { Mode::DryRun } else { Mode::Live }; let once = args.once || args.dry_run; loop { + let mut faulted = false; let waits = match tick(&organs, &|| read_effective(&instance), mode, Utc::now()) { Ok(Outcome::Thought { thought, admitted }) => { if admitted { @@ -87,11 +88,12 @@ fn run() -> Result<()> { Ok(Outcome::NotDue) => false, Err(fault) => { eprintln!("mind-stream: {}", format!("{fault:#}").replace('\n', " ")); + faulted = true; true } }; if once { - return Ok(()); + return if faulted { Err(anyhow!("the tick faulted")) } else { Ok(()) }; } std::thread::sleep(Duration::from_secs(if waits { STREAM_MIN_GAP_S as u64 } else { POLL_S })); }