antioch · git:20260923.3c7ccb6 · 2026-09-23 · sha256 1f1caa1978d54a08

antioch git:20260923.3c7ccb6A

Immutable. This exact content is served forever at /api/v1/blob/1f1caa1978d54a08.

---
name: antioch
description: Use when deploying, operating, debugging, or composing the Antioch Workbench integration, live OpenPI inference, and dataset-based policy training.
---

# Antioch Workbench

Use the supported structured Antioch CLI only. Never call undocumented HTTP
endpoints, print identity/config/environment data, or inspect unrelated runs.

Start at [the partner catalog](../../../workflows/partners/antioch/README.md).
The live OpenPI pickup runs pretrained-policy inference. The separate
`antioch-offline-policy-train.yaml` collects a completed dataset before ACT
training; "offline" describes the learning input, not provider connectivity.

## Before spending

1. Run `npa workbench health preflight --checks s3 --json`.
2. Explicitly set `NPA_ANTIOCH_ACCEPT_TERMS=YES`, then run
   `npa workbench antioch terms-preflight --output json` for the pinned scope.
3. Run `npa workbench antioch health --output json`; do not start interactive login.
4. Confirm inputs are public or synthetic and output is a unique run-scoped S3 prefix.
5. Use the pinned runtime-fetch adapter documented in `docs/workbench/antioch.md`.

## Operate

- Use `run` for blocking workflow composition; `submit` plus `status` for manual control.
- Always pass `--input-path`, `--output-path`, `--workflow-run`, and `--state-id`.
- Always pass explicit `--robot-type` and `--task`; collection has no fallback labels.
- Reuse the same identities after a retry. `reconcile` closes a submission crash window.
- Treat 429/5xx as retryable. Treat auth, malformed output, id conflicts, checksums,
  and episode schema errors as terminal.
- Gate downstream work on `_SUCCESS.json`, then consume `<output>/dataset`.
- The dataset is for offline imitation learning only. Use the LeRobot policy trainer;
  do not describe it as online PPO or RSL-RL.

### Continuing live viewport + external policy

- Use only current structured commands: `antioch project build`, `antioch session
  new|status|release`, `antioch service exec|cp|ps|ports`, and `antioch scenario
  list|run|cancel`. Run the live scenario with `--stream --verbose`. Do not call
  undocumented HTTP endpoints or infer an API origin from a console URL.
- Resolve the exact deployment through the CLI's supported `ANTIOCH_ENV` profile
  and preserve it explicitly in the runtime. Discover organization/project
  topology with supported JSON commands; never hardcode a discovered endpoint,
  project, organization, or session as a product default.
- Create the run-scoped config directory from the current CLI login and include
  only its owner-readable `auth.json` and optional `workspace.json`. Never carry
  forward legacy machine, SSH, tunnel, lock, or cached endpoint state.
- Start the exact project session before copying a run-scoped
  CA/API-key/endpoint bundle. `service cp` accepts only paths under
  `/workspace/project`; upload there, then use `service exec` to install one
  owner-only generation under `/tmp`. Never use `--set`, environment dumps,
  command arguments, or project source for policy credentials.
- The supported steady-state path is the MK8s adapter Deployment: run the Antioch
  named-route client and bounded relay in one pod network namespace and target a
  ClusterIP policy Service. The operator VM may deploy/status it but must not
  carry frames or actions. The legacy tmux path is recovery-only and must not be
  retained after a cluster-native cutover.
- Reconcile the exact project-scoped scenario through supported `scenario list`,
  `session status`, and `service ps` JSON. The one live scenario's `session_id`
  must equal the current project session and the simulator process/session must
  be ready. Fail closed on absent, mismatched, or ambiguous ownership.
- A scenario dispatch or failure recovery may recreate the sim container. While the
  foreground run lives, verify every required bundle file through `service exec`
  and re-stage missing files with `service cp`; never bake them into the sim image.
  Stage a full generation and atomically switch one symlink so a recovering bridge
  cannot observe a certificate/key or token generation mix.
- Build an immutable revision with `project build`, start it with `session new
  --revision`, and do not force-replace unrelated active work. On a lost session,
  cancel and prove the exact scenario absent before creating one successor.
  Retry only structured retryable connectivity, 429, or 5xx failures.
- When direct policy egress is unavailable, use a declared Antioch service port
  bound only on adapter-pod localhost. Directly own `service ports --bind
  sim.policy-relay=127.0.0.1:18444 --serve sim` as a foreground child of the pod
  controller. Terminate authenticated WSS in the sim service and let the scenario
  connect outbound with a distinct authenticated role. The same-pod relay bridges
  the client role to the policy's independently authenticated, CA-verified
  ClusterIP WSS port 443. Bound messages, queues, connections, requests, timeouts,
  and reconnect backoff; never substitute an unauthenticated public proxy,
  disabled TLS verification, a token in a URL, or an undocumented endpoint.
- Treat livestream state `ready` as published but awaiting an authenticated Mission
  Control viewer. Do not claim an actively viewed frame until a supported viewer
  connection advances the first render, and never inspect browser auth storage.
- For the OpenPI PoC, require a finite `completed/passed` record with named checks
  for advancing nonblack exterior/wrist observations and finite `[15,8]` responses.
  Retire compute after verifying that durable record; never use timeout/renewal as
  the successful outcome.
- A live policy loop must log current camera frames and decision counters from the
  executing scenario. Reject stale, malformed, non-finite, wrong-shaped, or unsafe
  actions and hold position while reconnecting. Do not claim hard real-time control.
- Give live telemetry one explicit logger root and resolve every Rerun blueprint
  origin through that same root; unprefixed view origins do not select entities
  emitted by a named Antioch logger.
- `npa/examples/antioch-openpi-live` is the public-source reference. Its checked-in
  project identity is intentionally unusable and is replaced only in private runtime
  state. The OpenPI gateway/controller lives in
  `npa.workflows.byof.openpi_live`.
- Use `npa workbench antioch live-k8s-deploy|live-k8s-status|live-k8s-stop`
  with one mode-0600 runtime config. Keep exact Kubernetes, Antioch, and secret
  coordinates in that file, not argv or ordinary output. Finalize removal of an
  exact owned public rollback Service only after sustained acceptance.
- Require the runtime config's explicit supported Antioch deployment profile and
  forward it to the controller only as `ANTIOCH_ENV`; never let a cluster-native
  run inherit the vendor CLI's default deployment implicitly.

## Cleanup and evidence

Cancel the exact test run before releasing its exact project session. Prove the
current structured session identity still matches the controller-owned session
before invoking project-scoped release; fail closed on replacement. A requested
retained live demo is the exception: leave its exact session and policy
Deployment running, and provide exact supported stop commands privately. Record only
run ids, states, check names, schemas, checksums, artifact basenames, and sanitized
links. Never record tokens, signed URLs, config contents, organization/customer
identifiers, unrelated run metadata, or internal infrastructure coordinates.

See `docs/workbench/antioch.md` for authentication, deployment, schemas, licensing,
recovery, console access, and the current personal-OAuth limitation.