Creator Docs
Workflow Editor

Jump Forward Agent Memory

Character-threshold compression for game and catalyst agent stacks.

Purpose and ownership

Jump Forward stores its AI memory as exact, alternating user/assistant exchanges:

  • the game simulator uses jfGameStack.chunk.* plus one optional jfGameStack.summary;
  • each catalyst scene uses its own jfCatalystStack.<id>.chunk.* and optional summary;
  • completed catalyst outcomes are appended to the game stack as direct synthetic exchanges;
  • jfCatalystArchives keeps the small durable records needed after a scene stack is removed.

The workflow owns stack shape, canonical text, thresholds, and publication. The executor is only a transport adapter to the platform-owned compress.v2 service. Model choice, prompting, billing, and quality evaluation stay behind that service.

When compression runs

Compression is driven by canonical character counts, not rounds:

  • game stack: 300,000 characters;
  • catalyst stack: 150,000 characters.

Before generation, the workflow measures the same canonical text it would submit for compression. When the threshold is crossed it collapses the represented exact prefix into one summary and keeps any unrepresented suffix exact. A successful transition atomically publishes the summary and deletes represented chunks. Refusal, transport failure, an empty result, or a result that is not smaller leaves every exact exchange intact.

Reset, history editing, duplication, and game creation do not run compression. Reset and retrospective edits rebuild the game conversation deterministically from canonical surviving rounds. Newly created games begin without AI memory, while simple-to-live conversion seeds direct exchanges from the canonical rounds it imports.

Catalyst outcomes

A catalyst scene has isolated memory while it runs. At terminal publication, its canonical closing summary and public meanwhile event become one direct game-agent exchange. The scene transcript and reasoning continuation do not enter game memory. This keeps catalyst-private reasoning out of the simulator while preserving the authoritative outcome that later rounds must remember.

Intervene

Intervene discards unrevealed output and publishes only the canonical revealed prefix. That sanitized exchange is force-compressed even below the normal game-stack threshold. The model sees neither the discarded continuation nor an intervention marker. If compression is temporarily unavailable, the exact sanitized exchange remains durable with an internal retry flag and is compressed before the next game or catalyst generation.

Persistence quota and atomicity

Workflow memory has one 30 MiB quota covering the combined UTF-8 JSON footprint of workflowStore and its optimized workflowStoreChangeLog. Compression, reconstruction, cheats, and ordinary writes all preflight that same combined footprint.

Summary publication is planned as one atomic store/log projection. The summary never has to coexist with every represented chunk as a temporary intermediate state, and a crash cannot expose a state with neither the exact prefix nor its summary.

Platform call

Agent-stack compression uses typed compress.v2 requests:

  • paxhistoria.game-agent-stack.v1 for the simulator;
  • paxhistoria.catalyst-agent-stack.v1 for a catalyst scene.

The executor supplies current non-spectator human beneficiaries immediately before each call. The workflow never chooses payers or forwards provider details.

Each result carries an opaque call id. The same id links bundle compressionCallId, Broker idempotency, and trusted-service attempt telemetry without logging prompt or summary text.

Source contracts

The transport layer is covered in the bundle compression article.