diff --git a/docs/pr-media/1820/no-agent-cron-edit.png b/docs/pr-media/1820/no-agent-cron-edit.png
new file mode 100644
index 00000000..ffb1af9f
Binary files /dev/null and b/docs/pr-media/1820/no-agent-cron-edit.png differ
diff --git a/static/panels.js b/static/panels.js
index 0add57b8..76cfd2e7 100644
--- a/static/panels.js
+++ b/static/panels.js
@@ -422,6 +422,9 @@ function _renderCronDetail(job){
const schedule = job.schedule_display || (job.schedule && job.schedule.expression) || '';
const skills = Array.isArray(job.skills) && job.skills.length ? job.skills.join(', ') : '—';
const deliver = job.deliver || 'local';
+ const isNoAgent = !!job.no_agent;
+ const cronJobMode = isNoAgent ? 'no-agent' : 'agent';
+ const script = job.script || '';
const profileLabel = _cronProfileLabel(job.profile);
const profileTitle = _cronProfileTitle(job.profile);
const lastError = job.last_error ? `
${esc(t('error_prefix').replace(/:\s*$/,''))}
${esc(job.last_error)}
` : '';
@@ -450,6 +453,8 @@ function _renderCronDetail(job){
${esc(t('cron_next'))}
${esc(nextRun)}
${esc(t('cron_last'))}
${esc(lastRun)}
+
+ ${isNoAgent ? `No-agent script
${esc(script || '—')}
` : ''}
${esc(t('cron_profile_label') || 'Profile')}
${esc(profileLabel)}
${lastError}
@@ -685,6 +690,8 @@ function openCronEdit(job){
prompt: job.prompt || '',
deliver: job.deliver || 'local',
profile: job.profile || '',
+ no_agent: !!job.no_agent,
+ script: job.script || '',
isEdit: true,
});
if (!_cronSkillsCache) {
@@ -695,11 +702,12 @@ function openCronEdit(job){
loadCronProfiles().then(()=>_refreshCronProfileSelect(job.profile || '')).catch(()=>{});
}
-function _renderCronForm({ name, schedule, prompt, deliver, profile, isEdit }){
+function _renderCronForm({ name, schedule, prompt, deliver, profile, no_agent=false, script='', isEdit }){
const title = $('taskDetailTitle');
const body = $('taskDetailBody');
const empty = $('taskDetailEmpty');
if (!body || !title) return;
+ const isNoAgent = !!no_agent;
title.textContent = isEdit ? (t('edit') + ' · ' + (name || schedule || t('scheduled_jobs'))) : t('new_job');
const deliverOpt = (v,l) => ``;
body.innerHTML = `
@@ -714,9 +722,10 @@ function _renderCronForm({ name, schedule, prompt, deliver, profile, isEdit }){
${esc(t('cron_schedule_hint') || "Cron expression or shorthand like 'every 1h'.")}
-