SCLATE: a Substrate for Continual-Learning Agent Training and Evaluation
Organizations: Apple
Abstract
Continual-learning agents are systems of models, harnesses, and memory operating over long multi-session horizons. Evaluating and training them requires interleaving tasks with agent-side events such as session stop and start, crons, and memory consolidation. Yet existing benchmarks and training frameworks schedule only the benchmark's own events, leaving each benchmark and agent pair to build a custom scheduling loop. We present SCLATE, an execution substrate where benchmarks and unmodified agents each add their events to one open event scheduler through an adapter. A hybrid simulated clock runs these events on a shared timeline, flowing in real time while the agent works and skipping idle gaps, which compresses a month-long scenario into hours. SCLATE also serves as a rollout engine that runs any agent's harness and memory unmodified, recording the tokens and log probabilities of every model call through an in-container proxy. We port seven benchmarks to SCLATE and compare ten unmodified harness and memory configurations head to head on ten models. The comparison shows that an added memory system does not reliably beat the harness's native memory and that models differ widely in how they use the same harness and memory. We then post-train Qwen3.5-4B through unmodified harnesses and memory systems. The model learns to use both, reading 6.8x fewer file lines with a 16.7-point higher SWE-bench Verified pass rate, and writing richer memory records, while its held-out MetaClaw accuracy rises by up to 11.8 points.
Figures & tables
| Claude Code | Hermes | Codex | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Model | No-Mem | Native | Mem0 | Hindsight | GBrain | No-Mem | Native | Mem0 | Hindsight | Native |
| Haiku-4.5 | 40.2% | 46.0% | 69.7% | 58.7% | 56.7% | 43.6% | 59.8% | 61.9% | 61.0% | 44.8% |
| Sonnet-5 | 43.9% | 51.2% | 57.5% | 50.9% | 62.1% | 43.1% | 47.4% | 59.0% | 50.3% | 56.7% |
| Opus-4.6 | 48.8% | 65.0% | 66.5% | 71.1% | 74.0% | 46.5% | 68.5% | 65.0% | 66.8% | 51.5% |
| Opus-4.8 | 48.6% | 60.4% | 66.8% | 74.0% | 67.6% | 45.4% | 64.2% | 64.7% | 61.9% | 48.6% |
| Gemini-3.7F | 63.9% | 79.2% | 79.2% | 81.8% | 79.5% | 73.4% | 77.8% | 79.5% | 80.1% | 73.4% |
| In-distribution (days 1–20) | Held-out (days 21–30) | |||||||
|---|---|---|---|---|---|---|---|---|
| Harness & Memory | Base | Trained | (pp) | Base | Trained | (pp) | ||
| CC & no-memory | 37.4% | 52.4% | 0.001 | 9.2% | 16.8% | 0.039 | ||
| CC & Mem0 | 42.7% | 67.4% | 0.001 | 10.1% | 21.8% | 0.023 | ||
| CC & Hindsight | 51.1% | 52.0% | 0.91 | 16.0% | 16.8% | 0.83 | ||
| Hermes & no-memory | 29.1% | 36.6% | 0.27 | 8.4% | 18.5% | 0.047 | ||
| Hermes & Mem0 | 31.3% | 58.6% | 0.004 | 8.4% | 16.0% | 0.17 | ||
Appendix figures & tables24 assets
Supplementary material from the paper’s appendix.
Appendix
| As deployed | Long horizon | Faithful execution | ||||
| System | Harness | Memory | Multi-session | Time accel. | Shared clock | Agent-side events |
| Evaluation | ||||||
| Harbor ( Harbor Framework Team, 2026 ) | ||||||
| GAIA-2 / ARE ( Froger et al., 2026 ) | ||||||
| MetaClaw ( Xia et al., 2026 ) | ||||||
| Post-training | ||||||
| Method & Signature | Systems Semantics |
|---|---|
| BenchmarkAdapter Substrate (Scenario Environment and Evaluation) | |
| setup(scenario, state_dir) | Provisions initial mock application state (mail, calendar, git). |
| source_manifest(ctx) / event_sources(ctx) | Yields scenario tasks, inter-session world updates, session boundaries, and grading, either as declarations the scheduler instantiates or as ready-made sources. |
| world_provider() | Optionally exposes a read-only view of application state as .world to event sources and graders. |
| grading_policy() | Declares which turns are graded and when, how turns that are not graded are discharged, and whether a graded turn may be regraded, so the scheduler carries no benchmark-specific grading logic. |
| Grader.evaluate(ctx) -> Judgment | Independent oracle that scores each turn the grading policy selects against the task rubric, reading the dispatch context including the world state, and returns the verdict and feedback. |
| Event Source Class | Contributor | Systems Responsibility and Fire Dynamics |
| UserInputSource | Benchmark | Yields multi-turn task prompts and user instructions dynamically as prior turns are graded. |
| SessionStartSource | Shared | Coordinates multi-phase session opens, advancing time, invoking StartAgent , and folding session-init turns. |
| SessionEndSource | Shared | Manages session closes in two stages: delivering the handoff notification, then invoking ShutdownAgent once settled. |
| AppStateConditionedSource | Benchmark | Polls ctx.world during active flow mode, firing immediately when benchmark application predicates are satisfied. |
| GradingSource | Benchmark | Schedules evaluation fires across turns and session boundaries, invoking the independent oracle grader. |
| CronSource / WakeupSource | Agent | Emits recurring wakeup targets on the timeline to pace native agent background crons and periodic maintenance. |
| Effect Primitive | Operational Semantics and State Mutations |
|---|---|
| Deliver | Delivers structured task instructions, user prompts, or system notifications directly to the agent over filesystem IPC channels. |
| RunHook | Executes a custom callback defined by an adapter to mutate environment state, seed database tables, or evaluate grading rubrics. |
| AsyncReserve | Switches the scheduler into real-time flow mode to wait for an asynchronous hook to finish, advancing time continuously without blocking the scheduler loop. |
| AwaitWakeup | Pauses timeline progression until the agent process settles into an idle state, becomes alive, or triggers an internal wakeup alarm. |
| StartAgent | Spawns the agent harness process along with any configured memory system inside the execution sandbox. |
| ShutdownAgent | Sends graceful termination signals to shut down the running agent harness and sidecar processes before closing the session. |
| MetaClaw | |
|---|---|
| Runs | 100 |
| Simulated span, median | 40.0 days |
| Real span, median | 5.9 h |
| Simulated over real time (all runs combined) | 142 |
| Benchmark-side events dispatched | 77,700 |
| Agent-side events dispatched | 12,400 |
| Model | Reasoning effort |
|---|---|
| Haiku-4.5 | high |
| Sonnet-5 | high |
| Opus-4.6 | high |
| Opus-4.8 | high |
| Gemini-3.7F | provider default |
| GPT-5.4 | none |
| Benchmark | Upstream Size | Evaluated Tasks ( ) | Task Domain & Environment |
|---|---|---|---|
| MetaClaw ( Xia et al., 2026 ) | 346 tasks (30 workdays) | All 346 tasks | Multi-session developer workspace |
| GAIA-2 ( Froger et al., 2026 ) | 800 tasks (5 categories) | All 800 tasks | Asynchronous personal assistant apps |
| AppWorld ( Trivedi et al., 2024 ) | 750 tasks (585 test) | All 585 test tasks (168 normal, 417 challenge) | Multi-app transactions |
| LongMemEval ( Wu et al., 2025 ) | 500 tasks (oracle/s/m) | 100 tasks ( split) | Multi-session conversational recall |
| PersonaMem ( Jiang et al., 2025 ) | 5,990 tasks (32k–1M) | 100 tasks (128k tier) | Long-horizon persona tracking |
| SWE-Gym ( Pan et al., 2024 ) | 2,438 tasks | 293 tasks (SkyRL-v0 subset) | GitHub pull request resolution |
| Claude Code | Hermes | Codex | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Model | No-Mem | Native | Mem0 | Hindsight | GBrain | No-Mem | Native | Mem0 | Hindsight | Native |
| Haiku-4.5 | 34 | 38 | 77 | 67 | 99 | 78 | 242 | 270 | 256 | 42 |
| Sonnet-5 | 51 | 67 | 159 | 104 | 179 | 76 | 197 | 442 | 310 | 70 |
| Opus-4.6 | 45 | 57 | 122 | 100 | 107 | 59 | 148 | 252 | 203 | 31 |
| Opus-4.8 | 41 | 42 | 176 | 109 | 144 | 65 | 166 | 209 | 198 | 34 |
| Gemini-3.7F | 227 | 155 | 349 | 228 | 295 | 317 | 588 | 625 | 528 | 322 |
| Harness | Model | Execution | Search | Adaptability | Ambiguity | Time | Mean |
|---|---|---|---|---|---|---|---|
| Claude Code | Haiku-4.5 | 36.9% | 70.0% | 18.8% | 13.1% | 9.4% | 29.6% |
| Hermes | Haiku-4.5 | 53.8% | 56.2% | 15.0% | 14.4% | 13.8% | 30.6% |
| Codex | Haiku-4.5 | 41.2% | 62.5% | 16.2% | 12.5% | 10.0% | 28.5% |
| Claude Code | Sonnet-5 | 81.9% | 92.5% | 37.5% | 73.8% | 28.1% | 62.8% |
| Hermes | Sonnet-5 | 73.8% | 92.5% | 26.9% | 58.8% | 29.4% | 56.2% |
| Codex | Sonnet-5 | 78.1% | 86.9% | 28.8% | 56.9% | 13.8% | 52.9% |
| Harness | Model | Normal (168) | Challenge (417) | Overall (585) |
|---|---|---|---|---|
| Claude Code | Haiku-4.5 | 60.7% | 43.4% | 48.4% |
| Hermes | Haiku-4.5 | 60.1% | 44.6% | 49.1% |
| Codex | Haiku-4.5 | 64.9% | 43.4% | 49.6% |
| Claude Code | Sonnet-5 | 70.8% | 58.0% | 61.7% |
| Hermes | Sonnet-5 | 73.2% | 52.0% | 58.1% |
| Codex | Sonnet-5 | 61.3% | 48.4% | 52.1% |
| Configuration Field | Setting / Value |
|---|---|
| Base Model | Qwen3.5-4B |
| Reinforcement Learning Algorithm | GRPO |
| Harnesses Evaluated | Claude Code, Codex |
| Learning Rate | |
| Context Window ( ctx ) | 50,000 tokens |
| Prompts per Batch | 4 |
| Configuration Field | Setting / Value |
|---|---|
| Student Model | Qwen3.5-4B |
| Teacher Model | Qwen3.5-35B-A3B (MoE), served via SGLang, 65,536-token context |
| Training Algorithm | On-policy distillation via advantage shaping |
| OPD KL Coefficient ( ) | 1.0 |
| Auxiliary Loss Terms | Reference KL 0.001 ( low_var_kl ); entropy coefficient 0.0 |
| Learning Rate | , constant, no warmup |