zeroclaw-labs/zeroclaw · error · anyhow::Error
Emergency stop is disabled. Enable [security.estop].enabled
Error message
Emergency stop is disabled. Enable [security.estop].enabled = true in config.toml
What it means
The emergency-stop subsystem is opt-in. `handle_estop_command` checks `config.security.estop.enabled` first and bails for every `zeroclaw estop` verb (engage, status, resume) when it is false, so a disabled e-stop can never be engaged or resumed by accident.
Source
Thrown at src/main.rs:6503
if total == 0 {
println!("{}", t("cli-plugin-migrate-none", "Nothing to migrate."));
}
Ok(())
}
},
}
}
#[cfg(feature = "agent-runtime")]
fn handle_estop_command(
config: &Config,
estop_command: Option<EstopSubcommands>,
level: Option<EstopLevelArg>,
domains: Vec<String>,
tools: Vec<String>,
) -> Result<()> {
if !config.security.estop.enabled {
bail!("Emergency stop is disabled. Enable [security.estop].enabled = true in config.toml");
}
let config_dir = config
.config_path
.parent()
.context("Config path must have a parent directory")?;
let mut manager = security::EstopManager::load(&config.security.estop, config_dir)?;
match estop_command {
Some(EstopSubcommands::Status) => {
print_estop_status(&manager.status());
Ok(())
}
Some(EstopSubcommands::Resume {
network,
domains,
tools,
otp,View on GitHub (pinned to 88bb9c8533)
Solutions
- Add `enabled = true` under `[security.estop]` in the config file ZeroClaw actually loads (check the path with `zeroclaw config get config_path`) and restart
- If OTP-protected resume is also wanted, set `require_otp_to_resume = true` and enable `[security.otp]` at the same time
- Confirm the subsystem answers with `zeroclaw estop status`
Example fix
# before [security.estop] # section absent, or enabled = false # after [security.estop] enabled = true
Defensive patterns
Strategy: validation
Validate before calling
[ "$(zeroclaw config get security.estop.enabled 2>/dev/null)" = "true" ] || {
echo "e-stop disabled in the active config; refusing to run the drill"; exit 1;
} Prevention
- Enable `[security.estop] enabled = true` in the base config template, not per-machine edits
- Include `zeroclaw estop status` as a deploy smoke test
- Pin the config path (--config or env) in scripts so you never read a stale file
When it happens
Trigger: Any `zeroclaw estop ...` command — including `zeroclaw estop status` — while the active config.toml lacks `[security.estop] enabled = true` (the default is false).
Common situations: Fresh installs where estop was never enabled; disabling estop after testing and forgetting to re-enable; editing a different config.toml than the one ZeroClaw loads (custom --config path or environment override).
Related errors
- security.estop.require_otp_to_resume=true but security.otp.e
- runtime.wasm.tools_dir must not contain '..' path traversal
- config at {} does not deserialize strictly; the resilient lo
- --domain/--tool are only valid with --level domain-block/too
- --domain/--tool are not valid with --level network-kill
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/1a6e0a0c730a1040.
Report an issue: GitHub.