Selecting an environment
Passenv_id on POST /evaluations/run (and related APIs):
The public API host is shared; environment selection is entirely via
env_id.
Reset contract
Every episode starts from a reset payload (seed, fixture_id, max_steps, task_spec). On the private orchestrator this is often nested under a legacy field named harbor_reset on the task bank row.
GET /tasks/{task_id} and POST it to POST /v1/env/reset. Most clients should use POST https://agi.akhara.ai/evaluations/run instead.
Observation surface
Each step returns (via env API or eval wrapper) roughly:- Screenshot: JPEG / base64 (wrapper always; some mock capabilities omit screenshot modality)
screen_id: canonical screen (HOME,SEARCH_RESULTS,PDP,CART,CHECKOUT_REVIEW,ORDER_CONFIRMATION, …)- UI element ids: stable automation ids (e.g.
home.search.input,pdp.add_to_cart) - Env state refs:
user_id,cart_id - Verifier snapshots:
PASS/FAIL/IN_PROGRESSper verifier
ORDER_CONFIRMATION. Search-add tasks often terminate on CART. Screen graphs differ by environment; shopping environments share the flow below.
Screen graph (shopping environments)
State truth
Production Android scoring often uses a hybrid terminal reward: primary VU must PASS and device DB must PASS when evaluated. See Verifiers.
Isolation notes
- Each episode gets its own cart / session binding.
- Device capacity is physical: one executor serial runs one episode at a time.
- Seed-derived stock masks filter out-of-stock SKUs before verifiers pick expected targets.