OptionalApplicationFree-form application context — typically markdown — that gives the
controller LLM a head-start on the app being tested (navigation landmarks,
common gotchas, route conventions). Sourced from TestSuite.Configuration. applicationContext at the suite level; tests can append per-test notes.
The engine renders this into the controller prompt's system message under an "## Application Context" heading so the LLM doesn't waste steps rediscovering app structure on every test.
OptionalCheckpointsTour checkpoints for this run, name + instruction only —
the assertions are engine-internal. Rendered into the prompt so the
controller knows the sections and can echo the exact checkpointReached
name when it arrives at one, triggering a scoped judge at that frame.
Empty/undefined for non-tour runs.
OptionalCurrentCurrent date (YYYY-MM-DD) injected into the prompt so the model can reason about "today"/relative dates without hallucinating one.
Current screenshot as base64 PNG
Current URL the browser is on
OptionalDiagnosticsCompact digest of browser diagnostics from the previous step (console
errors, failed requests, crashes). Lets the controller see why
a page is blank/broken (e.g. ChunkLoadError, POST /graphql 500)
instead of guessing from pixels. Empty/undefined when the step was clean.
OptionalFormFormLogin credentials to inject into the controller context. Only populated when a BasicAuthMethod with Strategy='FormLogin' matches the current domain. The controller LLM uses these to fill login forms rather than having headers set automatically.
The natural-language goal being pursued
OptionalHintsPer-test UI hints injected after the goal — documents the UI contract ("search commits on Enter"). Empty/undefined when none.
OptionalInteractiveSerialized interactive-element list for this step, when element
grounding is on — [12] button "Save" / [13] textbox "Name" (empty).
The controller targets these by index via ClickElement/TypeIntoElement.
Empty/undefined in coordinate/vision mode.
OptionalJudgeFeedback from the judge on the previous step (if available)
OptionalLoopEngine-computed loop evidence for the previous step(s), when a repeated state has been detected. Injected into the controller prompt so the model can break out of the loop instead of repeating the same ineffective action. Empty/undefined when no loop is active.
Maximum steps for this run
OptionalMemoryThe controller's durable memory + plan from the PREVIOUS step, echoed back so history is self-describing and intent isn't re-derived.
OptionalPlanOptionalPreviousA memo from a PRIOR failed attempt at this goal so a retry is non-blind ("previous attempt failed because X; avoid Y"). Empty/undefined on the first attempt.
OptionalPreviousPrevious actions and their results for context
Recent screenshots as base64 PNGs (bounded ring buffer)
OptionalSignalCancellation signal for the controller LLM call. When the engine's
Stop() aborts it, an in-flight prompt returns promptly (Layer 2 threads
it into AIPromptParams.cancellationToken) instead of holding a worker
slot for the rest of a 30s+ call. Not template data — consumed by the
prompt executor only.
Current step number
Available tool definitions for the LLM to call
Structured input to the controller LLM.
Contains everything the LLM needs to decide the next action(s). Layer 1 builds this from RunContext; Layer 2 may add MJ-specific data before rendering via AIPromptRunner templates.