EtherDocs
Integrate/Execution modes

Execution modes

Ether can run coding work in-process (default) or delegate to external harnesses. Integrators choose based on who runs the agent loop.

Modes

ModeAPI envBehavior
Local (default)ETHER_HARNESS_MODE=localOS brain runs in-process coding agent (stub or live)
Remote pullETHER_HARNESS_MODE=remoteSkip in-process brain for coding pipelines; external app claims via Harness API
Remote pushremote + ETHER_HARNESS_URLOS POSTs CodingSpec to your worker; polls until complete

Set on ether-api (ether-core deploy), not on your harness laptop alone.

Pull model (recommended)

text
User → POST /api/tasks
Harness → POST /api/harness/tasks/{id}/claim
Harness → steps + POST /api/harness/tasks/{id}/result
App ← task.delivered

Best for: Ether Code CLI, local dev, explicit dispatch, full delivery contract.

Your worker needs only outbound HTTPS to api.tryether.ai — no inbound port required.

Push model

text
ether-api (RemoteCodingHarness) → POST {ETHER_HARNESS_URL}/v1/runs
                               → GET  {url}/v1/runs/{run_id}

Best for: Always-on remote workers behind a stable URL.

Run Ether Code serve as reference:

bash
ETHER_CODE_PORT=8791 npm run worker -- serve
# ether-api: ETHER_HARNESS_MODE=remote ETHER_HARNESS_URL=http://worker:8791
Two wires today

Push uses /v1/runs + CodingSpec. Pull uses Harness claim/result. Prefer pull for new integrations until paths are unified.

Choosing a mode

ScenarioUse
Building a third-party harness productPull
User runs agent on laptopPull + user JWT
Central GPU farm with inbound HTTPPush (or pull from farm egress)
Prototyping inside ether-core onlyLocal

Local Ether Code still talks to Ether

Even on the same machine, Ether Code is a client of Ether OS:

  • User creates task in app → task_id
  • Harness claims — scope comes from ExecutionBundle, not “whatever folder is open”

That preserves the same contract for local and cloud runtimes.