zeroclaw-labs/zeroclaw · error · anyhow::Error
Cron job '{job_id}': shell_output_format is owned by config.
Error message
Cron job '{job_id}': shell_output_format is owned by config.toml for a declarative job, not the database What it means
Error "Cron job '{job_id}': shell_output_format is owned by config.toml for a declarative job, not the database" thrown in zeroclaw-labs/zeroclaw.
Source
Thrown at crates/zeroclaw-runtime/src/cron/store.rs:542
// Empty list means "clear the allowlist" (all tools available),
// not "allow zero tools".
if allowed_tools.is_empty() {
job.allowed_tools = None;
} else {
job.allowed_tools = Some(allowed_tools);
}
}
if let Some(uses_memory) = patch.uses_memory {
job.uses_memory = uses_memory;
}
if let Some(shell_output_format) = patch.shell_output_format {
// Config-owned (declarative) and non-shell (agent) jobs never store
// this field: the gateway API already rejects both cases, but this
// is the core boundary every caller of `update_job` goes through,
// so it must reject them too rather than silently ignoring or
// persisting a value execution never consumes.
if job.source == "declarative" {
anyhow::bail!(
"Cron job '{job_id}': shell_output_format is owned by config.toml for a \
declarative job, not the database"
);
}
if job.job_type != JobType::Shell {
let job_type: &str = job.job_type.into();
anyhow::bail!(
"Cron job '{job_id}': shell_output_format is shell-only and cannot be set on a '{job_type}' job"
);
}
job.shell_output_format = shell_output_format;
}
if schedule_changed {
job.next_run = next_run_for_schedule(&job.schedule, Utc::now())?;
}
with_initialized_connection(config, |conn| {View on GitHub (pinned to 88bb9c8533)
Solutions
- Set shell_output_format in config.toml for the declarative job and restart; it is not database-editable.
When it happens
Trigger: Thrown at crates/zeroclaw-runtime/src/cron/store.rs:542 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/6b8f4d63045918f0.
Report an issue: GitHub.