tinyhumansai/openhuman · error
memory driver ` ` is not the embedded TinyCortex driver, so…
Error message
memory driver `{driver_id}` is not the embedded TinyCortex driver, so `{invocation}` is unavailable: it operates on the local embedded store directly, and this configuration bound a different driver. Run `openhuman subsystems` to see the bound driver, or change `[subsystems.memory] driver` in your config. What it means
legacy_client_verdict rejects CLI invocations that operate directly on the local embedded memory store when the bound driver's class is not Embedded. These legacy commands bypass the provider seam and touch the embedded engine's own storage, so running them against a module-backed or remote driver would read and write the wrong store; the gate fails fast instead. Like the capability gate it mirrors, an unresolvable binding defaults OPEN - denial here means a driver was actually bound and answered with a non-embedded class.
Solutions
- Run `openhuman subsystems` to confirm the bound driver id and class.
- Re-bind the embedded TinyCortex driver in `[subsystems.memory]` before using the legacy command.
- Or use the driver-agnostic invocation equivalent if one exists for the task.
Example fix
# before [subsystems] memory.driver = "module" # then a legacy embedded-store command is rejected # after [subsystems] memory.driver = "embedded" # legacy embedded-store commands allowed
Defensive patterns
Strategy: validation
Validate before calling
let (_id, class, _advertised) = resolve_bound_driver().unwrap();
if class != DriverClass::Embedded {
// legacy embedded-store command would be rejected - switch driver or skip Prevention
- Before running legacy embedded-store maintenance commands, confirm the bound driver class is Embedded.
- Keep maintenance scripts per-driver instead of assuming the default embedded binding.
- Use driver-agnostic invocations where they exist.
When it happens
Trigger: `[subsystems.memory] driver` points at a module-backed or otherwise non-embedded driver while the user runs a legacy client command that manipulates the embedded store directly (maintenance or repair-style invocations).
Common situations: Migrating a workspace from embedded to module memory and then re-running old maintenance commands; scripts written for the default embedded driver reused on reconfigured machines.
Related errors
- memory driver ` ` does not advertise the ` ` capability, so…
- At least one of --expression, --tz, --command, or --name…
- --auth-token must not be empty
- [claude-code] `claude` CLI at
- Failed to parse service CLI output as JSON
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/228af153f7d8c79f.
Report an issue: GitHub.
Appendix: source
Thrown at src/core/cli_capability.rs:214
capability_verdict(&driver_id, advertised, Some(required), invocation)
}
/// The pure verdict for the legacy-client gate: does the bound driver class
/// permit commands that operate on the embedded store directly?
///
/// Mirrors [`capability_verdict`]'s default-OPEN posture — `None` from the
/// caller means "no legacy gate applies", and an unresolvable binding has
/// already been defaulted-OPEN upstream by the caller skipping this entirely.
pub fn legacy_client_verdict(driver_id: &str, class: DriverClass, invocation: &str) -> Result<()> {
if class == DriverClass::Embedded {
return Ok(());
}
log::warn!(
"[cli][legacy-client-gate] rejected invocation='{invocation}' driver='{driver_id}' \
class={} — not the embedded engine",
class.as_str()
);
anyhow::bail!(legacy_client_unavailable_message(driver_id, invocation))
}
#[cfg(test)]
#[path = "cli_capability_tests.rs"]
mod tests;
View on GitHub (pinned to 7491200858)