zeroclaw-labs/zeroclaw · error
Failed to start Bridge app. Ensure arduino-app-cli is instal
Error message
Failed to start Bridge app. Ensure arduino-app-cli is installed on Uno Q.
What it means
deploy_remote finishes by running `arduino-app-cli app start ~/ArduinoApps/uno-q-bridge` over ssh and bails when it exits non-zero. The copy succeeded; starting the app on the board failed — most often because the arduino-app-cli runtime is not installed on the Uno Q, which the message calls out.
Source
Thrown at crates/zeroclaw-hardware/src/peripherals/uno_q_setup.rs:72
.context("scp failed")?;
if !status.success() {
anyhow::bail!("Failed to copy Bridge app");
}
println!("Starting Bridge app on Uno Q...");
let status = Command::new("ssh")
.args([
"--",
&ssh_target,
"arduino-app-cli",
"app",
"start",
"~/ArduinoApps/uno-q-bridge",
])
.status()
.context("arduino-app-cli start failed")?;
if !status.success() {
anyhow::bail!("Failed to start Bridge app. Ensure arduino-app-cli is installed on Uno Q.");
}
println!("ZeroClaw Bridge app started. Add to config.toml:");
println!(" [[peripherals.boards]]");
println!(" board = \"arduino-uno-q\"");
println!(" transport = \"bridge\"");
Ok(())
}
fn validated_ssh_target(value: &str) -> Result<String> {
let mut parts = value.split('@');
let first = parts.next().unwrap_or_default();
let second = parts.next();
if parts.next().is_some() {
anyhow::bail!("Uno Q host must contain at most one '@'");
}
let (user, host) = match second {View on GitHub (pinned to 88bb9c8533)
Solutions
- Run it by hand to see the real output: `ssh arduino@<host> 'arduino-app-cli app start ~/ArduinoApps/uno-q-bridge'`
- If the command is not found, install arduino-app-cli on the Uno Q
- If the CLI exists, rerun the setup to re-copy a complete app directory over the corrupt partial copy
Defensive patterns
Strategy: try-catch
Validate before calling
let probe = std::process::Command::new("ssh")
.args(["--", &format!("arduino@{host}"), "command", "-v", "arduino-app-cli"])
.output()?;
if !probe.status.success() {
anyhow::bail!("arduino-app-cli missing on {host}; install it before deploy");
} Try / catch
match setup_uno_q_bridge(Some(host)) {
Err(e) if format!("{e}").contains("Failed to start Bridge app") => {
// ssh in and run `arduino-app-cli app start ~/ArduinoApps/uno-q-bridge`
// manually to see the real error, then re-deploy a clean copy
}
rest => rest,
} Prevention
- Install arduino-app-cli on the Uno Q before first deploy
- Pre-check `command -v arduino-app-cli` over ssh as part of your deploy script
- Re-run the full setup after failures so the app directory is complete
When it happens
Trigger: setup_uno_q_bridge(Some(host)) onto a board without arduino-app-cli; the copied app directory incomplete or invalid (missing app.yaml); the app starting then exiting immediately with its own error, surfaced through the ssh exit code.
Common situations: New Uno Q boards shipped without the app runtime; an interrupted earlier deploy leaving a half-written app directory; app.yaml referencing missing sketch/python files.
Related errors
- Failed to create ArduinoApps dir on Uno Q
- Failed to copy Bridge app
- Bridge app not found at {}. Run from zeroclaw repo root.
- Uno Q host must contain at most one '@'
- Invalid Uno Q SSH user: use only ASCII letters, digits, '.',
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/9a4e730d91cfe7b0.
Report an issue: GitHub.