You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,7 @@
2
2
3
3
## Unreleased
4
4
5
+
- Add atomically claimed recurring card intervals with constant-time catch-up, crash-recoverable leases, scheduler/API proof, and coalescing for active or capacity-blocked runs, thanks @Jhacarreiro.
5
6
- Reuse `@openclaw/libterminal` for terminal protocol codecs, Worker relays, Ghostty assets, and browser lifecycle while keeping Crabfleet authorization and session policy local.
6
7
- Fix automated Worker deployments by converging the app Custom Domain with the DNS-scoped deployment token instead of requiring zone-route access from the Worker token.
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,6 +10,7 @@ Crabfleet gives OpenClaw maintainers a fleet dashboard where every Codex crabbox
10
10
11
11
-**Fleet-first workflow.** Create repo-ready Crabboxes from the app, SSH, or the Go CLI and see org Codex instances grouped by person.
12
12
-**Board-based workflow.** Create cards from prompts, GitHub issues, or PRs. Track them through Todo, Running, Human Review, and Done lanes.
13
+
-**Recurring cards.** Give API-created cards a bounded interval schedule; due occurrences use the normal run-attempt path and coalesce while a run or capacity limit blocks dispatch.
13
14
-**Issue/PR lookup.** Type `#123` in search to preview matching GitHub issues or PRs across enabled OpenClaw repos and create a card from the match.
14
15
-**Codex run control.** Start durable run attempts, track heartbeats, watch the Ghostty WASM session grid, and take over only when the selected runtime advertises that capability.
15
16
-**Interactive Crabboxes.** Start a standalone Codex CLI workspace for manual cloud work and attach it in the same fullscreen Ghostty grid or WebVNC.
-`runtime`: optional `auto`, `container`, or `crabbox`.
166
168
-`policy`: optional. Blank, `default`, or `repo_default` uses a valid repo workflow policy, then `open_pr`.
169
+
-`schedule`: optional interval schedule. `everyMs` must be an integer from 60000 through 2678400000. Optional `startAt` is a non-negative Unix epoch millisecond timestamp. The first occurrence is the first cadence-aligned timestamp after creation unless `startAt` is in the future.
167
170
168
-
Invalid explicit merge policies return `400`.
171
+
Invalid explicit merge policies or schedules return `400`.
172
+
173
+
Scheduled cards include `schedule`, `nextRunAt`, and `lastScheduledRunAt` in card responses. Due occurrences are atomically claimed and advanced. If an active run or capacity limit prevents dispatch, the occurrence is recorded as skipped and the next cadence remains aligned.
174
+
175
+
### POST /api/admin/scheduler/tick
176
+
177
+
Owner only. Runs one recurring-card scheduler tick and returns bounded counters:
Copy file name to clipboardExpand all lines: docs/index.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -118,3 +118,11 @@ Owners can evaluate `CRABBOX.md` for enabled repos. Valid workflow config sets r
118
118
## Status
119
119
120
120
Deployed and actively used by OpenClaw. See [Current Boundaries](#current-boundaries) for the remaining deliberately unimplemented product behaviors.
121
+
122
+
## Recurring Cards
123
+
124
+
Crabfleet supports recurring cards for operational jobs that should run on a cadence without a human repeatedly pressing Start. A card can include a schedule object such as:
125
+
126
+
{ "kind": "interval", "everyMs": 86400000 }
127
+
128
+
The Worker scheduled handler and owner-only `/api/admin/scheduler/tick` endpoint atomically claim due occurrences, use the existing run scheduler, and advance `nextRunAt` with constant-time catch-up. Concurrent ticks cannot dispatch the same occurrence twice. If a card already has an active run or the fleet is at capacity, that occurrence is recorded as skipped and the cadence advances instead of retrying every minute.
Recurring work is modeled as a card schedule, not as an infinite process loop.
415
+
416
+
MVP schedule shape:
417
+
418
+
{ "kind": "interval", "everyMs": 86400000 }
419
+
420
+
When `nextRunAt` is due, the scheduler claims that exact occurrence with a five-minute recovery lease, queues a normal run attempt when capacity allows, and advances to the first cadence-aligned timestamp after the tick. Catch-up is constant-time. Concurrent ticks cannot claim the same occurrence, and an interrupted claim becomes retryable after its lease expires. Active runs and capacity blocks coalesce the current occurrence instead of causing per-minute retries.
421
+
422
+
This allows daily operational sweeps, maintenance checks, and recurring repair jobs to remain visible in the normal card/run history.
0 commit comments