Skip to main content

Engine

The engine performs execution.

It is the part of the system that actually does the work with the available runtime resources.

Why this exists

Separating the engine from the operator lets you reuse the same operator contract across different execution strategies:

  • deterministic sequence engines
  • browser engines using Playwright
  • future LLM-backed engines

How it works

An engine implements run(input) and receives:

  • the selected capability
  • the current attempt number
  • optional context
  • optional runtime
  • the current trace

Example

const browserEngine: OperatorEngine<BrowserCapabilities> = {
async run(input) {
await input.runtime.page.goto(input.context.url, {
waitUntil: "domcontentloaded",
});

return {
title: await input.runtime.page.title(),
url: input.runtime.page.url(),
};
},
};

Notes

Common confusion

The engine is the executor. The runtime is what the executor uses.