Skip to main content
Hosted optimizer runs need a task service they can reach. If that service is running on your machine, synth-optimizers can open a tunnel before submit and keep it alive while the hosted run is active.

Providers

Use one provider flag for both GEPA and GELO:
Supported values: cloudflared and ngrok managed leases require a localhost target, such as http://127.0.0.1:8943.

CLI

GEPA:
GELO:
--follow is required with --tunnel-url; it keeps the tunnel open until the hosted run reaches a terminal status. Without --follow, the CLI refuses to submit a local tunnel run.

Python

The same open_tunnel(...) lease can be passed to submit_gepa_toml(...) through container_tunnel.

Readiness

Before submit, the SDK checks that the local target is reachable. After a lease is created, it waits for the public tunnel URL to answer before the run is submitted. For best results:
  • expose a /health endpoint on the local task service
  • keep the local process running for the full hosted run
  • use --follow for CLI submits
  • close Python tunnel leases with a context manager

Direct URLs and Pools

You do not need a tunnel if your task service is already reachable from the public internet. Use --container-url or a config-level direct URL instead. You also do not need a tunnel when the task is already registered in a Synth container pool. Use --container-pool and optional --container-task-id.

Common Errors