Add selected-thread delivery and cron-to-heartbeat conversion for automations

Open 💬 6 comments Opened Jun 20, 2026 by parzival92
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Feature request

Recurring Codex automations should have an explicit option to deliver each run into one selected, persistent thread instead of creating a separate chat per run.

This issue is intentionally focused on delivery and conversion behavior. Automation-run cleanup and retention policies are covered by #29179.

Current behavior

  • A detached cron automation creates a separate chat for every run.
  • A thread heartbeat can continue in one chat, but this delivery choice is not clearly exposed when configuring a recurring automation.
  • An existing detached cron automation cannot be clearly converted to selected-thread delivery from the automation UI.

For a weekday morning brief, detached execution can create 15–20 separate chats each month even though the user wants one dedicated, scrollable “Morning Brief” conversation.

Requested behavior

Add automation delivery controls such as:

  • Delivery destination: New chat per run or Continue in selected thread.
  • A thread picker showing the selected destination thread.
  • An easy way to convert an existing detached cron automation to thread/heartbeat delivery without recreating the automation.
  • Preserve the automation’s schedule, prompt, enabled state, and history during conversion.
  • Show the delivery mode and destination in automation settings.

Example

A weekday morning brief should be able to:

  • run Monday–Friday at 8:00 AM;
  • append each result to one dedicated “Weekday Morning Brief” thread;
  • let the user scroll through prior briefs in that same conversation;
  • avoid creating a new sidebar chat for every run.

Related request

Cleanup and retention for outdated automation runs, including age-based archival/deletion, are tracked in #29179.

View original on GitHub ↗

6 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #29179
  • #28329
  • #28922

Powered by Codex Action

Necmttn · 29 days ago

Automation delivery should be a durable routing choice on the schedule. Store delivery mode, destination thread id, thread title, run id, last delivered message id, and conversion history from detached cron to selected-thread heartbeat.

Each run can then emit a receipt: created new thread, appended to selected thread, failed because destination missing, or rerouted by policy. That gives users one Morning Brief timeline without losing auditability for individual scheduled runs.

---

_Generated with ax._

TyronSamaroo · 29 days ago

Adding user-perspective signal. I have a persistent coordinator thread that I want scheduled checks to land in, instead of one new sidebar chat per run. The current split between detached cron and heartbeat makes the setup feel like an implementation detail.

For selected-thread delivery, the key requirements from my workflow are:

  • choose an existing destination thread;
  • keep the schedule, prompt, enabled state, and history while converting;
  • append a run receipt to the selected thread: run id, status, delivery target, timestamp, and failure reason if the destination is unavailable;
  • make the destination visible in the automation list/settings;
  • preserve per-run auditability even if the human reading surface stays in one timeline.

This would make weekday command-center style automations much easier to trust and maintain.

parzival92 · 26 days ago
Automation delivery should be a durable routing choice on the schedule. Store delivery mode, destination thread id, thread title, run id, last delivered message id, and conversion history from detached cron to selected-thread heartbeat. Each run can then emit a receipt: created new thread, appended to selected thread, failed because destination missing, or rerouted by policy. That gives users one Morning Brief timeline without losing auditability for individual scheduled runs. _Generated with ax._

@Necmttn I agree that delivery should be modeled as durable routing metadata on the automation/schedule, not as an implicit side effect of cron vs heartbeat. The receipt idea is especially important: each run should make it clear whether it created a new thread, appended to the selected thread, failed because the destination was unavailable, or was rerouted by policy.

parzival92 · 26 days ago
Adding user-perspective signal. I have a persistent coordinator thread that I want scheduled checks to land in, instead of one new sidebar chat per run. The current split between detached cron and heartbeat makes the setup feel like an implementation detail. For selected-thread delivery, the key requirements from my workflow are: choose an existing destination thread; keep the schedule, prompt, enabled state, and history while converting; append a run receipt to the selected thread: run id, status, delivery target, timestamp, and failure reason if the destination is unavailable; make the destination visible in the automation list/settings; * preserve per-run auditability even if the human reading surface stays in one timeline. This would make weekday command-center style automations much easier to trust and maintain.

@TyronSamaroo yes, this is the user-facing problem exactly. The important bit is that the “one Morning Brief timeline” should not come at the cost of auditability. I still want per-run history/status, but I don’t want every run to become a new sidebar conversation.

TC500 · 8 days ago

I hit exactly this problem with a real daily automation on Codex Desktop.

A daily skill-sync watch was configured as a detached cron job. Each run created a separate sidebar conversation, even though I wanted every result to append to one persistent, pinned thread.

Impact:

  • 48 automation conversations accumulated between late May and mid-July.
  • 44 duplicate conversations were still active in the main thread list.
  • Cleaning them up required archiving each thread through the app API.
  • Converting the automation required manually changing it from cron to heartbeat and assigning a target_thread_id.
  • The automation UI did not expose a reliable way to select the destination thread or convert the existing schedule.
  • The app automation update API also stalled during the attempted conversion.

This should be a first-class routing choice on every recurring automation:

  • New thread per run
  • Continue in selected existing thread

The destination should remain visible and editable, and conversion should preserve the schedule, prompt, enabled state, and run history.

Routing recurring background jobs back to a fixed channel/thread is a basic workflow in tools such as OpenClaw. Its absence makes migration to Codex much more difficult and creates substantial conversation-list clutter.