Skip to content

Commit aa1c5ab

Browse files
authored
Move Codex cron to home scheduler
Run Codex cron through a resident workspace sidecar that reads the home PVC registry for BOXP-16.
1 parent 938e8ac commit aa1c5ab

7 files changed

Lines changed: 92 additions & 507 deletions

File tree

argoproj/codex-workspace/cron-configmap.yaml

Lines changed: 0 additions & 242 deletions
This file was deleted.

argoproj/codex-workspace/cron.md

Lines changed: 36 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,50 @@
11
# Codex Workspace Cron
22

3-
Codex workspace の prompt 定期実行は `jobs.yaml` と Kubernetes CronJob で管理する
4-
OpenClaw の `jobs.json` と同じく、複数のジョブがそれぞれ schedule と prompt を持つ
3+
Codex workspace の prompt 定期実行は、workspace Pod 内の resident scheduler が管理する
4+
OpenClaw の cron と同じく、複数の job がそれぞれ別の schedule と prompt を持てる
55

66
## 仕組み
77

8-
- `cron-configmap.yaml`
9-
- `jobs.yaml`: 登録済み cron job の一覧
10-
- `run-codex-cron.sh`: `codex exec` を非対話で起動する runner
11-
- `prompt-*.md`: 定期実行したい prompt。
12-
- `cronjob.yaml`
13-
- `spec.schedule`: Kubernetes が実行する schedule。`jobs.yaml` の同名 entry と合わせる。
14-
- `spec.suspend`: 誤実行防止。初期値は `true`
15-
- `CODEX_CRON_JOB_ID`: `jobs.yaml`job id。
16-
- 実行ログ
17-
- `/home/boxp/.codex-cron/runs/<job>/<run-id>/events.jsonl`
18-
- `/home/boxp/.codex-cron/runs/<job>/<run-id>/stderr.log`
19-
- `/home/boxp/.codex-cron/runs/<job>/<run-id>/last-message.md`
20-
- `/home/boxp/.codex-cron/runs/<job>/<run-id>/summary.json`
21-
22-
## 有効化
23-
24-
prompt と schedule を確認してから、`jobs.yaml` の対象 job を `enabled: true` にし、対応する CronJob の `suspend``false` にする。
25-
26-
```yaml
27-
jobs:
28-
- id: workspace-maintenance
29-
enabled: true
30-
schedule: "0 22 * * *"
8+
- `deployment.yaml`
9+
- `codex-cron-scheduler` sidecar が `/opt/codex-workspace/cron/scheduler.bb` を常駐実行する
10+
- scheduler と workspace container は同じ home PVC を mount する
11+
- `/home/boxp/.codex-cron/jobs.edn`
12+
- live job registry。Codex skill から CRUD する。
13+
- `/home/boxp/.codex-cron/prompts/*.md`
14+
- job ごとの prompt
15+
- `/home/boxp/.codex-cron/runs/<job>/<run-id>/`
16+
- `events.jsonl`, `stderr.log`, `last-message.md`, `summary.edn` を保存する。
17+
18+
## Registry 例
19+
20+
```clojure
21+
{:version 1
22+
:jobs [{:id "workspace-maintenance"
23+
:name "Workspace maintenance"
24+
:enabled false
25+
:schedule "0 22 * * *"
26+
:time-zone "Etc/UTC"
27+
:prompt-file "prompts/workspace-maintenance.md"
28+
:workdir "/home/boxp"
29+
:output-root "/home/boxp/.codex-cron/runs"
30+
:bypass-approvals true}]}
3131
```
3232

33-
```yaml
34-
spec:
35-
suspend: false
36-
schedule: "0 22 * * *"
37-
```
33+
## 操作
3834

39-
## 手動実行
35+
live job は Codex workspace 内の skill helper で操作する。
4036

4137
```bash
42-
kubectl create job \
43-
--from=cronjob/codex-cron-workspace-maintenance \
44-
codex-cron-workspace-maintenance-manual \
45-
-n codex-workspace
38+
bb ~/.codex/skills/codex-workspace-cron/scripts/codex_cron_jobs.bb list
39+
bb ~/.codex/skills/codex-workspace-cron/scripts/codex_cron_jobs.bb add \
40+
--id daily-report \
41+
--name "Daily report" \
42+
--schedule "0 22 * * *" \
43+
--prompt "調査して日本語で報告してください。"
44+
bb ~/.codex/skills/codex-workspace-cron/scripts/codex_cron_jobs.bb enable daily-report
4645
```
4746

48-
## ジョブ追加
49-
50-
1. `cron-configmap.yaml``jobs.yaml` に job entry を追加する。
51-
2. `cron-configmap.yaml` に対応する `prompt-<name>.md` を追加する。
52-
3. `cronjob.yaml` をコピーして CronJob 名、`schedule``CODEX_CRON_JOB_ID` を変更する。
53-
4. `jobs.yaml``id/schedule/timeZone` と CronJob の `CODEX_CRON_JOB_ID/schedule/timeZone` を揃える。
54-
5. 多重実行を避けるため `concurrencyPolicy: Forbid` は維持する。
55-
6. workspace home PVC を mount するため、workspace Pod と同じ node へ寄せる `podAffinity` は維持する。
56-
5747
## OpenClaw との差分
5848

59-
OpenClaw は Gateway 内蔵 scheduler が `jobs.json``jobs-state.json` を管理する。Codex workspace では Gateway 相当の常駐 scheduler を持たないため、scheduler は Kubernetes CronJob に委譲し、ジョブ登録情報は ConfigMap の `jobs.yaml` に集約する。Runner 補助スクリプトは workspace image に入っている Babashka (`bb`) で動かす。
49+
OpenClaw は Gateway 内蔵 scheduler が home 配下の job registry を管理する。
50+
Codex workspace では Gateway ではなく Pod sidecar として scheduler を常駐させ、Kubernetes CronJob は個別 schedule の source of truth にしない。

0 commit comments

Comments
 (0)