zeroclaw-labs/zeroclaw · error
Bridge app not found at {}. Run from zeroclaw repo root.
Error message
Bridge app not found at {}. Run from zeroclaw repo root. What it means
setup_uno_q_bridge with Some(host) deploys over ssh/scp from the bridge app directory at <CARGO_MANIFEST_DIR>/firmware/uno-q-bridge — a path baked in at compile time. This bail fires when that directory is absent on the machine running the command. As with the Nucleo firmware error, 'Run from zeroclaw repo root' is about having the repo content; the current working directory is irrelevant.
Source
Thrown at crates/zeroclaw-hardware/src/peripherals/uno_q_setup.rs:19
//! Deploy ZeroClaw Bridge app to Arduino Uno Q.
use anyhow::{Context, Result};
use std::process::Command;
const BRIDGE_APP_NAME: &str = "uno-q-bridge";
/// Deploy the Bridge app. If host is Some, scp from repo and ssh to start.
/// If host is None, assume we're ON the Uno Q — use embedded files and start.
pub fn setup_uno_q_bridge(host: Option<&str>) -> Result<()> {
let bridge_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.join("firmware")
.join("uno-q-bridge");
if let Some(h) = host {
if bridge_dir.exists() {
deploy_remote(h, &bridge_dir)?;
} else {
anyhow::bail!(
"Bridge app not found at {}. Run from zeroclaw repo root.",
bridge_dir.display()
);
}
} else {
deploy_local(if bridge_dir.exists() {
Some(&bridge_dir)
} else {
None
})?;
}
Ok(())
}
fn deploy_remote(host: &str, bridge_dir: &std::path::Path) -> Result<()> {
let ssh_target = validated_ssh_target(host)?;
println!("Copying Bridge app to {}...", host);View on GitHub (pinned to 88bb9c8533)
Solutions
- Run from a full zeroclaw git clone containing firmware/uno-q-bridge next to crates/zeroclaw-hardware
- Verify the path printed in the error exists and contains app.yaml; if not, restore the directory
- If executing on the Uno Q itself, call setup with host = None — that path writes embedded files and needs no repo directory
Defensive patterns
Strategy: validation
Validate before calling
let bridge = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.join("firmware").join("uno-q-bridge");
if host.is_some() && !bridge.exists() {
anyhow::bail!("full repo required at {} for remote deploy", bridge.display());
}
setup_uno_q_bridge(host)?; Prevention
- Run remote bridge deployment only from a full zeroclaw checkout
- The path is compile-time (CARGO_MANIFEST_DIR) — cwd changes cannot fix it
- Prefer host = None when already on the Uno Q; it uses embedded files
When it happens
Trigger: Running remote deployment from a prebuilt binary or a checkout without firmware/uno-q-bridge; the repo being moved or deleted after zeroclaw was built.
Common situations: Users installing a released binary and then trying the remote bridge setup; sparse or partial clones; running setup on a machine that has only the runtime, not the source tree.
Related errors
- Nucleo firmware not found at {}. Run from zeroclaw repo root
- Failed to create ArduinoApps dir on Uno Q
- Failed to copy Bridge app
- Failed to start Bridge app. Ensure arduino-app-cli is instal
- Uno Q host must contain at most one '@'
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/8e2b77c96cf2f4c4.
Report an issue: GitHub.