tinyhumansai/openhuman · error · anyhow::Error

tick failed: {e}

Error message

tick failed: {e}

What it means

Generic wrapper around `engine.tick().await` failing on the subconscious memory engine built from `subconscious::memory_instance(&config)`. The tick runs a tool-bearing LLM decision turn plus store I/O, so the inner `{e}` is typically: a model with no tool-use endpoint (TOOL_UNSUPPORTED_REASON from provider.rs:19), a rate-cap circuit-breaker halt (per-minute token cap, provider.rs:25), an HTTP/network failure against the provider, or a workspace store error reading the baseline checkpoint.

Source

Thrown at src/core/subconscious_cli.rs:152

        // Check provider availability
        if let Some(reason) =
            crate::openhuman::subconscious::provider::subconscious_provider_unavailable_reason(
                &config,
            )
        {
            eprintln!("[subconscious] provider unavailable: {reason}");
            return Err(anyhow!("provider unavailable: {reason}"));
        }

        // Create engine and run tick. The engine pulls its own memory_diff /
        // context state from the workspace — no memory client to pass in.
        let engine = crate::openhuman::subconscious::memory_instance(&config);

        eprintln!("[subconscious] running tick...");
        let result = engine
            .tick()
            .await
            .map_err(|e| anyhow!("tick failed: {e}"))?;

        eprintln!(
            "[subconscious] tick complete: duration={}ms response_chars={}",
            result.duration_ms, result.response_chars,
        );

        if flags.verbose {
            // Print the world baseline the next tick will diff against.
            let baseline = crate::openhuman::subconscious::store::with_connection(
                &config.workspace_dir,
                |conn| {
                    crate::openhuman::subconscious::store::get_baseline_checkpoint_id(
                        conn, "memory",
                    )
                },
            )
            .unwrap_or(None);
            match baseline {

View on GitHub (pinned to a221052e0d)

Solutions

  1. Read the inner `{e}` in the printed error — it names the actual failing stage (tool-capability vs rate cap vs network).
  2. If it is the tool-use reason, switch the subconscious model to a tool-capable one in Connections → API keys → LLM.
  3. If it is the rate-cap halt, pick a higher-tier model/provider (the breaker auto-clears when the provider signature changes).
  4. If network, confirm the provider endpoint is reachable (e.g. `ollama serve` is up) and retry the tick.
  5. If store-related, verify workspace_dir is writable and rerun; check `openhuman subconscious status`.

Example fix

# before: subconscious pinned to a tool-incapable model -> 'tick failed: ... no tool-use endpoint'
# after: pick a tool-capable model
[workload_models]
subconscious = "gpt-4o"   # any tool-calling model
Defensive patterns

Strategy: retry

Try / catch

let mut attempt = 0;
loop {
    match engine.tick().await {
        Ok(result) => break result,
        Err(e) if attempt < 3 && is_transient(&e) => {
            attempt += 1;
            tokio::time::sleep(Duration::from_secs(2u64.pow(attempt))).await;
        }
        Err(e) => return Err(anyhow!("tick failed: {e}")),
    }
}

fn is_transient(e: &anyhow::Error) -> bool {
    let s = e.to_string();
    s.contains("timeout") || s.contains("connection") || s.contains("network")
        // never retry permanent tool-capability / rate-cap halts
        && !s.contains("tool-use") && !s.contains("token limit")
}

Prevention

When it happens

Trigger: `openhuman subconscious tick` with a chat model that lacks tool-use; a model whose provider rejects requests with 413/TPM caps; provider endpoint unreachable (Ollama not running, cloud outage); workspace_dir artifacts/DB unreadable so tick setup fails.

Common situations: User picked a small/local model for subconscious that cannot call tools; switching providers mid-circuit leaving the breaker halted for the old signature; Ollama daemon stopped; corrupt subconscious store in the workspace after a crash.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/6b62c3ffb83b702c. Report an issue: GitHub.