OpenWork · Scheduled Tasks
Draft proposal · complete experience

Scheduled work that stays reviewable, bounded, and honest.

First-class Scheduled Tasks let a user describe recurring agent work, review the exact task and authority, test it in a fresh session, enable it, inspect durable results, repair denied access, and pause it—without turning OpenWork into a general workflow platform.

◷ Scheduled tasks run while OpenWork is running.
22 / 22visual evidence frames passed
7 / 7end-to-end journey steps passed
319e15bd3exact captured revision
Draftnot manually confirmed by requester

The product promise

OpenWork owns scheduling, authority, persistence, claims, receipts, and user experience. The agent engine is a replaceable execution adapter that receives only the reviewed request.

1

Propose, never silently activate

Chat and the form create a disabled draft. Neither may approve authority, widen access, or enable execution.

2

Review definition and authority separately

One immutable task revision and one immutable grant revision are bound to every unattended run.

3

Deliver normal OpenWork results

Every attempt creates a fresh session, durable receipt, timeline, bounded usage, and verified artifact references.

Ownership and execution path

User

Describe or edit

Exact prompt, workspace, schedule, timezone, model, timeout.

OpenWork

Persist revision

Disabled draft with five-occurrence preview.

Owner

Review grant

Roots, capabilities, filesystem, ceiling, fixed denials.

Scheduler

Claim once

Atomic occurrence identity, no overlap, bounded retry.

Adapter

Fresh session

Normalized status, cancellation, artifacts, honest terminal outcome.

Deliberate boundary: no cloud scheduler, OS background daemon, or closed-app execution is claimed. The running-app limitation appears in creation, detail, and every list card.

The complete journey

Every frame below came from the real Hub-isolated Electron app against the exact revision above. Select any image to inspect it at full resolution.

1

Discover and create

2

Review and authorize

3

Test, inspect, and receive results

4

Fail closed, repair, resume, and pause

Every state and control

The primary journey proves the critical transitions. The complete product contract also defines the non-happy-path states and recovery behavior below.

StateWhat the user seesAllowed recovery / actionEvidence
LoadingDedicated loading copy while capabilities, list, or detail resolve.Wait; no unsafe optimistic controls.UI contract
UnavailableServer upgrade/restart or connection guidance when Scheduled Tasks are unsupported.Reconnect, upgrade, or restart the owning server.UI contract
Inaccessible workspaceHonest workspace access error; no execution.Restore workspace/connection access.Server + UI contract
EmptyNatural creation entry and running-app limitation.New Scheduled Task or chat proposal.Frame 01
Draft / disabledExact definition, five occurrences, Run once/Enable disabled until grant review.Edit, duplicate, delete, review authority.Frames 04–07
Stale / review requiredAn edit made elsewhere or a new revision invalidates prior review.Refresh, inspect latest revision, review again.Revision contract
Reviewed / readyReviewed grant badge; task remains disabled.Run once, enable, revoke authority.Frame 08
Enabled / upcomingPrecise next run, schedule preview, Pause and Run once.Wait, test manually, edit, pause, revoke.Frames 12, 16
Queued / running / retryingTrigger, live status, attempt count, bounded usage, revision binding, timeline, Cancel run.Cancel; scheduler prevents overlap.Frame 09
Needs attentionTask-level alert, run receipt error, notification, no inherited approval.Repair workspace/capability/grant, review, Resume—or Pause.Frames 17–20
PausedNo next run is claimed; Run once and Resume remain explicit.Resume after review or keep paused.Frames 21–22
CompletedDuration, attempts, bounded usage, revision and idempotency binding, session, artifact, timeline.Open session/artifact; run again.Frames 10, 13–15
Failed / cancelled / ambiguousTyped, bounded terminal error; ambiguous outcomes remain honest.Inspect receipt/session, repair if required, rerun intentionally.Service + receipt contract
DeletedTask leaves active UI; server history remains auditable.Deletion requires explicit confirmation.Control contract

Control semantics

ControlContractSafety consequence
New / chat proposalCreates one workspace-scoped disabled draft.Never approves or enables.
Preview next fiveUses the same server scheduler as real runs.Timezone and DST behavior cannot drift from execution.
EditSaves a new immutable task revision.Prior review cannot silently cover changed work.
DuplicateCreates a separate disabled task identity.No grant or enabled state is silently inherited.
DeleteRequires confirmation; removes the active task.Run history remains auditable on the server.
Approve / revoke authorityCreates or revokes an immutable grant revision.Execution rechecks the grant server-side.
Run onceCreates one manual occurrence and fresh session.Uses the same reviewed revision/grant boundary as scheduled work.
EnableActivates a reviewed non-manual schedule.Separate from review; computes the next occurrence.
Pause / ResumeStops or restarts future claims.A due tick while paused creates no run.
Cancel runRequests cancellation through the execution adapter.Outcome is retained honestly if engine termination is ambiguous.
Open session / artifactResolves the exact receipt-bound result.Artifacts are run-scoped and canonical-path contained.

Authority, scheduling, and threat boundaries

The feature is intentionally narrower than a workflow engine. Its useful power comes from explicit, durable boundaries rather than broad unattended permission.

Reviewed grant contains

  • Workspace identity and authorized workspace roots.
  • Capability IDs and allowed action classes.
  • Filesystem read/write scope.
  • Maximum runtime and model/agent selection.
  • Grantor, review time, expiry, and revocation state.

Always denied in this proposal

  • External communication and destructive operations.
  • Changing its own task, schedule, grant, or enabled state.
  • Path escape, unverified artifact access, or secret persistence.
  • Borrowing another session’s approval for unattended work.
  • Running after sign-out, workspace loss, capability loss, or revoked grant.

Exact scheduling behavior

  • Manual, daily, and weekly schedules; no advanced cron.
  • IANA timezone with DST-aware wall-clock calculation.
  • Five-occurrence preview from the real scheduler.
  • Default no-overlap behavior and maximum runtime.
  • One bounded retry: at most two attempts.
  • No catch-up storm; at most one missed occurrence is manually recoverable.

Claim and restart guarantees

  • Atomic identity across task revision and scheduled occurrence.
  • Repeated deterministic ticks do not duplicate an occurrence.
  • Restart replay does not duplicate an occurrence.
  • Definitions, grants, occurrences, attempts, receipts, sessions, errors, and artifacts are durable.
  • Pause prevents a genuinely due claim.

Receipt and result delivery

OpenWork does not create a parallel transcript system. The receipt is an audit index into normal OpenWork sessions and artifacts.

Identity

Task revision, grant revision, scheduled occurrence, claimed time, attempt ID, idempotency key, and fresh session ID.

Outcome

Final status, duration, bounded usage, attempt count, retry state, cancellation, attention, typed error, or honest ambiguity.

Delivery

Exact session link, downloadable receipt-verified file references, live timeline, and persistent completion/failure/attention notifications.

Verification and readiness

The complete coded journey passed on the final revision. This remains a draft because the requester has not manually confirmed the behavior.

Exact final evidence

22/22 Fraimz frames passed.
7/7 end-to-end journey steps passed.
Natural-language proposal, real manual run, fresh transcript, and real artifact verified.
Deterministic due tick, repeated tick, Electron relaunch, denial/repair, notification, resume, and pause verified.
Captured commit: 319e15bd394a3d2fea4d548ecd4f1f951d703df5.

Prior level-3 evidence retained

56 scheduled server contract, migration, schedule/DST, persistence, claim, retry, cancellation, grant, loss, and adapter tests.
26 post-hardening adapter and affordance regression tests / 136 assertions.
484 app tests, app/server/eval typechecks, production builds, syntax checks, diff check, and clean merge-tree check.
!Manual requester confirmation has not happened; the PR intentionally remains draft.

Migration, rollback, and non-goals

The change is additive and deliberately avoids irreversible ownership or platform promises.

Migration and rollback

Feature-local openwork_scheduled_task_* tables are added to the existing runtime SQLite database. Existing workspace/session data is not rewritten.

Reverting removes route/scheduler/UI registration while leaving records intact for a future compatible build. No destructive down migration runs automatically; operational rollback should preserve runtime.sqlite.

Explicit non-goals

No general workflow graph, arbitrary code DSL, webhook/event/file/email triggers, multi-agent DAG, template marketplace, cloud scheduler, OS background service, closed-app execution, organization-wide automation administration, or automatically authorized external communication.

Strings use a complete English fallback across locale bundles; native translations are follow-up work.