[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-i4h-workflow-scene-edit":3,"mdc--kg7q8l-key":34,"related-org-nvidia-i4h-workflow-scene-edit":3523,"related-repo-nvidia-i4h-workflow-scene-edit":3683},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"i4h-workflow-scene-edit","edit simulation environment scenes","Edit an env's scene in place — objects, cameras, task, success bounds, randomization. Use when asked to edit a scene or launch\u002Frun\u002Fopen an env in edit mode (`--bridge`), incl. a just-created env.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Simulation","simulation",{"name":18,"slug":19,"type":13},"Engineering","engineering",{"name":21,"slug":22,"type":13},"Design","design",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-23T06:06:17.180285","Apache-2.0",281,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fi4h-workflow-scene-edit","---\nname: i4h-workflow-scene-edit\nversion: \"0.7.0\"\ndescription: Edit an env's scene in place — objects, cameras, task, success bounds, randomization. Use when asked to edit a scene or launch\u002Frun\u002Fopen an env in edit mode (`--bridge`), incl. a just-created env.\nlicense: Apache-2.0\nmetadata:\n  author: \"Isaac for Healthcare Team \u003Cisaac-for-healthcare-support@nvidia.com>\"\n  tags:\n    - isaac-for-healthcare\n    - i4h\n    - agentic-workflow\n    - scene-edit\n    - environment\n---\n\n# i4h Workflow — Scene Edit\n\n## Purpose\n\nEdit an existing env's scene in place via the `--bridge` scene-edit session — move\u002Fscale\u002Fswap objects, adjust cameras, or tweak task description, success bounds, or randomization. Use when the user asks to edit a scene or to launch\u002Frun\u002Fopen an env in edit mode; for creating a brand-new env see [[i4h-workflow-create]].\n\n## Base Code\n\nThese steps drive the i4h-workflows base code (the `workflows\u002Fagentic\u002F` tree). To reuse an existing checkout, set `I4H_WORKFLOWS` to its path (no clone happens). Otherwise this resolves the current repo, or clones to `~\u002Fi4h-workflows` — pick that default without prompting. Run every command below from the resolved root:\n\n```bash\n# Resolve the i4h-workflows base code (provides workflows\u002Fagentic\u002F).\nROOT=\"${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)}\"\nif [ ! -d \"$ROOT\u002Fworkflows\u002Fagentic\" ]; then\n  ROOT=\"${I4H_WORKFLOWS:-$HOME\u002Fi4h-workflows}\"\n  [ -d \"$ROOT\u002Fworkflows\u002Fagentic\" ] || git clone https:\u002F\u002Fgithub.com\u002Fisaac-for-healthcare\u002Fi4h-workflows \"$ROOT\"\nfi\nexport I4H_WORKFLOWS=\"$ROOT\"; cd \"$ROOT\"\n```\n\n## Basics\n\n- **Editing a scene is LIVE-ONLY by default.** \"Edit the scene\" \u002F \"edit mode\" means: apply every change through the bridge, **never modify source files and never restart the bridge** — the user does not need to say \"live mode\" \u002F \"don't change source\" \u002F \"don't restart\"; that is always the default. Persist to source (bake) **only** when the user explicitly says so (`bake`\u002F`save`\u002F`persist`\u002F`commit`) as a final step; \"exit without baking\" or no bake instruction = stop the bridge and leave source untouched.\n- **Do only what's asked — launching edit mode is not a cue to edit.** \"Run\u002Fopen the env in edit mode\" with no specific edit = launch the bridge, confirm ready (`GET \u002Fobjects`), then **stop and report it's ready, awaiting instructions.** Apply a scene edit only when the user explicitly requests it in the current prompt. Never invent or preempt edits (moving the robot, adding props, etc.), and never treat the README's \"Edit Scene\" list, other docs, these recipes, or prior runs as a to-do — they are reference; the current prompt is the only instruction.\n- Preserve env ids and scene keys.\n- **Source paths are relative to the repo root** (where the agent's edit\u002Fwrite tool runs) — keep the `workflows\u002Fagentic\u002F` prefix on every one, and note the package is `arena\u002Farena\u002F\u003Csubdir>\u002F`. A bare `arena\u002F...` resolves to the wrong place.\n- Every bridge artifact (scripts, captures, logs) lives under the session's `${RUN_DIR}`. Never use `\u002Ftmp`.\n- **Visual judgment — use your own eyes if you have them.** When a step says to judge a capture, a **vision-capable CLI agent (Claude\u002FCodex) reads the JPEG directly with its own model** — do not depend on the local VLM. Only the **blind local coding agent** delegates the visual call to the local VLM (`local-agent\u002Fvlcheck.py`). The structural\u002F`bbox` checks are identical for both; only who looks at the image differs.\n\n## Repo Context\n\nFor live-only edits, use the bridge endpoints first. For any bake\u002Fsource change, load:\n\n- `skills\u002Fi4h-workflow\u002Freferences\u002Frepo-map.md` for env file ownership and pattern families.\n- `skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fscene-edit-patterns.md` for bake targets, readiness rules, and camera touchpoints.\n- `skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fasset-snippets.md` when adding, moving, resizing, or replacing assets.\n- `skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fcamera-snippets.md` when adding a camera that should render, record, or feed policy\u002Ftraining.\n- `skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fbake-checklist.md` when the user says bake\u002Fsave\u002Fpersist\u002Fcommit.\n\nThen inspect the target env's YAML, env class, assets, task, and runtime files before modifying source.\n\n## Edit Lifecycle\n\nFor a normal interactive edit prompt, use exactly **one** sim\u002Fbridge window: launch or reuse one bridge, perform all requested live edits in that session, collect bake state\u002Fsnippets if needed, stop that bridge once, and then write source from the collected state. Do not stop\u002Frelaunch Isaac between edits, and do not run a fresh-source validation relaunch unless the user explicitly asks for validation\u002Fonboarding\u002Freadiness checks.\n\n1. **Live.** Apply each edit through the bridge HTTP API in the same bridge session. Capture the viewport after task-relevant changes.\n2. **Bake.** Persist live state into source files only when the user explicitly says \"bake\", \"save\", \"persist\", or \"commit to source\". First collect the live state\u002Fsnippets from the running bridge (`GET \u002Fobject`, `POST \u002Fbake`, captures, camera pose notes), then stop the bridge once and write source from that collected state.\n3. **Exit.** The **only** way to stop the bridge is to stop the arena: `workflows\u002Fagentic\u002Farena\u002Fstop.sh --env \u003Cenv>`. Do **not** kill the Isaac\u002Fbridge process, send Ctrl-C, or `curl` a made-up `\u002Fstop`\u002F`\u002Fshutdown` (there is none). \"Exit without baking\" = run that one command (no source writes, no `\u002Fbake`).\n4. **Validate only when asked.** Fresh-source validation (`local-agent\u002Fvalidate-bake.sh \u003Cenv>`) intentionally stops any bridge and launches a new sim window. Run it only for explicit validation\u002Fonboarding\u002Fready-to-commit work, and tell the user before doing so.\n\nWhile the bridge is running, do not modify `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py`, `workflows\u002Fagentic\u002Farena\u002Farena\u002Ftasks\u002F\u003Cenv>.py`, the env class, runtime, or env YAML. Source writes happen after the needed bridge state is collected and the bridge has been stopped.\n\nWhen a specific live edit returns an error, report the exact request payload and error to the user. Do not restart the bridge as a fallback.\n\n## Launch\n\nThe bridge is a **long-running foreground** process: running it inline blocks a one-shot shell forever (and the bridge dies with the call), so it must be launched **detached** and then polled for ready. Each step below is a separate bash call; variables persist in the local agent's tmux session.\n\n### Local agent — one command\n\n`.\u002Flocal-agent\u002Fbridge.sh start \u003Cenv>` does setup + detached launch + wait-for-ready and prints `RUN_DIR=...` (and the helper paths). Run it **plainly** (it takes minutes — no short `timeout`). Stop later with `.\u002Flocal-agent\u002Fbridge.sh stop \u003Cenv>`.\n\n### Manual (portable) form\n\n```bash\n# Step 1 — setup\nREPO_ROOT=\"${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)}\"; [ -d \"$REPO_ROOT\u002Fworkflows\u002Fagentic\" ] || REPO_ROOT=\"$HOME\u002Fi4h-workflows\"\nENV_ID=\u003Cenv>\nRUNS_ROOT=\"${REPO_ROOT}\u002Fworkflows\u002Fagentic\u002Fruns\"\nRUN_DIR=\"${RUNS_ROOT}\u002Fscene_edit_${ENV_ID}_$(date +%Y%m%d_%H%M%S)\"\nmkdir -p \"${RUN_DIR}\u002Flogs\" \"${RUN_DIR}\u002Fscripts\" \"${RUN_DIR}\u002Fcaptures\"\nln -sfn \"${RUN_DIR}\" \"${RUNS_ROOT}\u002F.latest\"\n\n# Step 2 — launch DETACHED (never foreground \u002F never `| tee` inline — that blocks), then wait\n\"${REPO_ROOT}\u002Fworkflows\u002Fagentic\u002Farena\u002Frun.sh\" ensure-bridge \\\n  --env \"${ENV_ID}\" \\\n  --log \"${RUN_DIR}\u002Flogs\u002Fbridge.log\"\nBRIDGE_URL=\"$(\"${REPO_ROOT}\u002Fworkflows\u002Fagentic\u002Farena\u002Frun.sh\" bridge-url --env \"${ENV_ID}\")\"\ncurl -fsS \"${BRIDGE_URL}\u002Fhealth\" >\u002Fdev\u002Fnull\n```\n\nOnce ready, `GET \"${BRIDGE_URL}\u002Fobjects\"` to enumerate scene entities. Stop only via `workflows\u002Fagentic\u002Farena\u002Fstop.sh --env \"${ENV_ID}\"` — never by killing the process.\n\n## Bridge Endpoints (env-specific port)\n\nBase URL: `BRIDGE_URL=\"$(workflows\u002Fagentic\u002Farena\u002Frun.sh bridge-url --env \u003Cenv>)\"`. The port comes from `arena.bridge_port` in `workflows\u002Fagentic\u002Fconfig\u002Fenvironments\u002F\u003Cenv>.yaml` and falls back to `8765`; `--bridge-port` overrides it. JSON responses are either `{\"ok\": true, \"result\": ...}` or `{\"ok\": false, \"error\": ...}`.\n\n| Method + Path | Purpose | Body \u002F Query |\n|---|---|---|\n| `GET \u002Fhealth` | Server readiness + endpoint discovery. | — |\n| `GET \u002Fcontext` | Exec globals, helper names, endpoint inventory. | — |\n| `GET \u002Fobjects` | List scene entities with `kind` (`articulation` \u002F `rigid` \u002F `camera` \u002F `xform`) and prim path. | — |\n| `GET \u002Fobject?name=\u003Ckey>` | Full state for one entity: `xform_ops`, `bbox`, `live` (authoritative PhysX pose), children. | `name=\u003Ckey>` or `path=\u003Cprim_path>` |\n| `GET \u002Fcameras` | List live RGB camera outputs. | — |\n| `POST \u002Fcapture` | Save camera frames and viewport as JPEG. | `{\"output_dir\": \"\u003Cabs>\", \"viewport\": true, \"cameras\": [\"\u003Cname>\", ...]}` |\n| `POST \u002Fobject\u002Fteleport` | Live-set pose for rigid bodies and articulations. | `{\"name\": \"\u003Ckey>\", \"translation\": [x,y,z], \"rotation_wxyz\": [w,x,y,z], \"zero_velocity\": true, \"env_index\": 0}` |\n| `POST \u002Fscript` | Run a trusted absolute Python file on Isaac's main loop. Globals: `ctx`, `env`, `app`, `args`, `helpers`, `stage`, `get_stage`. | `{\"path\": \"\u002Fabs\u002Fpath\u002Fto\u002Fscript.py\"}` |\n| `POST \u002Fbake` | Return Python snippets reflecting the current live xform of named entities. | `{\"names\": [\"\u003Ckey>\", ...]}` |\n\nAfter a teleport, read the `live` field from `GET \u002Fobject?name=\u003Ckey>` to verify. The `bbox` field is USD-derived and may lag a physics step.\n\n## Edit Matrix\n\n| Edit | Live (bridge) | Bake target |\n|---|---|---|\n| Move\u002Frotate rigid object | `POST \u002Fobject\u002Fteleport` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `init_state.pos`\u002F`rot` |\n| Move\u002Frotate truly-static XformPrim (no physics body anywhere in the USD — lights, decals) | `POST \u002Fscript` → `xformOp:translate` \u002F `xformOp:orient` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `init_state.pos` |\n| Move\u002Frotate `AssetBaseCfg` whose USD embeds a rigid body (e.g. `SCISSOR_TRAY_USD` trays\u002Ffixtures — kinematic **child mesh**) | `POST \u002Fscript` → `helpers.move(\"\u003Ckey>\", pos=\u002Fdpos=)` — drives the child PhysX body (raw USD writes snap back; see recipe) | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `init_state.pos` |\n| Rescale a prim | **Live-added \u002F bridge-spawned prim → re-spawn at the new size** (delete + `CuboidCfg(new).func` + re-rest; see \"Resize a live-added prim\"). **Do NOT use `xformOp:scale` on it — that scales its *position* (flings it off-screen), NOT its size.** `xformOp:scale` is only for an existing scene-asset prim. | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `spawn=...scale` |\n| Move robot stand | `POST \u002Fobject\u002Fteleport name=robot` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fenvironments\u002F\u003Cenv>_environment.py` `embodiment.set_initial_pose(...)` |\n| Add a new prim | `POST \u002Fscript` → **`sim_utils.CuboidCfg(...).func(path, cfg)` + `helpers.move(...)`** (see \"Add a prim live\" recipe) — NOT raw `pxr` USD authoring; a live-added body isn't GPU-simulated, so place it at rest height, don't tensor-query it | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` + `make_*_scene_assets()` |\n| Toggle gravity | `POST \u002Fscript` → set `physxRigidBody:disableGravity`; zero `root_lin_vel_w` \u002F `root_ang_vel_w` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `rigid_props.disable_gravity` |\n| Toggle kinematic | `POST \u002Fscript` → flip `physics:kinematicEnabled` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `rigid_props.kinematic_enabled` |\n| Change mass \u002F collider props | `POST \u002Fscript` → write `physxRigidBody:*` \u002F `physxCollision:*` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `mass_props` \u002F `collision_props` |\n| Swap a USD reference | `POST \u002Fscript` → `prim.GetReferences().SetReferences(...)` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py` `spawn.usd_path` |\n| Add\u002Fremove a camera | Use the live bridge to choose the pose from viewport\u002Fobject state; do not live-register a new IsaacLab sensor. | See \"Adding a Camera\" — bake **env-locally**, never in the shared embodiment |\n| Change task wording | preview only | env YAML `policy.language_instruction` \u002F `task_description` |\n| Change success rule | `POST \u002Fscript` → swap term on `env.unwrapped.termination_manager` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Ftasks\u002F\u003Cenv>.py` |\n| Change reset randomization range | `POST \u002Fscript` → mutate `EventTerm.pose_range`; `env.reset()` | `workflows\u002Fagentic\u002Farena\u002Farena\u002Ftasks\u002F\u003Cenv>.py` events cfg |\n\n## Live-Edit Recipes\n\nKeep `SKILL.md` as the router and load `references\u002Fscene-edit-patterns.md` for the detailed bridge recipes. Load `references\u002Fasset-snippets.md` for copyable object\u002Fasset snippets. The mandatory live-edit rules are:\n\n- Rigid bodies and articulations move through `POST \u002Fobject\u002Fteleport`, then verify with the object's `live` pose.\n- Robot stand moves use `POST \u002Fobject\u002Fteleport` with `name=robot`; derive x\u002Fy\u002Fyaw from the table bbox and current robot pose, keep the current live z, and verify the settled live pose over multiple reads.\n- For G1 or any floating-base robot stand move, an immediate successful teleport is not stability proof. Sample `GET \u002Fobject?name=robot` for at least 10-15 seconds after the move (for example once per second). Treat continuous z drop, growing roll\u002Fpitch, or x\u002Fy drift as a fall; if that happens, revert to the last stable pose or adjust target\u002Fstandoff\u002Fyaw and re-test before continuing to camera work or bake.\n- Embedded kinematic `AssetBaseCfg` props\u002Fsupport surfaces use `helpers.move`. Raw USD translation can snap back because PhysX owns the body pose.\n- Live-added bodies must be spawned through IsaacLab cfgs plus `helpers.move`, placed directly at their resting height, and never tensor-queried until a relaunch registers them with the GPU pipeline.\n- Live-added prim resize is delete + re-spawn + re-rest. `xformOp:scale` is only for existing scene assets, not bridge-spawned bodies.\n- Capture after each task-relevant edit and judge the image plus structural state before reporting success.\n\n## Adding a Camera\n\nDo not initialize a new IsaacLab `Camera`\u002F`TiledCamera` sensor through a live `\u002Fscript`. On this workflow, runtime sensor registration can block the Isaac main loop and leave `\u002Fscript`, `\u002Fcameras`, and `\u002Fbake` timing out while `\u002Fhealth` still responds. Use the live bridge to inspect objects, verify the current viewport\u002Fpose, and choose the camera eye\u002Ftarget. Then bake the camera as an env-local source sensor. Verify the baked camera with `local-agent\u002Fvalidate-bake.sh \u003Cenv>` plus camera captures only when running the explicit fresh-source validation gate. A temporary USD-only camera prim may be used only to reason about placement; it does not prove downstream policy\u002Fdataset readiness. Load `references\u002Fcamera-snippets.md` for source\u002FYAML\u002Fpolicy\u002Fdataset wiring.\n\nFor \"room camera based on current perspective view\", treat the viewport as only the first pose guess. Capture the room camera before baking; it must show the main task area and task-relevant objects after all requested edits, including the support surface, robot\u002Ftable relationship, tools\u002Fdestinations, and newly added objects. A frame that cuts off the robot body, head\u002Fhands, table, trays\u002Ftools, or new object at an image edge is a failed candidate; do not call it \"whole room\" or bake it. If the frame clips or hides those objects, zoom out before baking by moving the camera farther from the task look-at point and\u002For widening the lens, then capture again and bake only the validated view. Leave extra margin for the baked 4:3 sensor because it can be narrower than a 16:9 viewport capture.\n\nFor bake, load `references\u002Fscene-edit-patterns.md` and apply the camera checklist in one pass: env-local sensor, matching task `observations.policy` term, YAML `zenoh.camera_names`, policy camera list, dataset mapping, and any stack-specific modality config. Never add an env-specific camera to a shared embodiment class, and re-record demos after changing policy\u002Fdataset cameras.\n\n## Durable Touchpoints (bake targets)\n\n- `workflows\u002Fagentic\u002Farena\u002Farena\u002Fenvironments\u002F\u003Cenv>_environment.py`: env wiring, robot stand pose.\n- `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py`: static scene assets.\n- `workflows\u002Fagentic\u002Farena\u002Farena\u002Ftasks\u002F\u003Cenv>.py`: reset randomization, success, task text.\n- `workflows\u002Fagentic\u002Farena\u002Farena\u002Fruntimes\u002F\u003Cenv>.py`: runtime-specific camera\u002Fstate\u002Faction logic.\n- `workflows\u002Fagentic\u002Fconfig\u002Fenvironments\u002F\u003Cenv>.yaml`: cameras, policy language, dataset mappings.\n\n## Notes\n\n- `assemble_trocar` is inference-only. Do not add train hooks during a scene edit.\n- If adding\u002Fremoving cameras, update `policy.data_config`, `dataset.camera_mappings`, and the train modality config together.\n- Scissor SO-ARM generates `meta\u002Fmodality.json` from YAML splits and does not need `dataset.modality_template_path`. G1 locomanip and assemble-trocar do.\n\n## Verify (after bake)\n\nFor a normal interactive \"edit, bake, and stop\" prompt, do not relaunch Isaac after stopping the edit bridge. Run the cheap static checks and report that fresh-source validation was not run unless requested:\n\n```bash\npython -m py_compile \u003Cchanged-python-files>\npython - \u003C\u003C'PY'\nimport yaml, pathlib\nfor p in pathlib.Path('workflows\u002Fagentic\u002Fconfig\u002Fenvironments').glob('*.yaml'):\n    yaml.safe_load(p.read_text())\nPY\nworkflows\u002Fagentic\u002Farena\u002Frun.sh  --env \u003Cenv> --dry-run      # necessary, NOT sufficient\nworkflows\u002Fagentic\u002Fpolicy\u002Frun.sh --env \u003Cenv> --dry-run\n```\n\nFor validation, onboarding readiness, ready-to-commit checks, or a full bake gate, load `references\u002Fbake-checklist.md` and run `local-agent\u002Fvalidate-bake.sh \u003Cenv>`. That gate intentionally opens a fresh sim window; `RESULT: PASS` is required for validation work.\n\n## Prerequisites\n\n- Workflow set up via [[i4h-workflow-setup]] (`.venv` present); the `arena\u002Frun.sh --bridge` launch depends on it.\n- An existing env id with its scene keys (the bridge edits an env in place; preserve its ids).\n- A GPU host able to launch Isaac Sim for the bridge session.\n\n## Limitations\n\n- Live edits are not persisted until an explicit bake; only bake on user request (\"bake\"\u002F\"save\"\u002F\"persist\"\u002F\"commit to source\").\n- Support-surface rescale is source-only (`spawn.scale`) — moving an `AssetBaseCfg` surface live moves only the visual, not the collision mesh, so props fall through; relaunch to apply.\n- A live-added body is not GPU-simulated and must not be tensor-queried (a manual `create_rigid_body_view(...).get_transforms()` is a fatal CUDA fault); relaunch to simulate it.\n- While the bridge runs, do not edit `workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py`, `workflows\u002Fagentic\u002Farena\u002Farena\u002Ftasks\u002F\u003Cenv>.py`, the env class, runtime, or env YAML.\n\n## Troubleshooting\n\n- **Error:** `.venv` \u002F import fails or bridge won't launch - Cause: workflow not set up. Fix: run [[i4h-workflow-setup]] first.\n- **Error:** `GET \u002Fobjects` \u002F bridge URL unreachable - Cause: bridge not ready yet or wrong env URL. Fix: set `BRIDGE_URL=\"$(workflows\u002Fagentic\u002Farena\u002Frun.sh bridge-url --env \u003Cenv>)\"` and wait for `[agentic-arena] scene-edit bridge ready` in `${RUN_DIR}\u002Flogs\u002Fbridge.log` before calling endpoints.\n- **Error:** object moves for one frame then snaps back - Cause: it's a kinematic embedded rigid body (`SCISSOR_TRAY_USD`\u002F`SCISSOR_TABLE_USD`), so `\u002Fobject\u002Fteleport` and raw `xformOp:translate` don't hold. Fix: use `helpers.move(\"\u003Ckey>\", ...)` to drive the PhysX body.\n- **Error:** a live edit returns `{\"ok\": false, \"error\": ...}` - Cause: invalid request for that entity. Fix: report the exact payload and error to the user; do not restart the bridge as a fallback.\n\n## Final Response\n\nLive session: report each bridge action, verified live pose, capture path, and whether source was baked from the collected bridge state.\n\nAfter bake: report files touched, cheap static check results, and final bridge state. Report fresh-source validation results only if the user explicitly asked for that validation gate.\n",{"data":35,"body":45},{"name":4,"version":36,"description":6,"license":26,"metadata":37},"0.7.0",{"author":38,"tags":39},"Isaac for Healthcare Team \u003Cisaac-for-healthcare-support@nvidia.com>",[40,41,42,43,44],"isaac-for-healthcare","i4h","agentic-workflow","scene-edit","environment",{"type":46,"children":47},"root",[48,56,63,78,84,113,455,461,644,650,655,713,718,724,736,856,876,881,887,906,913,954,960,1566,1587,1593,1653,2012,2038,2044,2691,2697,2726,2830,2836,2907,2912,2940,2946,3000,3006,3061,3067,3072,3244,3272,3278,3312,3318,3377,3383,3501,3507,3512,3517],{"type":49,"tag":50,"props":51,"children":52},"element","h1",{"id":4},[53],{"type":54,"value":55},"text","i4h Workflow — Scene Edit",{"type":49,"tag":57,"props":58,"children":60},"h2",{"id":59},"purpose",[61],{"type":54,"value":62},"Purpose",{"type":49,"tag":64,"props":65,"children":66},"p",{},[67,69,76],{"type":54,"value":68},"Edit an existing env's scene in place via the ",{"type":49,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":54,"value":75},"--bridge",{"type":54,"value":77}," scene-edit session — move\u002Fscale\u002Fswap objects, adjust cameras, or tweak task description, success bounds, or randomization. Use when the user asks to edit a scene or to launch\u002Frun\u002Fopen an env in edit mode; for creating a brand-new env see [[i4h-workflow-create]].",{"type":49,"tag":57,"props":79,"children":81},{"id":80},"base-code",[82],{"type":54,"value":83},"Base Code",{"type":49,"tag":64,"props":85,"children":86},{},[87,89,95,97,103,105,111],{"type":54,"value":88},"These steps drive the i4h-workflows base code (the ",{"type":49,"tag":70,"props":90,"children":92},{"className":91},[],[93],{"type":54,"value":94},"workflows\u002Fagentic\u002F",{"type":54,"value":96}," tree). To reuse an existing checkout, set ",{"type":49,"tag":70,"props":98,"children":100},{"className":99},[],[101],{"type":54,"value":102},"I4H_WORKFLOWS",{"type":54,"value":104}," to its path (no clone happens). Otherwise this resolves the current repo, or clones to ",{"type":49,"tag":70,"props":106,"children":108},{"className":107},[],[109],{"type":54,"value":110},"~\u002Fi4h-workflows",{"type":54,"value":112}," — pick that default without prompting. Run every command below from the resolved root:",{"type":49,"tag":114,"props":115,"children":120},"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Resolve the i4h-workflows base code (provides workflows\u002Fagentic\u002F).\nROOT=\"${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)}\"\nif [ ! -d \"$ROOT\u002Fworkflows\u002Fagentic\" ]; then\n  ROOT=\"${I4H_WORKFLOWS:-$HOME\u002Fi4h-workflows}\"\n  [ -d \"$ROOT\u002Fworkflows\u002Fagentic\" ] || git clone https:\u002F\u002Fgithub.com\u002Fisaac-for-healthcare\u002Fi4h-workflows \"$ROOT\"\nfi\nexport I4H_WORKFLOWS=\"$ROOT\"; cd \"$ROOT\"\n","bash","",[121],{"type":49,"tag":70,"props":122,"children":123},{"__ignoreMap":119},[124,136,226,281,324,392,401],{"type":49,"tag":125,"props":126,"children":129},"span",{"class":127,"line":128},"line",1,[130],{"type":49,"tag":125,"props":131,"children":133},{"style":132},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[134],{"type":54,"value":135},"# Resolve the i4h-workflows base code (provides workflows\u002Fagentic\u002F).\n",{"type":49,"tag":125,"props":137,"children":139},{"class":127,"line":138},2,[140,146,152,157,161,166,172,177,182,187,192,197,202,207,211,216,221],{"type":49,"tag":125,"props":141,"children":143},{"style":142},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[144],{"type":54,"value":145},"ROOT",{"type":49,"tag":125,"props":147,"children":149},{"style":148},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[150],{"type":54,"value":151},"=",{"type":49,"tag":125,"props":153,"children":154},{"style":148},[155],{"type":54,"value":156},"\"${",{"type":49,"tag":125,"props":158,"children":159},{"style":142},[160],{"type":54,"value":102},{"type":49,"tag":125,"props":162,"children":163},{"style":148},[164],{"type":54,"value":165},":-",{"type":49,"tag":125,"props":167,"children":169},{"style":168},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[170],{"type":54,"value":171},"$(",{"type":49,"tag":125,"props":173,"children":174},{"style":142},[175],{"type":54,"value":176},"git",{"type":49,"tag":125,"props":178,"children":179},{"style":142},[180],{"type":54,"value":181}," rev-parse",{"type":49,"tag":125,"props":183,"children":184},{"style":142},[185],{"type":54,"value":186}," --show-toplevel",{"type":49,"tag":125,"props":188,"children":189},{"style":142},[190],{"type":54,"value":191}," 2",{"type":49,"tag":125,"props":193,"children":194},{"style":168},[195],{"type":54,"value":196},">",{"type":49,"tag":125,"props":198,"children":199},{"style":148},[200],{"type":54,"value":201},"\u002F",{"type":49,"tag":125,"props":203,"children":204},{"style":142},[205],{"type":54,"value":206},"dev",{"type":49,"tag":125,"props":208,"children":209},{"style":148},[210],{"type":54,"value":201},{"type":49,"tag":125,"props":212,"children":213},{"style":142},[214],{"type":54,"value":215},"null",{"type":49,"tag":125,"props":217,"children":218},{"style":168},[219],{"type":54,"value":220},")",{"type":49,"tag":125,"props":222,"children":223},{"style":148},[224],{"type":54,"value":225},"}\"\n",{"type":49,"tag":125,"props":227,"children":229},{"class":127,"line":228},3,[230,236,241,246,251,256,261,266,271,276],{"type":49,"tag":125,"props":231,"children":233},{"style":232},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[234],{"type":54,"value":235},"if",{"type":49,"tag":125,"props":237,"children":238},{"style":148},[239],{"type":54,"value":240}," [",{"type":49,"tag":125,"props":242,"children":243},{"style":148},[244],{"type":54,"value":245}," !",{"type":49,"tag":125,"props":247,"children":248},{"style":148},[249],{"type":54,"value":250}," -d",{"type":49,"tag":125,"props":252,"children":253},{"style":148},[254],{"type":54,"value":255}," \"",{"type":49,"tag":125,"props":257,"children":258},{"style":142},[259],{"type":54,"value":260},"$ROOT",{"type":49,"tag":125,"props":262,"children":263},{"style":168},[264],{"type":54,"value":265},"\u002Fworkflows\u002Fagentic",{"type":49,"tag":125,"props":267,"children":268},{"style":148},[269],{"type":54,"value":270},"\"",{"type":49,"tag":125,"props":272,"children":273},{"style":148},[274],{"type":54,"value":275}," ];",{"type":49,"tag":125,"props":277,"children":278},{"style":232},[279],{"type":54,"value":280}," then\n",{"type":49,"tag":125,"props":282,"children":284},{"class":127,"line":283},4,[285,290,294,298,302,306,311,315,320],{"type":49,"tag":125,"props":286,"children":287},{"style":142},[288],{"type":54,"value":289},"  ROOT",{"type":49,"tag":125,"props":291,"children":292},{"style":148},[293],{"type":54,"value":151},{"type":49,"tag":125,"props":295,"children":296},{"style":148},[297],{"type":54,"value":156},{"type":49,"tag":125,"props":299,"children":300},{"style":142},[301],{"type":54,"value":102},{"type":49,"tag":125,"props":303,"children":304},{"style":148},[305],{"type":54,"value":165},{"type":49,"tag":125,"props":307,"children":308},{"style":142},[309],{"type":54,"value":310},"$HOME",{"type":49,"tag":125,"props":312,"children":313},{"style":148},[314],{"type":54,"value":201},{"type":49,"tag":125,"props":316,"children":317},{"style":142},[318],{"type":54,"value":319},"i4h-workflows",{"type":49,"tag":125,"props":321,"children":322},{"style":148},[323],{"type":54,"value":225},{"type":49,"tag":125,"props":325,"children":327},{"class":127,"line":326},5,[328,333,337,341,345,349,353,358,363,369,374,379,383,387],{"type":49,"tag":125,"props":329,"children":330},{"style":148},[331],{"type":54,"value":332},"  [",{"type":49,"tag":125,"props":334,"children":335},{"style":148},[336],{"type":54,"value":250},{"type":49,"tag":125,"props":338,"children":339},{"style":148},[340],{"type":54,"value":255},{"type":49,"tag":125,"props":342,"children":343},{"style":142},[344],{"type":54,"value":260},{"type":49,"tag":125,"props":346,"children":347},{"style":168},[348],{"type":54,"value":265},{"type":49,"tag":125,"props":350,"children":351},{"style":148},[352],{"type":54,"value":270},{"type":49,"tag":125,"props":354,"children":355},{"style":148},[356],{"type":54,"value":357}," ]",{"type":49,"tag":125,"props":359,"children":360},{"style":148},[361],{"type":54,"value":362}," ||",{"type":49,"tag":125,"props":364,"children":366},{"style":365},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[367],{"type":54,"value":368}," git",{"type":49,"tag":125,"props":370,"children":371},{"style":168},[372],{"type":54,"value":373}," clone",{"type":49,"tag":125,"props":375,"children":376},{"style":168},[377],{"type":54,"value":378}," https:\u002F\u002Fgithub.com\u002Fisaac-for-healthcare\u002Fi4h-workflows",{"type":49,"tag":125,"props":380,"children":381},{"style":148},[382],{"type":54,"value":255},{"type":49,"tag":125,"props":384,"children":385},{"style":142},[386],{"type":54,"value":260},{"type":49,"tag":125,"props":388,"children":389},{"style":148},[390],{"type":54,"value":391},"\"\n",{"type":49,"tag":125,"props":393,"children":395},{"class":127,"line":394},6,[396],{"type":49,"tag":125,"props":397,"children":398},{"style":232},[399],{"type":54,"value":400},"fi\n",{"type":49,"tag":125,"props":402,"children":404},{"class":127,"line":403},7,[405,411,416,420,424,428,432,437,443,447,451],{"type":49,"tag":125,"props":406,"children":408},{"style":407},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[409],{"type":54,"value":410},"export",{"type":49,"tag":125,"props":412,"children":413},{"style":142},[414],{"type":54,"value":415}," I4H_WORKFLOWS",{"type":49,"tag":125,"props":417,"children":418},{"style":148},[419],{"type":54,"value":151},{"type":49,"tag":125,"props":421,"children":422},{"style":148},[423],{"type":54,"value":270},{"type":49,"tag":125,"props":425,"children":426},{"style":142},[427],{"type":54,"value":260},{"type":49,"tag":125,"props":429,"children":430},{"style":148},[431],{"type":54,"value":270},{"type":49,"tag":125,"props":433,"children":434},{"style":148},[435],{"type":54,"value":436},";",{"type":49,"tag":125,"props":438,"children":440},{"style":439},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[441],{"type":54,"value":442}," cd",{"type":49,"tag":125,"props":444,"children":445},{"style":148},[446],{"type":54,"value":255},{"type":49,"tag":125,"props":448,"children":449},{"style":142},[450],{"type":54,"value":260},{"type":49,"tag":125,"props":452,"children":453},{"style":148},[454],{"type":54,"value":391},{"type":49,"tag":57,"props":456,"children":458},{"id":457},"basics",[459],{"type":54,"value":460},"Basics",{"type":49,"tag":462,"props":463,"children":464},"ul",{},[465,520,545,550,583,604],{"type":49,"tag":466,"props":467,"children":468},"li",{},[469,475,477,482,484,489,491,497,498,504,505,511,512,518],{"type":49,"tag":470,"props":471,"children":472},"strong",{},[473],{"type":54,"value":474},"Editing a scene is LIVE-ONLY by default.",{"type":54,"value":476}," \"Edit the scene\" \u002F \"edit mode\" means: apply every change through the bridge, ",{"type":49,"tag":470,"props":478,"children":479},{},[480],{"type":54,"value":481},"never modify source files and never restart the bridge",{"type":54,"value":483}," — the user does not need to say \"live mode\" \u002F \"don't change source\" \u002F \"don't restart\"; that is always the default. Persist to source (bake) ",{"type":49,"tag":470,"props":485,"children":486},{},[487],{"type":54,"value":488},"only",{"type":54,"value":490}," when the user explicitly says so (",{"type":49,"tag":70,"props":492,"children":494},{"className":493},[],[495],{"type":54,"value":496},"bake",{"type":54,"value":201},{"type":49,"tag":70,"props":499,"children":501},{"className":500},[],[502],{"type":54,"value":503},"save",{"type":54,"value":201},{"type":49,"tag":70,"props":506,"children":508},{"className":507},[],[509],{"type":54,"value":510},"persist",{"type":54,"value":201},{"type":49,"tag":70,"props":513,"children":515},{"className":514},[],[516],{"type":54,"value":517},"commit",{"type":54,"value":519},") as a final step; \"exit without baking\" or no bake instruction = stop the bridge and leave source untouched.",{"type":49,"tag":466,"props":521,"children":522},{},[523,528,530,536,538,543],{"type":49,"tag":470,"props":524,"children":525},{},[526],{"type":54,"value":527},"Do only what's asked — launching edit mode is not a cue to edit.",{"type":54,"value":529}," \"Run\u002Fopen the env in edit mode\" with no specific edit = launch the bridge, confirm ready (",{"type":49,"tag":70,"props":531,"children":533},{"className":532},[],[534],{"type":54,"value":535},"GET \u002Fobjects",{"type":54,"value":537},"), then ",{"type":49,"tag":470,"props":539,"children":540},{},[541],{"type":54,"value":542},"stop and report it's ready, awaiting instructions.",{"type":54,"value":544}," Apply a scene edit only when the user explicitly requests it in the current prompt. Never invent or preempt edits (moving the robot, adding props, etc.), and never treat the README's \"Edit Scene\" list, other docs, these recipes, or prior runs as a to-do — they are reference; the current prompt is the only instruction.",{"type":49,"tag":466,"props":546,"children":547},{},[548],{"type":54,"value":549},"Preserve env ids and scene keys.",{"type":49,"tag":466,"props":551,"children":552},{},[553,558,560,565,567,573,575,581],{"type":49,"tag":470,"props":554,"children":555},{},[556],{"type":54,"value":557},"Source paths are relative to the repo root",{"type":54,"value":559}," (where the agent's edit\u002Fwrite tool runs) — keep the ",{"type":49,"tag":70,"props":561,"children":563},{"className":562},[],[564],{"type":54,"value":94},{"type":54,"value":566}," prefix on every one, and note the package is ",{"type":49,"tag":70,"props":568,"children":570},{"className":569},[],[571],{"type":54,"value":572},"arena\u002Farena\u002F\u003Csubdir>\u002F",{"type":54,"value":574},". A bare ",{"type":49,"tag":70,"props":576,"children":578},{"className":577},[],[579],{"type":54,"value":580},"arena\u002F...",{"type":54,"value":582}," resolves to the wrong place.",{"type":49,"tag":466,"props":584,"children":585},{},[586,588,594,596,602],{"type":54,"value":587},"Every bridge artifact (scripts, captures, logs) lives under the session's ",{"type":49,"tag":70,"props":589,"children":591},{"className":590},[],[592],{"type":54,"value":593},"${RUN_DIR}",{"type":54,"value":595},". Never use ",{"type":49,"tag":70,"props":597,"children":599},{"className":598},[],[600],{"type":54,"value":601},"\u002Ftmp",{"type":54,"value":603},".",{"type":49,"tag":466,"props":605,"children":606},{},[607,612,614,619,621,626,628,634,636,642],{"type":49,"tag":470,"props":608,"children":609},{},[610],{"type":54,"value":611},"Visual judgment — use your own eyes if you have them.",{"type":54,"value":613}," When a step says to judge a capture, a ",{"type":49,"tag":470,"props":615,"children":616},{},[617],{"type":54,"value":618},"vision-capable CLI agent (Claude\u002FCodex) reads the JPEG directly with its own model",{"type":54,"value":620}," — do not depend on the local VLM. Only the ",{"type":49,"tag":470,"props":622,"children":623},{},[624],{"type":54,"value":625},"blind local coding agent",{"type":54,"value":627}," delegates the visual call to the local VLM (",{"type":49,"tag":70,"props":629,"children":631},{"className":630},[],[632],{"type":54,"value":633},"local-agent\u002Fvlcheck.py",{"type":54,"value":635},"). The structural\u002F",{"type":49,"tag":70,"props":637,"children":639},{"className":638},[],[640],{"type":54,"value":641},"bbox",{"type":54,"value":643}," checks are identical for both; only who looks at the image differs.",{"type":49,"tag":57,"props":645,"children":647},{"id":646},"repo-context",[648],{"type":54,"value":649},"Repo Context",{"type":49,"tag":64,"props":651,"children":652},{},[653],{"type":54,"value":654},"For live-only edits, use the bridge endpoints first. For any bake\u002Fsource change, load:",{"type":49,"tag":462,"props":656,"children":657},{},[658,669,680,691,702],{"type":49,"tag":466,"props":659,"children":660},{},[661,667],{"type":49,"tag":70,"props":662,"children":664},{"className":663},[],[665],{"type":54,"value":666},"skills\u002Fi4h-workflow\u002Freferences\u002Frepo-map.md",{"type":54,"value":668}," for env file ownership and pattern families.",{"type":49,"tag":466,"props":670,"children":671},{},[672,678],{"type":49,"tag":70,"props":673,"children":675},{"className":674},[],[676],{"type":54,"value":677},"skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fscene-edit-patterns.md",{"type":54,"value":679}," for bake targets, readiness rules, and camera touchpoints.",{"type":49,"tag":466,"props":681,"children":682},{},[683,689],{"type":49,"tag":70,"props":684,"children":686},{"className":685},[],[687],{"type":54,"value":688},"skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fasset-snippets.md",{"type":54,"value":690}," when adding, moving, resizing, or replacing assets.",{"type":49,"tag":466,"props":692,"children":693},{},[694,700],{"type":49,"tag":70,"props":695,"children":697},{"className":696},[],[698],{"type":54,"value":699},"skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fcamera-snippets.md",{"type":54,"value":701}," when adding a camera that should render, record, or feed policy\u002Ftraining.",{"type":49,"tag":466,"props":703,"children":704},{},[705,711],{"type":49,"tag":70,"props":706,"children":708},{"className":707},[],[709],{"type":54,"value":710},"skills\u002Fi4h-workflow-scene-edit\u002Freferences\u002Fbake-checklist.md",{"type":54,"value":712}," when the user says bake\u002Fsave\u002Fpersist\u002Fcommit.",{"type":49,"tag":64,"props":714,"children":715},{},[716],{"type":54,"value":717},"Then inspect the target env's YAML, env class, assets, task, and runtime files before modifying source.",{"type":49,"tag":57,"props":719,"children":721},{"id":720},"edit-lifecycle",[722],{"type":54,"value":723},"Edit Lifecycle",{"type":49,"tag":64,"props":725,"children":726},{},[727,729,734],{"type":54,"value":728},"For a normal interactive edit prompt, use exactly ",{"type":49,"tag":470,"props":730,"children":731},{},[732],{"type":54,"value":733},"one",{"type":54,"value":735}," sim\u002Fbridge window: launch or reuse one bridge, perform all requested live edits in that session, collect bake state\u002Fsnippets if needed, stop that bridge once, and then write source from the collected state. Do not stop\u002Frelaunch Isaac between edits, and do not run a fresh-source validation relaunch unless the user explicitly asks for validation\u002Fonboarding\u002Freadiness checks.",{"type":49,"tag":737,"props":738,"children":739},"ol",{},[740,750,776,838],{"type":49,"tag":466,"props":741,"children":742},{},[743,748],{"type":49,"tag":470,"props":744,"children":745},{},[746],{"type":54,"value":747},"Live.",{"type":54,"value":749}," Apply each edit through the bridge HTTP API in the same bridge session. Capture the viewport after task-relevant changes.",{"type":49,"tag":466,"props":751,"children":752},{},[753,758,760,766,768,774],{"type":49,"tag":470,"props":754,"children":755},{},[756],{"type":54,"value":757},"Bake.",{"type":54,"value":759}," Persist live state into source files only when the user explicitly says \"bake\", \"save\", \"persist\", or \"commit to source\". First collect the live state\u002Fsnippets from the running bridge (",{"type":49,"tag":70,"props":761,"children":763},{"className":762},[],[764],{"type":54,"value":765},"GET \u002Fobject",{"type":54,"value":767},", ",{"type":49,"tag":70,"props":769,"children":771},{"className":770},[],[772],{"type":54,"value":773},"POST \u002Fbake",{"type":54,"value":775},", captures, camera pose notes), then stop the bridge once and write source from that collected state.",{"type":49,"tag":466,"props":777,"children":778},{},[779,784,786,790,792,798,800,805,807,813,815,821,822,828,830,836],{"type":49,"tag":470,"props":780,"children":781},{},[782],{"type":54,"value":783},"Exit.",{"type":54,"value":785}," The ",{"type":49,"tag":470,"props":787,"children":788},{},[789],{"type":54,"value":488},{"type":54,"value":791}," way to stop the bridge is to stop the arena: ",{"type":49,"tag":70,"props":793,"children":795},{"className":794},[],[796],{"type":54,"value":797},"workflows\u002Fagentic\u002Farena\u002Fstop.sh --env \u003Cenv>",{"type":54,"value":799},". Do ",{"type":49,"tag":470,"props":801,"children":802},{},[803],{"type":54,"value":804},"not",{"type":54,"value":806}," kill the Isaac\u002Fbridge process, send Ctrl-C, or ",{"type":49,"tag":70,"props":808,"children":810},{"className":809},[],[811],{"type":54,"value":812},"curl",{"type":54,"value":814}," a made-up ",{"type":49,"tag":70,"props":816,"children":818},{"className":817},[],[819],{"type":54,"value":820},"\u002Fstop",{"type":54,"value":201},{"type":49,"tag":70,"props":823,"children":825},{"className":824},[],[826],{"type":54,"value":827},"\u002Fshutdown",{"type":54,"value":829}," (there is none). \"Exit without baking\" = run that one command (no source writes, no ",{"type":49,"tag":70,"props":831,"children":833},{"className":832},[],[834],{"type":54,"value":835},"\u002Fbake",{"type":54,"value":837},").",{"type":49,"tag":466,"props":839,"children":840},{},[841,846,848,854],{"type":49,"tag":470,"props":842,"children":843},{},[844],{"type":54,"value":845},"Validate only when asked.",{"type":54,"value":847}," Fresh-source validation (",{"type":49,"tag":70,"props":849,"children":851},{"className":850},[],[852],{"type":54,"value":853},"local-agent\u002Fvalidate-bake.sh \u003Cenv>",{"type":54,"value":855},") intentionally stops any bridge and launches a new sim window. Run it only for explicit validation\u002Fonboarding\u002Fready-to-commit work, and tell the user before doing so.",{"type":49,"tag":64,"props":857,"children":858},{},[859,861,867,868,874],{"type":54,"value":860},"While the bridge is running, do not modify ",{"type":49,"tag":70,"props":862,"children":864},{"className":863},[],[865],{"type":54,"value":866},"workflows\u002Fagentic\u002Farena\u002Farena\u002Fassets\u002F\u003Cenv>.py",{"type":54,"value":767},{"type":49,"tag":70,"props":869,"children":871},{"className":870},[],[872],{"type":54,"value":873},"workflows\u002Fagentic\u002Farena\u002Farena\u002Ftasks\u002F\u003Cenv>.py",{"type":54,"value":875},", the env class, runtime, or env YAML. Source writes happen after the needed bridge state is collected and the bridge has been stopped.",{"type":49,"tag":64,"props":877,"children":878},{},[879],{"type":54,"value":880},"When a specific live edit returns an error, report the exact request payload and error to the user. Do not restart the bridge as a fallback.",{"type":49,"tag":57,"props":882,"children":884},{"id":883},"launch",[885],{"type":54,"value":886},"Launch",{"type":49,"tag":64,"props":888,"children":889},{},[890,892,897,899,904],{"type":54,"value":891},"The bridge is a ",{"type":49,"tag":470,"props":893,"children":894},{},[895],{"type":54,"value":896},"long-running foreground",{"type":54,"value":898}," process: running it inline blocks a one-shot shell forever (and the bridge dies with the call), so it must be launched ",{"type":49,"tag":470,"props":900,"children":901},{},[902],{"type":54,"value":903},"detached",{"type":54,"value":905}," and then polled for ready. Each step below is a separate bash call; variables persist in the local agent's tmux session.",{"type":49,"tag":907,"props":908,"children":910},"h3",{"id":909},"local-agent-one-command",[911],{"type":54,"value":912},"Local agent — one command",{"type":49,"tag":64,"props":914,"children":915},{},[916,922,924,930,932,937,939,945,947,953],{"type":49,"tag":70,"props":917,"children":919},{"className":918},[],[920],{"type":54,"value":921},".\u002Flocal-agent\u002Fbridge.sh start \u003Cenv>",{"type":54,"value":923}," does setup + detached launch + wait-for-ready and prints ",{"type":49,"tag":70,"props":925,"children":927},{"className":926},[],[928],{"type":54,"value":929},"RUN_DIR=...",{"type":54,"value":931}," (and the helper paths). Run it ",{"type":49,"tag":470,"props":933,"children":934},{},[935],{"type":54,"value":936},"plainly",{"type":54,"value":938}," (it takes minutes — no short ",{"type":49,"tag":70,"props":940,"children":942},{"className":941},[],[943],{"type":54,"value":944},"timeout",{"type":54,"value":946},"). Stop later with ",{"type":49,"tag":70,"props":948,"children":950},{"className":949},[],[951],{"type":54,"value":952},".\u002Flocal-agent\u002Fbridge.sh stop \u003Cenv>",{"type":54,"value":603},{"type":49,"tag":907,"props":955,"children":957},{"id":956},"manual-portable-form",[958],{"type":54,"value":959},"Manual (portable) form",{"type":49,"tag":114,"props":961,"children":963},{"className":116,"code":962,"language":118,"meta":119,"style":119},"# Step 1 — setup\nREPO_ROOT=\"${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)}\"; [ -d \"$REPO_ROOT\u002Fworkflows\u002Fagentic\" ] || REPO_ROOT=\"$HOME\u002Fi4h-workflows\"\nENV_ID=\u003Cenv>\nRUNS_ROOT=\"${REPO_ROOT}\u002Fworkflows\u002Fagentic\u002Fruns\"\nRUN_DIR=\"${RUNS_ROOT}\u002Fscene_edit_${ENV_ID}_$(date +%Y%m%d_%H%M%S)\"\nmkdir -p \"${RUN_DIR}\u002Flogs\" \"${RUN_DIR}\u002Fscripts\" \"${RUN_DIR}\u002Fcaptures\"\nln -sfn \"${RUN_DIR}\" \"${RUNS_ROOT}\u002F.latest\"\n\n# Step 2 — launch DETACHED (never foreground \u002F never `| tee` inline — that blocks), then wait\n\"${REPO_ROOT}\u002Fworkflows\u002Fagentic\u002Farena\u002Frun.sh\" ensure-bridge \\\n  --env \"${ENV_ID}\" \\\n  --log \"${RUN_DIR}\u002Flogs\u002Fbridge.log\"\nBRIDGE_URL=\"$(\"${REPO_ROOT}\u002Fworkflows\u002Fagentic\u002Farena\u002Frun.sh\" bridge-url --env \"${ENV_ID}\")\"\ncurl -fsS \"${BRIDGE_URL}\u002Fhealth\" >\u002Fdev\u002Fnull\n",[964],{"type":49,"tag":70,"props":965,"children":966},{"__ignoreMap":119},[967,975,1111,1134,1168,1234,1311,1357,1367,1376,1411,1436,1466,1522],{"type":49,"tag":125,"props":968,"children":969},{"class":127,"line":128},[970],{"type":49,"tag":125,"props":971,"children":972},{"style":132},[973],{"type":54,"value":974},"# Step 1 — setup\n",{"type":49,"tag":125,"props":976,"children":977},{"class":127,"line":138},[978,983,987,991,995,999,1003,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1048,1052,1056,1060,1064,1069,1073,1077,1081,1085,1090,1094,1098,1102,1107],{"type":49,"tag":125,"props":979,"children":980},{"style":142},[981],{"type":54,"value":982},"REPO_ROOT",{"type":49,"tag":125,"props":984,"children":985},{"style":148},[986],{"type":54,"value":151},{"type":49,"tag":125,"props":988,"children":989},{"style":148},[990],{"type":54,"value":156},{"type":49,"tag":125,"props":992,"children":993},{"style":142},[994],{"type":54,"value":102},{"type":49,"tag":125,"props":996,"children":997},{"style":148},[998],{"type":54,"value":165},{"type":49,"tag":125,"props":1000,"children":1001},{"style":168},[1002],{"type":54,"value":171},{"type":49,"tag":125,"props":1004,"children":1005},{"style":142},[1006],{"type":54,"value":176},{"type":49,"tag":125,"props":1008,"children":1009},{"style":142},[1010],{"type":54,"value":181},{"type":49,"tag":125,"props":1012,"children":1013},{"style":142},[1014],{"type":54,"value":186},{"type":49,"tag":125,"props":1016,"children":1017},{"style":142},[1018],{"type":54,"value":191},{"type":49,"tag":125,"props":1020,"children":1021},{"style":168},[1022],{"type":54,"value":196},{"type":49,"tag":125,"props":1024,"children":1025},{"style":148},[1026],{"type":54,"value":201},{"type":49,"tag":125,"props":1028,"children":1029},{"style":142},[1030],{"type":54,"value":206},{"type":49,"tag":125,"props":1032,"children":1033},{"style":148},[1034],{"type":54,"value":201},{"type":49,"tag":125,"props":1036,"children":1037},{"style":142},[1038],{"type":54,"value":215},{"type":49,"tag":125,"props":1040,"children":1041},{"style":168},[1042],{"type":54,"value":220},{"type":49,"tag":125,"props":1044,"children":1045},{"style":148},[1046],{"type":54,"value":1047},"}\"",{"type":49,"tag":125,"props":1049,"children":1050},{"style":148},[1051],{"type":54,"value":436},{"type":49,"tag":125,"props":1053,"children":1054},{"style":148},[1055],{"type":54,"value":240},{"type":49,"tag":125,"props":1057,"children":1058},{"style":148},[1059],{"type":54,"value":250},{"type":49,"tag":125,"props":1061,"children":1062},{"style":148},[1063],{"type":54,"value":255},{"type":49,"tag":125,"props":1065,"children":1066},{"style":142},[1067],{"type":54,"value":1068},"$REPO_ROOT",{"type":49,"tag":125,"props":1070,"children":1071},{"style":168},[1072],{"type":54,"value":265},{"type":49,"tag":125,"props":1074,"children":1075},{"style":148},[1076],{"type":54,"value":270},{"type":49,"tag":125,"props":1078,"children":1079},{"style":148},[1080],{"type":54,"value":357},{"type":49,"tag":125,"props":1082,"children":1083},{"style":148},[1084],{"type":54,"value":362},{"type":49,"tag":125,"props":1086,"children":1087},{"style":142},[1088],{"type":54,"value":1089}," REPO_ROOT",{"type":49,"tag":125,"props":1091,"children":1092},{"style":148},[1093],{"type":54,"value":151},{"type":49,"tag":125,"props":1095,"children":1096},{"style":148},[1097],{"type":54,"value":270},{"type":49,"tag":125,"props":1099,"children":1100},{"style":142},[1101],{"type":54,"value":310},{"type":49,"tag":125,"props":1103,"children":1104},{"style":168},[1105],{"type":54,"value":1106},"\u002Fi4h-workflows",{"type":49,"tag":125,"props":1108,"children":1109},{"style":148},[1110],{"type":54,"value":391},{"type":49,"tag":125,"props":1112,"children":1113},{"class":127,"line":228},[1114,1119,1124,1129],{"type":49,"tag":125,"props":1115,"children":1116},{"style":142},[1117],{"type":54,"value":1118},"ENV_ID",{"type":49,"tag":125,"props":1120,"children":1121},{"style":148},[1122],{"type":54,"value":1123},"=\u003C",{"type":49,"tag":125,"props":1125,"children":1126},{"style":168},[1127],{"type":54,"value":1128},"env",{"type":49,"tag":125,"props":1130,"children":1131},{"style":148},[1132],{"type":54,"value":1133},">\n",{"type":49,"tag":125,"props":1135,"children":1136},{"class":127,"line":283},[1137,1142,1146,1150,1154,1159,1164],{"type":49,"tag":125,"props":1138,"children":1139},{"style":142},[1140],{"type":54,"value":1141},"RUNS_ROOT",{"type":49,"tag":125,"props":1143,"children":1144},{"style":148},[1145],{"type":54,"value":151},{"type":49,"tag":125,"props":1147,"children":1148},{"style":148},[1149],{"type":54,"value":156},{"type":49,"tag":125,"props":1151,"children":1152},{"style":142},[1153],{"type":54,"value":982},{"type":49,"tag":125,"props":1155,"children":1156},{"style":148},[1157],{"type":54,"value":1158},"}",{"type":49,"tag":125,"props":1160,"children":1161},{"style":168},[1162],{"type":54,"value":1163},"\u002Fworkflows\u002Fagentic\u002Fruns",{"type":49,"tag":125,"props":1165,"children":1166},{"style":148},[1167],{"type":54,"value":391},{"type":49,"tag":125,"props":1169,"children":1170},{"class":127,"line":326},[1171,1176,1180,1184,1188,1192,1197,1202,1206,1210,1215,1219,1224,1229],{"type":49,"tag":125,"props":1172,"children":1173},{"style":142},[1174],{"type":54,"value":1175},"RUN_DIR",{"type":49,"tag":125,"props":1177,"children":1178},{"style":148},[1179],{"type":54,"value":151},{"type":49,"tag":125,"props":1181,"children":1182},{"style":148},[1183],{"type":54,"value":156},{"type":49,"tag":125,"props":1185,"children":1186},{"style":142},[1187],{"type":54,"value":1141},{"type":49,"tag":125,"props":1189,"children":1190},{"style":148},[1191],{"type":54,"value":1158},{"type":49,"tag":125,"props":1193,"children":1194},{"style":168},[1195],{"type":54,"value":1196},"\u002Fscene_edit_",{"type":49,"tag":125,"props":1198,"children":1199},{"style":148},[1200],{"type":54,"value":1201},"${",{"type":49,"tag":125,"props":1203,"children":1204},{"style":142},[1205],{"type":54,"value":1118},{"type":49,"tag":125,"props":1207,"children":1208},{"style":148},[1209],{"type":54,"value":1158},{"type":49,"tag":125,"props":1211,"children":1212},{"style":168},[1213],{"type":54,"value":1214},"_",{"type":49,"tag":125,"props":1216,"children":1217},{"style":148},[1218],{"type":54,"value":171},{"type":49,"tag":125,"props":1220,"children":1221},{"style":365},[1222],{"type":54,"value":1223},"date",{"type":49,"tag":125,"props":1225,"children":1226},{"style":168},[1227],{"type":54,"value":1228}," +%Y%m%d_%H%M%S",{"type":49,"tag":125,"props":1230,"children":1231},{"style":148},[1232],{"type":54,"value":1233},")\"\n",{"type":49,"tag":125,"props":1235,"children":1236},{"class":127,"line":394},[1237,1242,1247,1252,1256,1260,1265,1269,1273,1277,1281,1286,1290,1294,1298,1302,1307],{"type":49,"tag":125,"props":1238,"children":1239},{"style":365},[1240],{"type":54,"value":1241},"mkdir",{"type":49,"tag":125,"props":1243,"children":1244},{"style":168},[1245],{"type":54,"value":1246}," -p",{"type":49,"tag":125,"props":1248,"children":1249},{"style":148},[1250],{"type":54,"value":1251}," \"${",{"type":49,"tag":125,"props":1253,"children":1254},{"style":142},[1255],{"type":54,"value":1175},{"type":49,"tag":125,"props":1257,"children":1258},{"style":148},[1259],{"type":54,"value":1158},{"type":49,"tag":125,"props":1261,"children":1262},{"style":168},[1263],{"type":54,"value":1264},"\u002Flogs",{"type":49,"tag":125,"props":1266,"children":1267},{"style":148},[1268],{"type":54,"value":270},{"type":49,"tag":125,"props":1270,"children":1271},{"style":148},[1272],{"type":54,"value":1251},{"type":49,"tag":125,"props":1274,"children":1275},{"style":142},[1276],{"type":54,"value":1175},{"type":49,"tag":125,"props":1278,"children":1279},{"style":148},[1280],{"type":54,"value":1158},{"type":49,"tag":125,"props":1282,"children":1283},{"style":168},[1284],{"type":54,"value":1285},"\u002Fscripts",{"type":49,"tag":125,"props":1287,"children":1288},{"style":148},[1289],{"type":54,"value":270},{"type":49,"tag":125,"props":1291,"children":1292},{"style":148},[1293],{"type":54,"value":1251},{"type":49,"tag":125,"props":1295,"children":1296},{"style":142},[1297],{"type":54,"value":1175},{"type":49,"tag":125,"props":1299,"children":1300},{"style":148},[1301],{"type":54,"value":1158},{"type":49,"tag":125,"props":1303,"children":1304},{"style":168},[1305],{"type":54,"value":1306},"\u002Fcaptures",{"type":49,"tag":125,"props":1308,"children":1309},{"style":148},[1310],{"type":54,"value":391},{"type":49,"tag":125,"props":1312,"children":1313},{"class":127,"line":403},[1314,1319,1324,1328,1332,1336,1340,1344,1348,1353],{"type":49,"tag":125,"props":1315,"children":1316},{"style":365},[1317],{"type":54,"value":1318},"ln",{"type":49,"tag":125,"props":1320,"children":1321},{"style":168},[1322],{"type":54,"value":1323}," -sfn",{"type":49,"tag":125,"props":1325,"children":1326},{"style":148},[1327],{"type":54,"value":1251},{"type":49,"tag":125,"props":1329,"children":1330},{"style":142},[1331],{"type":54,"value":1175},{"type":49,"tag":125,"props":1333,"children":1334},{"style":148},[1335],{"type":54,"value":1047},{"type":49,"tag":125,"props":1337,"children":1338},{"style":148},[1339],{"type":54,"value":1251},{"type":49,"tag":125,"props":1341,"children":1342},{"style":142},[1343],{"type":54,"value":1141},{"type":49,"tag":125,"props":1345,"children":1346},{"style":148},[1347],{"type":54,"value":1158},{"type":49,"tag":125,"props":1349,"children":1350},{"style":168},[1351],{"type":54,"value":1352},"\u002F.latest",{"type":49,"tag":125,"props":1354,"children":1355},{"style":148},[1356],{"type":54,"value":391},{"type":49,"tag":125,"props":1358,"children":1360},{"class":127,"line":1359},8,[1361],{"type":49,"tag":125,"props":1362,"children":1364},{"emptyLinePlaceholder":1363},true,[1365],{"type":54,"value":1366},"\n",{"type":49,"tag":125,"props":1368,"children":1370},{"class":127,"line":1369},9,[1371],{"type":49,"tag":125,"props":1372,"children":1373},{"style":132},[1374],{"type":54,"value":1375},"# Step 2 — launch DETACHED (never foreground \u002F never `| tee` inline — that blocks), then wait\n",{"type":49,"tag":125,"props":1377,"children":1379},{"class":127,"line":1378},10,[1380,1384,1388,1392,1396,1401,1406],{"type":49,"tag":125,"props":1381,"children":1382},{"style":365},[1383],{"type":54,"value":270},{"type":49,"tag":125,"props":1385,"children":1386},{"style":148},[1387],{"type":54,"value":1201},{"type":49,"tag":125,"props":1389,"children":1390},{"style":142},[1391],{"type":54,"value":982},{"type":49,"tag":125,"props":1393,"children":1394},{"style":148},[1395],{"type":54,"value":1158},{"type":49,"tag":125,"props":1397,"children":1398},{"style":365},[1399],{"type":54,"value":1400},"\u002Fworkflows\u002Fagentic\u002Farena\u002Frun.sh\"",{"type":49,"tag":125,"props":1402,"children":1403},{"style":168},[1404],{"type":54,"value":1405}," ensure-bridge",{"type":49,"tag":125,"props":1407,"children":1408},{"style":142},[1409],{"type":54,"value":1410}," \\\n",{"type":49,"tag":125,"props":1412,"children":1414},{"class":127,"line":1413},11,[1415,1420,1424,1428,1432],{"type":49,"tag":125,"props":1416,"children":1417},{"style":168},[1418],{"type":54,"value":1419},"  --env",{"type":49,"tag":125,"props":1421,"children":1422},{"style":148},[1423],{"type":54,"value":1251},{"type":49,"tag":125,"props":1425,"children":1426},{"style":142},[1427],{"type":54,"value":1118},{"type":49,"tag":125,"props":1429,"children":1430},{"style":148},[1431],{"type":54,"value":1047},{"type":49,"tag":125,"props":1433,"children":1434},{"style":142},[1435],{"type":54,"value":1410},{"type":49,"tag":125,"props":1437,"children":1439},{"class":127,"line":1438},12,[1440,1445,1449,1453,1457,1462],{"type":49,"tag":125,"props":1441,"children":1442},{"style":168},[1443],{"type":54,"value":1444},"  --log",{"type":49,"tag":125,"props":1446,"children":1447},{"style":148},[1448],{"type":54,"value":1251},{"type":49,"tag":125,"props":1450,"children":1451},{"style":142},[1452],{"type":54,"value":1175},{"type":49,"tag":125,"props":1454,"children":1455},{"style":148},[1456],{"type":54,"value":1158},{"type":49,"tag":125,"props":1458,"children":1459},{"style":168},[1460],{"type":54,"value":1461},"\u002Flogs\u002Fbridge.log",{"type":49,"tag":125,"props":1463,"children":1464},{"style":148},[1465],{"type":54,"value":391},{"type":49,"tag":125,"props":1467,"children":1469},{"class":127,"line":1468},13,[1470,1475,1479,1484,1488,1492,1496,1500,1504,1509,1513,1517],{"type":49,"tag":125,"props":1471,"children":1472},{"style":142},[1473],{"type":54,"value":1474},"BRIDGE_URL",{"type":49,"tag":125,"props":1476,"children":1477},{"style":148},[1478],{"type":54,"value":151},{"type":49,"tag":125,"props":1480,"children":1481},{"style":148},[1482],{"type":54,"value":1483},"\"$(",{"type":49,"tag":125,"props":1485,"children":1486},{"style":365},[1487],{"type":54,"value":270},{"type":49,"tag":125,"props":1489,"children":1490},{"style":148},[1491],{"type":54,"value":1201},{"type":49,"tag":125,"props":1493,"children":1494},{"style":142},[1495],{"type":54,"value":982},{"type":49,"tag":125,"props":1497,"children":1498},{"style":148},[1499],{"type":54,"value":1158},{"type":49,"tag":125,"props":1501,"children":1502},{"style":365},[1503],{"type":54,"value":1400},{"type":49,"tag":125,"props":1505,"children":1506},{"style":168},[1507],{"type":54,"value":1508}," bridge-url --env ",{"type":49,"tag":125,"props":1510,"children":1511},{"style":148},[1512],{"type":54,"value":156},{"type":49,"tag":125,"props":1514,"children":1515},{"style":142},[1516],{"type":54,"value":1118},{"type":49,"tag":125,"props":1518,"children":1519},{"style":148},[1520],{"type":54,"value":1521},"}\")\"\n",{"type":49,"tag":125,"props":1523,"children":1525},{"class":127,"line":1524},14,[1526,1530,1535,1539,1543,1547,1552,1556,1561],{"type":49,"tag":125,"props":1527,"children":1528},{"style":365},[1529],{"type":54,"value":812},{"type":49,"tag":125,"props":1531,"children":1532},{"style":168},[1533],{"type":54,"value":1534}," -fsS",{"type":49,"tag":125,"props":1536,"children":1537},{"style":148},[1538],{"type":54,"value":1251},{"type":49,"tag":125,"props":1540,"children":1541},{"style":142},[1542],{"type":54,"value":1474},{"type":49,"tag":125,"props":1544,"children":1545},{"style":148},[1546],{"type":54,"value":1158},{"type":49,"tag":125,"props":1548,"children":1549},{"style":168},[1550],{"type":54,"value":1551},"\u002Fhealth",{"type":49,"tag":125,"props":1553,"children":1554},{"style":148},[1555],{"type":54,"value":270},{"type":49,"tag":125,"props":1557,"children":1558},{"style":148},[1559],{"type":54,"value":1560}," >",{"type":49,"tag":125,"props":1562,"children":1563},{"style":168},[1564],{"type":54,"value":1565},"\u002Fdev\u002Fnull\n",{"type":49,"tag":64,"props":1567,"children":1568},{},[1569,1571,1577,1579,1585],{"type":54,"value":1570},"Once ready, ",{"type":49,"tag":70,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":54,"value":1576},"GET \"${BRIDGE_URL}\u002Fobjects\"",{"type":54,"value":1578}," to enumerate scene entities. Stop only via ",{"type":49,"tag":70,"props":1580,"children":1582},{"className":1581},[],[1583],{"type":54,"value":1584},"workflows\u002Fagentic\u002Farena\u002Fstop.sh --env \"${ENV_ID}\"",{"type":54,"value":1586}," — never by killing the process.",{"type":49,"tag":57,"props":1588,"children":1590},{"id":1589},"bridge-endpoints-env-specific-port",[1591],{"type":54,"value":1592},"Bridge Endpoints (env-specific port)",{"type":49,"tag":64,"props":1594,"children":1595},{},[1596,1598,1604,1606,1612,1614,1620,1622,1628,1630,1636,1638,1644,1646,1652],{"type":54,"value":1597},"Base URL: ",{"type":49,"tag":70,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":54,"value":1603},"BRIDGE_URL=\"$(workflows\u002Fagentic\u002Farena\u002Frun.sh bridge-url --env \u003Cenv>)\"",{"type":54,"value":1605},". The port comes from ",{"type":49,"tag":70,"props":1607,"children":1609},{"className":1608},[],[1610],{"type":54,"value":1611},"arena.bridge_port",{"type":54,"value":1613}," in ",{"type":49,"tag":70,"props":1615,"children":1617},{"className":1616},[],[1618],{"type":54,"value":1619},"workflows\u002Fagentic\u002Fconfig\u002Fenvironments\u002F\u003Cenv>.yaml",{"type":54,"value":1621}," and falls back to ",{"type":49,"tag":70,"props":1623,"children":1625},{"className":1624},[],[1626],{"type":54,"value":1627},"8765",{"type":54,"value":1629},"; ",{"type":49,"tag":70,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":54,"value":1635},"--bridge-port",{"type":54,"value":1637}," overrides it. JSON responses are either ",{"type":49,"tag":70,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":54,"value":1643},"{\"ok\": true, \"result\": ...}",{"type":54,"value":1645}," or ",{"type":49,"tag":70,"props":1647,"children":1649},{"className":1648},[],[1650],{"type":54,"value":1651},"{\"ok\": false, \"error\": ...}",{"type":54,"value":603},{"type":49,"tag":1654,"props":1655,"children":1656},"table",{},[1657,1680],{"type":49,"tag":1658,"props":1659,"children":1660},"thead",{},[1661],{"type":49,"tag":1662,"props":1663,"children":1664},"tr",{},[1665,1671,1675],{"type":49,"tag":1666,"props":1667,"children":1668},"th",{},[1669],{"type":54,"value":1670},"Method + Path",{"type":49,"tag":1666,"props":1672,"children":1673},{},[1674],{"type":54,"value":62},{"type":49,"tag":1666,"props":1676,"children":1677},{},[1678],{"type":54,"value":1679},"Body \u002F Query",{"type":49,"tag":1681,"props":1682,"children":1683},"tbody",{},[1684,1707,1728,1786,1840,1861,1887,1913,1987],{"type":49,"tag":1662,"props":1685,"children":1686},{},[1687,1697,1702],{"type":49,"tag":1688,"props":1689,"children":1690},"td",{},[1691],{"type":49,"tag":70,"props":1692,"children":1694},{"className":1693},[],[1695],{"type":54,"value":1696},"GET \u002Fhealth",{"type":49,"tag":1688,"props":1698,"children":1699},{},[1700],{"type":54,"value":1701},"Server readiness + endpoint discovery.",{"type":49,"tag":1688,"props":1703,"children":1704},{},[1705],{"type":54,"value":1706},"—",{"type":49,"tag":1662,"props":1708,"children":1709},{},[1710,1719,1724],{"type":49,"tag":1688,"props":1711,"children":1712},{},[1713],{"type":49,"tag":70,"props":1714,"children":1716},{"className":1715},[],[1717],{"type":54,"value":1718},"GET \u002Fcontext",{"type":49,"tag":1688,"props":1720,"children":1721},{},[1722],{"type":54,"value":1723},"Exec globals, helper names, endpoint inventory.",{"type":49,"tag":1688,"props":1725,"children":1726},{},[1727],{"type":54,"value":1706},{"type":49,"tag":1662,"props":1729,"children":1730},{},[1731,1739,1782],{"type":49,"tag":1688,"props":1732,"children":1733},{},[1734],{"type":49,"tag":70,"props":1735,"children":1737},{"className":1736},[],[1738],{"type":54,"value":535},{"type":49,"tag":1688,"props":1740,"children":1741},{},[1742,1744,1750,1752,1758,1760,1766,1767,1773,1774,1780],{"type":54,"value":1743},"List scene entities with ",{"type":49,"tag":70,"props":1745,"children":1747},{"className":1746},[],[1748],{"type":54,"value":1749},"kind",{"type":54,"value":1751}," (",{"type":49,"tag":70,"props":1753,"children":1755},{"className":1754},[],[1756],{"type":54,"value":1757},"articulation",{"type":54,"value":1759}," \u002F ",{"type":49,"tag":70,"props":1761,"children":1763},{"className":1762},[],[1764],{"type":54,"value":1765},"rigid",{"type":54,"value":1759},{"type":49,"tag":70,"props":1768,"children":1770},{"className":1769},[],[1771],{"type":54,"value":1772},"camera",{"type":54,"value":1759},{"type":49,"tag":70,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":54,"value":1779},"xform",{"type":54,"value":1781},") and prim path.",{"type":49,"tag":1688,"props":1783,"children":1784},{},[1785],{"type":54,"value":1706},{"type":49,"tag":1662,"props":1787,"children":1788},{},[1789,1798,1824],{"type":49,"tag":1688,"props":1790,"children":1791},{},[1792],{"type":49,"tag":70,"props":1793,"children":1795},{"className":1794},[],[1796],{"type":54,"value":1797},"GET \u002Fobject?name=\u003Ckey>",{"type":49,"tag":1688,"props":1799,"children":1800},{},[1801,1803,1809,1810,1815,1816,1822],{"type":54,"value":1802},"Full state for one entity: ",{"type":49,"tag":70,"props":1804,"children":1806},{"className":1805},[],[1807],{"type":54,"value":1808},"xform_ops",{"type":54,"value":767},{"type":49,"tag":70,"props":1811,"children":1813},{"className":1812},[],[1814],{"type":54,"value":641},{"type":54,"value":767},{"type":49,"tag":70,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":54,"value":1821},"live",{"type":54,"value":1823}," (authoritative PhysX pose), children.",{"type":49,"tag":1688,"props":1825,"children":1826},{},[1827,1833,1834],{"type":49,"tag":70,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":54,"value":1832},"name=\u003Ckey>",{"type":54,"value":1645},{"type":49,"tag":70,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":54,"value":1839},"path=\u003Cprim_path>",{"type":49,"tag":1662,"props":1841,"children":1842},{},[1843,1852,1857],{"type":49,"tag":1688,"props":1844,"children":1845},{},[1846],{"type":49,"tag":70,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":54,"value":1851},"GET \u002Fcameras",{"type":49,"tag":1688,"props":1853,"children":1854},{},[1855],{"type":54,"value":1856},"List live RGB camera outputs.",{"type":49,"tag":1688,"props":1858,"children":1859},{},[1860],{"type":54,"value":1706},{"type":49,"tag":1662,"props":1862,"children":1863},{},[1864,1873,1878],{"type":49,"tag":1688,"props":1865,"children":1866},{},[1867],{"type":49,"tag":70,"props":1868,"children":1870},{"className":1869},[],[1871],{"type":54,"value":1872},"POST \u002Fcapture",{"type":49,"tag":1688,"props":1874,"children":1875},{},[1876],{"type":54,"value":1877},"Save camera frames and viewport as JPEG.",{"type":49,"tag":1688,"props":1879,"children":1880},{},[1881],{"type":49,"tag":70,"props":1882,"children":1884},{"className":1883},[],[1885],{"type":54,"value":1886},"{\"output_dir\": \"\u003Cabs>\", \"viewport\": true, \"cameras\": [\"\u003Cname>\", ...]}",{"type":49,"tag":1662,"props":1888,"children":1889},{},[1890,1899,1904],{"type":49,"tag":1688,"props":1891,"children":1892},{},[1893],{"type":49,"tag":70,"props":1894,"children":1896},{"className":1895},[],[1897],{"type":54,"value":1898},"POST \u002Fobject\u002Fteleport",{"type":49,"tag":1688,"props":1900,"children":1901},{},[1902],{"type":54,"value":1903},"Live-set pose for rigid bodies and articulations.",{"type":49,"tag":1688,"props":1905,"children":1906},{},[1907],{"type":49,"tag":70,"props":1908,"children":1910},{"className":1909},[],[1911],{"type":54,"value":1912},"{\"name\": \"\u003Ckey>\", \"translation\": [x,y,z], \"rotation_wxyz\": [w,x,y,z], \"zero_velocity\": true, \"env_index\": 0}",{"type":49,"tag":1662,"props":1914,"children":1915},{},[1916,1925,1978],{"type":49,"tag":1688,"props":1917,"children":1918},{},[1919],{"type":49,"tag":70,"props":1920,"children":1922},{"className":1921},[],[1923],{"type":54,"value":1924},"POST \u002Fscript",{"type":49,"tag":1688,"props":1926,"children":1927},{},[1928,1930,1936,1937,1942,1943,1949,1950,1956,1957,1963,1964,1970,1971,1977],{"type":54,"value":1929},"Run a trusted absolute Python file on Isaac's main loop. Globals: ",{"type":49,"tag":70,"props":1931,"children":1933},{"className":1932},[],[1934],{"type":54,"value":1935},"ctx",{"type":54,"value":767},{"type":49,"tag":70,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":54,"value":1128},{"type":54,"value":767},{"type":49,"tag":70,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":54,"value":1948},"app",{"type":54,"value":767},{"type":49,"tag":70,"props":1951,"children":1953},{"className":1952},[],[1954],{"type":54,"value":1955},"args",{"type":54,"value":767},{"type":49,"tag":70,"props":1958,"children":1960},{"className":1959},[],[1961],{"type":54,"value":1962},"helpers",{"type":54,"value":767},{"type":49,"tag":70,"props":1965,"children":1967},{"className":1966},[],[1968],{"type":54,"value":1969},"stage",{"type":54,"value":767},{"type":49,"tag":70,"props":1972,"children":1974},{"className":1973},[],[1975],{"type":54,"value":1976},"get_stage",{"type":54,"value":603},{"type":49,"tag":1688,"props":1979,"children":1980},{},[1981],{"type":49,"tag":70,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":54,"value":1986},"{\"path\": \"\u002Fabs\u002Fpath\u002Fto\u002Fscript.py\"}",{"type":49,"tag":1662,"props":1988,"children":1989},{},[1990,1998,2003],{"type":49,"tag":1688,"props":1991,"children":1992},{},[1993],{"type":49,"tag":70,"props":1994,"children":1996},{"className":1995},[],[1997],{"type":54,"value":773},{"type":49,"tag":1688,"props":1999,"children":2000},{},[2001],{"type":54,"value":2002},"Return Python snippets reflecting the current live xform of named entities.",{"type":49,"tag":1688,"props":2004,"children":2005},{},[2006],{"type":49,"tag":70,"props":2007,"children":2009},{"className":2008},[],[2010],{"type":54,"value":2011},"{\"names\": [\"\u003Ckey>\", ...]}",{"type":49,"tag":64,"props":2013,"children":2014},{},[2015,2017,2022,2024,2029,2031,2036],{"type":54,"value":2016},"After a teleport, read the ",{"type":49,"tag":70,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":54,"value":1821},{"type":54,"value":2023}," field from ",{"type":49,"tag":70,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":54,"value":1797},{"type":54,"value":2030}," to verify. The ",{"type":49,"tag":70,"props":2032,"children":2034},{"className":2033},[],[2035],{"type":54,"value":641},{"type":54,"value":2037}," field is USD-derived and may lag a physics step.",{"type":49,"tag":57,"props":2039,"children":2041},{"id":2040},"edit-matrix",[2042],{"type":54,"value":2043},"Edit Matrix",{"type":49,"tag":1654,"props":2045,"children":2046},{},[2047,2068],{"type":49,"tag":1658,"props":2048,"children":2049},{},[2050],{"type":49,"tag":1662,"props":2051,"children":2052},{},[2053,2058,2063],{"type":49,"tag":1666,"props":2054,"children":2055},{},[2056],{"type":54,"value":2057},"Edit",{"type":49,"tag":1666,"props":2059,"children":2060},{},[2061],{"type":54,"value":2062},"Live (bridge)",{"type":49,"tag":1666,"props":2064,"children":2065},{},[2066],{"type":54,"value":2067},"Bake target",{"type":49,"tag":1681,"props":2069,"children":2070},{},[2071,2110,2155,2216,2286,2319,2378,2432,2471,2524,2562,2587,2618,2650],{"type":49,"tag":1662,"props":2072,"children":2073},{},[2074,2079,2087],{"type":49,"tag":1688,"props":2075,"children":2076},{},[2077],{"type":54,"value":2078},"Move\u002Frotate rigid object",{"type":49,"tag":1688,"props":2080,"children":2081},{},[2082],{"type":49,"tag":70,"props":2083,"children":2085},{"className":2084},[],[2086],{"type":54,"value":1898},{"type":49,"tag":1688,"props":2088,"children":2089},{},[2090,2095,2097,2103,2104],{"type":49,"tag":70,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":54,"value":866},{"type":54,"value":2096}," ",{"type":49,"tag":70,"props":2098,"children":2100},{"className":2099},[],[2101],{"type":54,"value":2102},"init_state.pos",{"type":54,"value":201},{"type":49,"tag":70,"props":2105,"children":2107},{"className":2106},[],[2108],{"type":54,"value":2109},"rot",{"type":49,"tag":1662,"props":2111,"children":2112},{},[2113,2118,2141],{"type":49,"tag":1688,"props":2114,"children":2115},{},[2116],{"type":54,"value":2117},"Move\u002Frotate truly-static XformPrim (no physics body anywhere in the USD — lights, decals)",{"type":49,"tag":1688,"props":2119,"children":2120},{},[2121,2126,2128,2134,2135],{"type":49,"tag":70,"props":2122,"children":2124},{"className":2123},[],[2125],{"type":54,"value":1924},{"type":54,"value":2127}," → ",{"type":49,"tag":70,"props":2129,"children":2131},{"className":2130},[],[2132],{"type":54,"value":2133},"xformOp:translate",{"type":54,"value":1759},{"type":49,"tag":70,"props":2136,"children":2138},{"className":2137},[],[2139],{"type":54,"value":2140},"xformOp:orient",{"type":49,"tag":1688,"props":2142,"children":2143},{},[2144,2149,2150],{"type":49,"tag":70,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":54,"value":2102},{"type":49,"tag":1662,"props":2156,"children":2157},{},[2158,2185,2202],{"type":49,"tag":1688,"props":2159,"children":2160},{},[2161,2163,2169,2171,2177,2179,2184],{"type":54,"value":2162},"Move\u002Frotate ",{"type":49,"tag":70,"props":2164,"children":2166},{"className":2165},[],[2167],{"type":54,"value":2168},"AssetBaseCfg",{"type":54,"value":2170}," whose USD embeds a rigid body (e.g. ",{"type":49,"tag":70,"props":2172,"children":2174},{"className":2173},[],[2175],{"type":54,"value":2176},"SCISSOR_TRAY_USD",{"type":54,"value":2178}," trays\u002Ffixtures — kinematic ",{"type":49,"tag":470,"props":2180,"children":2181},{},[2182],{"type":54,"value":2183},"child mesh",{"type":54,"value":220},{"type":49,"tag":1688,"props":2186,"children":2187},{},[2188,2193,2194,2200],{"type":49,"tag":70,"props":2189,"children":2191},{"className":2190},[],[2192],{"type":54,"value":1924},{"type":54,"value":2127},{"type":49,"tag":70,"props":2195,"children":2197},{"className":2196},[],[2198],{"type":54,"value":2199},"helpers.move(\"\u003Ckey>\", pos=\u002Fdpos=)",{"type":54,"value":2201}," — drives the child PhysX body (raw USD writes snap back; see recipe)",{"type":49,"tag":1688,"props":2203,"children":2204},{},[2205,2210,2211],{"type":49,"tag":70,"props":2206,"children":2208},{"className":2207},[],[2209],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2212,"children":2214},{"className":2213},[],[2215],{"type":54,"value":2102},{"type":49,"tag":1662,"props":2217,"children":2218},{},[2219,2224,2271],{"type":49,"tag":1688,"props":2220,"children":2221},{},[2222],{"type":54,"value":2223},"Rescale a prim",{"type":49,"tag":1688,"props":2225,"children":2226},{},[2227,2232,2234,2240,2242,2263,2264,2269],{"type":49,"tag":470,"props":2228,"children":2229},{},[2230],{"type":54,"value":2231},"Live-added \u002F bridge-spawned prim → re-spawn at the new size",{"type":54,"value":2233}," (delete + ",{"type":49,"tag":70,"props":2235,"children":2237},{"className":2236},[],[2238],{"type":54,"value":2239},"CuboidCfg(new).func",{"type":54,"value":2241}," + re-rest; see \"Resize a live-added prim\"). ",{"type":49,"tag":470,"props":2243,"children":2244},{},[2245,2247,2253,2255,2261],{"type":54,"value":2246},"Do NOT use ",{"type":49,"tag":70,"props":2248,"children":2250},{"className":2249},[],[2251],{"type":54,"value":2252},"xformOp:scale",{"type":54,"value":2254}," on it — that scales its ",{"type":49,"tag":2256,"props":2257,"children":2258},"em",{},[2259],{"type":54,"value":2260},"position",{"type":54,"value":2262}," (flings it off-screen), NOT its size.",{"type":54,"value":2096},{"type":49,"tag":70,"props":2265,"children":2267},{"className":2266},[],[2268],{"type":54,"value":2252},{"type":54,"value":2270}," is only for an existing scene-asset prim.",{"type":49,"tag":1688,"props":2272,"children":2273},{},[2274,2279,2280],{"type":49,"tag":70,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2281,"children":2283},{"className":2282},[],[2284],{"type":54,"value":2285},"spawn=...scale",{"type":49,"tag":1662,"props":2287,"children":2288},{},[2289,2294,2303],{"type":49,"tag":1688,"props":2290,"children":2291},{},[2292],{"type":54,"value":2293},"Move robot stand",{"type":49,"tag":1688,"props":2295,"children":2296},{},[2297],{"type":49,"tag":70,"props":2298,"children":2300},{"className":2299},[],[2301],{"type":54,"value":2302},"POST \u002Fobject\u002Fteleport name=robot",{"type":49,"tag":1688,"props":2304,"children":2305},{},[2306,2312,2313],{"type":49,"tag":70,"props":2307,"children":2309},{"className":2308},[],[2310],{"type":54,"value":2311},"workflows\u002Fagentic\u002Farena\u002Farena\u002Fenvironments\u002F\u003Cenv>_environment.py",{"type":54,"value":2096},{"type":49,"tag":70,"props":2314,"children":2316},{"className":2315},[],[2317],{"type":54,"value":2318},"embodiment.set_initial_pose(...)",{"type":49,"tag":1662,"props":2320,"children":2321},{},[2322,2327,2363],{"type":49,"tag":1688,"props":2323,"children":2324},{},[2325],{"type":54,"value":2326},"Add a new prim",{"type":49,"tag":1688,"props":2328,"children":2329},{},[2330,2335,2336,2353,2355,2361],{"type":49,"tag":70,"props":2331,"children":2333},{"className":2332},[],[2334],{"type":54,"value":1924},{"type":54,"value":2127},{"type":49,"tag":470,"props":2337,"children":2338},{},[2339,2345,2347],{"type":49,"tag":70,"props":2340,"children":2342},{"className":2341},[],[2343],{"type":54,"value":2344},"sim_utils.CuboidCfg(...).func(path, cfg)",{"type":54,"value":2346}," + ",{"type":49,"tag":70,"props":2348,"children":2350},{"className":2349},[],[2351],{"type":54,"value":2352},"helpers.move(...)",{"type":54,"value":2354}," (see \"Add a prim live\" recipe) — NOT raw ",{"type":49,"tag":70,"props":2356,"children":2358},{"className":2357},[],[2359],{"type":54,"value":2360},"pxr",{"type":54,"value":2362}," USD authoring; a live-added body isn't GPU-simulated, so place it at rest height, don't tensor-query it",{"type":49,"tag":1688,"props":2364,"children":2365},{},[2366,2371,2372],{"type":49,"tag":70,"props":2367,"children":2369},{"className":2368},[],[2370],{"type":54,"value":866},{"type":54,"value":2346},{"type":49,"tag":70,"props":2373,"children":2375},{"className":2374},[],[2376],{"type":54,"value":2377},"make_*_scene_assets()",{"type":49,"tag":1662,"props":2379,"children":2380},{},[2381,2386,2417],{"type":49,"tag":1688,"props":2382,"children":2383},{},[2384],{"type":54,"value":2385},"Toggle gravity",{"type":49,"tag":1688,"props":2387,"children":2388},{},[2389,2394,2396,2402,2404,2410,2411],{"type":49,"tag":70,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":54,"value":1924},{"type":54,"value":2395}," → set ",{"type":49,"tag":70,"props":2397,"children":2399},{"className":2398},[],[2400],{"type":54,"value":2401},"physxRigidBody:disableGravity",{"type":54,"value":2403},"; zero ",{"type":49,"tag":70,"props":2405,"children":2407},{"className":2406},[],[2408],{"type":54,"value":2409},"root_lin_vel_w",{"type":54,"value":1759},{"type":49,"tag":70,"props":2412,"children":2414},{"className":2413},[],[2415],{"type":54,"value":2416},"root_ang_vel_w",{"type":49,"tag":1688,"props":2418,"children":2419},{},[2420,2425,2426],{"type":49,"tag":70,"props":2421,"children":2423},{"className":2422},[],[2424],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2427,"children":2429},{"className":2428},[],[2430],{"type":54,"value":2431},"rigid_props.disable_gravity",{"type":49,"tag":1662,"props":2433,"children":2434},{},[2435,2440,2456],{"type":49,"tag":1688,"props":2436,"children":2437},{},[2438],{"type":54,"value":2439},"Toggle kinematic",{"type":49,"tag":1688,"props":2441,"children":2442},{},[2443,2448,2450],{"type":49,"tag":70,"props":2444,"children":2446},{"className":2445},[],[2447],{"type":54,"value":1924},{"type":54,"value":2449}," → flip ",{"type":49,"tag":70,"props":2451,"children":2453},{"className":2452},[],[2454],{"type":54,"value":2455},"physics:kinematicEnabled",{"type":49,"tag":1688,"props":2457,"children":2458},{},[2459,2464,2465],{"type":49,"tag":70,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2466,"children":2468},{"className":2467},[],[2469],{"type":54,"value":2470},"rigid_props.kinematic_enabled",{"type":49,"tag":1662,"props":2472,"children":2473},{},[2474,2479,2502],{"type":49,"tag":1688,"props":2475,"children":2476},{},[2477],{"type":54,"value":2478},"Change mass \u002F collider props",{"type":49,"tag":1688,"props":2480,"children":2481},{},[2482,2487,2489,2495,2496],{"type":49,"tag":70,"props":2483,"children":2485},{"className":2484},[],[2486],{"type":54,"value":1924},{"type":54,"value":2488}," → write ",{"type":49,"tag":70,"props":2490,"children":2492},{"className":2491},[],[2493],{"type":54,"value":2494},"physxRigidBody:*",{"type":54,"value":1759},{"type":49,"tag":70,"props":2497,"children":2499},{"className":2498},[],[2500],{"type":54,"value":2501},"physxCollision:*",{"type":49,"tag":1688,"props":2503,"children":2504},{},[2505,2510,2511,2517,2518],{"type":49,"tag":70,"props":2506,"children":2508},{"className":2507},[],[2509],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2512,"children":2514},{"className":2513},[],[2515],{"type":54,"value":2516},"mass_props",{"type":54,"value":1759},{"type":49,"tag":70,"props":2519,"children":2521},{"className":2520},[],[2522],{"type":54,"value":2523},"collision_props",{"type":49,"tag":1662,"props":2525,"children":2526},{},[2527,2532,2547],{"type":49,"tag":1688,"props":2528,"children":2529},{},[2530],{"type":54,"value":2531},"Swap a USD reference",{"type":49,"tag":1688,"props":2533,"children":2534},{},[2535,2540,2541],{"type":49,"tag":70,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":54,"value":1924},{"type":54,"value":2127},{"type":49,"tag":70,"props":2542,"children":2544},{"className":2543},[],[2545],{"type":54,"value":2546},"prim.GetReferences().SetReferences(...)",{"type":49,"tag":1688,"props":2548,"children":2549},{},[2550,2555,2556],{"type":49,"tag":70,"props":2551,"children":2553},{"className":2552},[],[2554],{"type":54,"value":866},{"type":54,"value":2096},{"type":49,"tag":70,"props":2557,"children":2559},{"className":2558},[],[2560],{"type":54,"value":2561},"spawn.usd_path",{"type":49,"tag":1662,"props":2563,"children":2564},{},[2565,2570,2575],{"type":49,"tag":1688,"props":2566,"children":2567},{},[2568],{"type":54,"value":2569},"Add\u002Fremove a camera",{"type":49,"tag":1688,"props":2571,"children":2572},{},[2573],{"type":54,"value":2574},"Use the live bridge to choose the pose from viewport\u002Fobject state; do not live-register a new IsaacLab sensor.",{"type":49,"tag":1688,"props":2576,"children":2577},{},[2578,2580,2585],{"type":54,"value":2579},"See \"Adding a Camera\" — bake ",{"type":49,"tag":470,"props":2581,"children":2582},{},[2583],{"type":54,"value":2584},"env-locally",{"type":54,"value":2586},", never in the shared embodiment",{"type":49,"tag":1662,"props":2588,"children":2589},{},[2590,2595,2600],{"type":49,"tag":1688,"props":2591,"children":2592},{},[2593],{"type":54,"value":2594},"Change task wording",{"type":49,"tag":1688,"props":2596,"children":2597},{},[2598],{"type":54,"value":2599},"preview only",{"type":49,"tag":1688,"props":2601,"children":2602},{},[2603,2605,2611,2612],{"type":54,"value":2604},"env YAML ",{"type":49,"tag":70,"props":2606,"children":2608},{"className":2607},[],[2609],{"type":54,"value":2610},"policy.language_instruction",{"type":54,"value":1759},{"type":49,"tag":70,"props":2613,"children":2615},{"className":2614},[],[2616],{"type":54,"value":2617},"task_description",{"type":49,"tag":1662,"props":2619,"children":2620},{},[2621,2626,2642],{"type":49,"tag":1688,"props":2622,"children":2623},{},[2624],{"type":54,"value":2625},"Change success rule",{"type":49,"tag":1688,"props":2627,"children":2628},{},[2629,2634,2636],{"type":49,"tag":70,"props":2630,"children":2632},{"className":2631},[],[2633],{"type":54,"value":1924},{"type":54,"value":2635}," → swap term on ",{"type":49,"tag":70,"props":2637,"children":2639},{"className":2638},[],[2640],{"type":54,"value":2641},"env.unwrapped.termination_manager",{"type":49,"tag":1688,"props":2643,"children":2644},{},[2645],{"type":49,"tag":70,"props":2646,"children":2648},{"className":2647},[],[2649],{"type":54,"value":873},{"type":49,"tag":1662,"props":2651,"children":2652},{},[2653,2658,2681],{"type":49,"tag":1688,"props":2654,"children":2655},{},[2656],{"type":54,"value":2657},"Change reset randomization range",{"type":49,"tag":1688,"props":2659,"children":2660},{},[2661,2666,2668,2674,2675],{"type":49,"tag":70,"props":2662,"children":2664},{"className":2663},[],[2665],{"type":54,"value":1924},{"type":54,"value":2667}," → mutate ",{"type":49,"tag":70,"props":2669,"children":2671},{"className":2670},[],[2672],{"type":54,"value":2673},"EventTerm.pose_range",{"type":54,"value":1629},{"type":49,"tag":70,"props":2676,"children":2678},{"className":2677},[],[2679],{"type":54,"value":2680},"env.reset()",{"type":49,"tag":1688,"props":2682,"children":2683},{},[2684,2689],{"type":49,"tag":70,"props":2685,"children":2687},{"className":2686},[],[2688],{"type":54,"value":873},{"type":54,"value":2690}," events cfg",{"type":49,"tag":57,"props":2692,"children":2694},{"id":2693},"live-edit-recipes",[2695],{"type":54,"value":2696},"Live-Edit Recipes",{"type":49,"tag":64,"props":2698,"children":2699},{},[2700,2702,2708,2710,2716,2718,2724],{"type":54,"value":2701},"Keep ",{"type":49,"tag":70,"props":2703,"children":2705},{"className":2704},[],[2706],{"type":54,"value":2707},"SKILL.md",{"type":54,"value":2709}," as the router and load ",{"type":49,"tag":70,"props":2711,"children":2713},{"className":2712},[],[2714],{"type":54,"value":2715},"references\u002Fscene-edit-patterns.md",{"type":54,"value":2717}," for the detailed bridge recipes. Load ",{"type":49,"tag":70,"props":2719,"children":2721},{"className":2720},[],[2722],{"type":54,"value":2723},"references\u002Fasset-snippets.md",{"type":54,"value":2725}," for copyable object\u002Fasset snippets. The mandatory live-edit rules are:",{"type":49,"tag":462,"props":2727,"children":2728},{},[2729,2748,2768,2781,2801,2813,2825],{"type":49,"tag":466,"props":2730,"children":2731},{},[2732,2734,2739,2741,2746],{"type":54,"value":2733},"Rigid bodies and articulations move through ",{"type":49,"tag":70,"props":2735,"children":2737},{"className":2736},[],[2738],{"type":54,"value":1898},{"type":54,"value":2740},", then verify with the object's ",{"type":49,"tag":70,"props":2742,"children":2744},{"className":2743},[],[2745],{"type":54,"value":1821},{"type":54,"value":2747}," pose.",{"type":49,"tag":466,"props":2749,"children":2750},{},[2751,2753,2758,2760,2766],{"type":54,"value":2752},"Robot stand moves use ",{"type":49,"tag":70,"props":2754,"children":2756},{"className":2755},[],[2757],{"type":54,"value":1898},{"type":54,"value":2759}," with ",{"type":49,"tag":70,"props":2761,"children":2763},{"className":2762},[],[2764],{"type":54,"value":2765},"name=robot",{"type":54,"value":2767},"; derive x\u002Fy\u002Fyaw from the table bbox and current robot pose, keep the current live z, and verify the settled live pose over multiple reads.",{"type":49,"tag":466,"props":2769,"children":2770},{},[2771,2773,2779],{"type":54,"value":2772},"For G1 or any floating-base robot stand move, an immediate successful teleport is not stability proof. Sample ",{"type":49,"tag":70,"props":2774,"children":2776},{"className":2775},[],[2777],{"type":54,"value":2778},"GET \u002Fobject?name=robot",{"type":54,"value":2780}," for at least 10-15 seconds after the move (for example once per second). Treat continuous z drop, growing roll\u002Fpitch, or x\u002Fy drift as a fall; if that happens, revert to the last stable pose or adjust target\u002Fstandoff\u002Fyaw and re-test before continuing to camera work or bake.",{"type":49,"tag":466,"props":2782,"children":2783},{},[2784,2786,2791,2793,2799],{"type":54,"value":2785},"Embedded kinematic ",{"type":49,"tag":70,"props":2787,"children":2789},{"className":2788},[],[2790],{"type":54,"value":2168},{"type":54,"value":2792}," props\u002Fsupport surfaces use ",{"type":49,"tag":70,"props":2794,"children":2796},{"className":2795},[],[2797],{"type":54,"value":2798},"helpers.move",{"type":54,"value":2800},". Raw USD translation can snap back because PhysX owns the body pose.",{"type":49,"tag":466,"props":2802,"children":2803},{},[2804,2806,2811],{"type":54,"value":2805},"Live-added bodies must be spawned through IsaacLab cfgs plus ",{"type":49,"tag":70,"props":2807,"children":2809},{"className":2808},[],[2810],{"type":54,"value":2798},{"type":54,"value":2812},", placed directly at their resting height, and never tensor-queried until a relaunch registers them with the GPU pipeline.",{"type":49,"tag":466,"props":2814,"children":2815},{},[2816,2818,2823],{"type":54,"value":2817},"Live-added prim resize is delete + re-spawn + re-rest. ",{"type":49,"tag":70,"props":2819,"children":2821},{"className":2820},[],[2822],{"type":54,"value":2252},{"type":54,"value":2824}," is only for existing scene assets, not bridge-spawned bodies.",{"type":49,"tag":466,"props":2826,"children":2827},{},[2828],{"type":54,"value":2829},"Capture after each task-relevant edit and judge the image plus structural state before reporting success.",{"type":49,"tag":57,"props":2831,"children":2833},{"id":2832},"adding-a-camera",[2834],{"type":54,"value":2835},"Adding a Camera",{"type":49,"tag":64,"props":2837,"children":2838},{},[2839,2841,2847,2848,2854,2856,2862,2864,2869,2870,2876,2878,2883,2885,2890,2892,2897,2899,2905],{"type":54,"value":2840},"Do not initialize a new IsaacLab ",{"type":49,"tag":70,"props":2842,"children":2844},{"className":2843},[],[2845],{"type":54,"value":2846},"Camera",{"type":54,"value":201},{"type":49,"tag":70,"props":2849,"children":2851},{"className":2850},[],[2852],{"type":54,"value":2853},"TiledCamera",{"type":54,"value":2855}," sensor through a live ",{"type":49,"tag":70,"props":2857,"children":2859},{"className":2858},[],[2860],{"type":54,"value":2861},"\u002Fscript",{"type":54,"value":2863},". On this workflow, runtime sensor registration can block the Isaac main loop and leave ",{"type":49,"tag":70,"props":2865,"children":2867},{"className":2866},[],[2868],{"type":54,"value":2861},{"type":54,"value":767},{"type":49,"tag":70,"props":2871,"children":2873},{"className":2872},[],[2874],{"type":54,"value":2875},"\u002Fcameras",{"type":54,"value":2877},", and ",{"type":49,"tag":70,"props":2879,"children":2881},{"className":2880},[],[2882],{"type":54,"value":835},{"type":54,"value":2884}," timing out while ",{"type":49,"tag":70,"props":2886,"children":2888},{"className":2887},[],[2889],{"type":54,"value":1551},{"type":54,"value":2891}," still responds. Use the live bridge to inspect objects, verify the current viewport\u002Fpose, and choose the camera eye\u002Ftarget. Then bake the camera as an env-local source sensor. Verify the baked camera with ",{"type":49,"tag":70,"props":2893,"children":2895},{"className":2894},[],[2896],{"type":54,"value":853},{"type":54,"value":2898}," plus camera captures only when running the explicit fresh-source validation gate. A temporary USD-only camera prim may be used only to reason about placement; it does not prove downstream policy\u002Fdataset readiness. Load ",{"type":49,"tag":70,"props":2900,"children":2902},{"className":2901},[],[2903],{"type":54,"value":2904},"references\u002Fcamera-snippets.md",{"type":54,"value":2906}," for source\u002FYAML\u002Fpolicy\u002Fdataset wiring.",{"type":49,"tag":64,"props":2908,"children":2909},{},[2910],{"type":54,"value":2911},"For \"room camera based on current perspective view\", treat the viewport as only the first pose guess. Capture the room camera before baking; it must show the main task area and task-relevant objects after all requested edits, including the support surface, robot\u002Ftable relationship, tools\u002Fdestinations, and newly added objects. A frame that cuts off the robot body, head\u002Fhands, table, trays\u002Ftools, or new object at an image edge is a failed candidate; do not call it \"whole room\" or bake it. If the frame clips or hides those objects, zoom out before baking by moving the camera farther from the task look-at point and\u002For widening the lens, then capture again and bake only the validated view. Leave extra margin for the baked 4:3 sensor because it can be narrower than a 16:9 viewport capture.",{"type":49,"tag":64,"props":2913,"children":2914},{},[2915,2917,2922,2924,2930,2932,2938],{"type":54,"value":2916},"For bake, load ",{"type":49,"tag":70,"props":2918,"children":2920},{"className":2919},[],[2921],{"type":54,"value":2715},{"type":54,"value":2923}," and apply the camera checklist in one pass: env-local sensor, matching task ",{"type":49,"tag":70,"props":2925,"children":2927},{"className":2926},[],[2928],{"type":54,"value":2929},"observations.policy",{"type":54,"value":2931}," term, YAML ",{"type":49,"tag":70,"props":2933,"children":2935},{"className":2934},[],[2936],{"type":54,"value":2937},"zenoh.camera_names",{"type":54,"value":2939},", policy camera list, dataset mapping, and any stack-specific modality config. Never add an env-specific camera to a shared embodiment class, and re-record demos after changing policy\u002Fdataset cameras.",{"type":49,"tag":57,"props":2941,"children":2943},{"id":2942},"durable-touchpoints-bake-targets",[2944],{"type":54,"value":2945},"Durable Touchpoints (bake targets)",{"type":49,"tag":462,"props":2947,"children":2948},{},[2949,2959,2969,2979,2990],{"type":49,"tag":466,"props":2950,"children":2951},{},[2952,2957],{"type":49,"tag":70,"props":2953,"children":2955},{"className":2954},[],[2956],{"type":54,"value":2311},{"type":54,"value":2958},": env wiring, robot stand pose.",{"type":49,"tag":466,"props":2960,"children":2961},{},[2962,2967],{"type":49,"tag":70,"props":2963,"children":2965},{"className":2964},[],[2966],{"type":54,"value":866},{"type":54,"value":2968},": static scene assets.",{"type":49,"tag":466,"props":2970,"children":2971},{},[2972,2977],{"type":49,"tag":70,"props":2973,"children":2975},{"className":2974},[],[2976],{"type":54,"value":873},{"type":54,"value":2978},": reset randomization, success, task text.",{"type":49,"tag":466,"props":2980,"children":2981},{},[2982,2988],{"type":49,"tag":70,"props":2983,"children":2985},{"className":2984},[],[2986],{"type":54,"value":2987},"workflows\u002Fagentic\u002Farena\u002Farena\u002Fruntimes\u002F\u003Cenv>.py",{"type":54,"value":2989},": runtime-specific camera\u002Fstate\u002Faction logic.",{"type":49,"tag":466,"props":2991,"children":2992},{},[2993,2998],{"type":49,"tag":70,"props":2994,"children":2996},{"className":2995},[],[2997],{"type":54,"value":1619},{"type":54,"value":2999},": cameras, policy language, dataset mappings.",{"type":49,"tag":57,"props":3001,"children":3003},{"id":3002},"notes",[3004],{"type":54,"value":3005},"Notes",{"type":49,"tag":462,"props":3007,"children":3008},{},[3009,3020,3040],{"type":49,"tag":466,"props":3010,"children":3011},{},[3012,3018],{"type":49,"tag":70,"props":3013,"children":3015},{"className":3014},[],[3016],{"type":54,"value":3017},"assemble_trocar",{"type":54,"value":3019}," is inference-only. Do not add train hooks during a scene edit.",{"type":49,"tag":466,"props":3021,"children":3022},{},[3023,3025,3031,3032,3038],{"type":54,"value":3024},"If adding\u002Fremoving cameras, update ",{"type":49,"tag":70,"props":3026,"children":3028},{"className":3027},[],[3029],{"type":54,"value":3030},"policy.data_config",{"type":54,"value":767},{"type":49,"tag":70,"props":3033,"children":3035},{"className":3034},[],[3036],{"type":54,"value":3037},"dataset.camera_mappings",{"type":54,"value":3039},", and the train modality config together.",{"type":49,"tag":466,"props":3041,"children":3042},{},[3043,3045,3051,3053,3059],{"type":54,"value":3044},"Scissor SO-ARM generates ",{"type":49,"tag":70,"props":3046,"children":3048},{"className":3047},[],[3049],{"type":54,"value":3050},"meta\u002Fmodality.json",{"type":54,"value":3052}," from YAML splits and does not need ",{"type":49,"tag":70,"props":3054,"children":3056},{"className":3055},[],[3057],{"type":54,"value":3058},"dataset.modality_template_path",{"type":54,"value":3060},". G1 locomanip and assemble-trocar do.",{"type":49,"tag":57,"props":3062,"children":3064},{"id":3063},"verify-after-bake",[3065],{"type":54,"value":3066},"Verify (after bake)",{"type":49,"tag":64,"props":3068,"children":3069},{},[3070],{"type":54,"value":3071},"For a normal interactive \"edit, bake, and stop\" prompt, do not relaunch Isaac after stopping the edit bridge. Run the cheap static checks and report that fresh-source validation was not run unless requested:",{"type":49,"tag":114,"props":3073,"children":3075},{"className":116,"code":3074,"language":118,"meta":119,"style":119},"python -m py_compile \u003Cchanged-python-files>\npython - \u003C\u003C'PY'\nimport yaml, pathlib\nfor p in pathlib.Path('workflows\u002Fagentic\u002Fconfig\u002Fenvironments').glob('*.yaml'):\n    yaml.safe_load(p.read_text())\nPY\nworkflows\u002Fagentic\u002Farena\u002Frun.sh  --env \u003Cenv> --dry-run      # necessary, NOT sufficient\nworkflows\u002Fagentic\u002Fpolicy\u002Frun.sh --env \u003Cenv> --dry-run\n",[3076],{"type":49,"tag":70,"props":3077,"children":3078},{"__ignoreMap":119},[3079,3116,3138,3146,3154,3162,3170,3210],{"type":49,"tag":125,"props":3080,"children":3081},{"class":127,"line":128},[3082,3087,3092,3097,3102,3107,3112],{"type":49,"tag":125,"props":3083,"children":3084},{"style":365},[3085],{"type":54,"value":3086},"python",{"type":49,"tag":125,"props":3088,"children":3089},{"style":168},[3090],{"type":54,"value":3091}," -m",{"type":49,"tag":125,"props":3093,"children":3094},{"style":168},[3095],{"type":54,"value":3096}," py_compile",{"type":49,"tag":125,"props":3098,"children":3099},{"style":148},[3100],{"type":54,"value":3101}," \u003C",{"type":49,"tag":125,"props":3103,"children":3104},{"style":168},[3105],{"type":54,"value":3106},"changed-python-file",{"type":49,"tag":125,"props":3108,"children":3109},{"style":142},[3110],{"type":54,"value":3111},"s",{"type":49,"tag":125,"props":3113,"children":3114},{"style":148},[3115],{"type":54,"value":1133},{"type":49,"tag":125,"props":3117,"children":3118},{"class":127,"line":138},[3119,3123,3128,3133],{"type":49,"tag":125,"props":3120,"children":3121},{"style":365},[3122],{"type":54,"value":3086},{"type":49,"tag":125,"props":3124,"children":3125},{"style":168},[3126],{"type":54,"value":3127}," -",{"type":49,"tag":125,"props":3129,"children":3130},{"style":148},[3131],{"type":54,"value":3132}," \u003C\u003C",{"type":49,"tag":125,"props":3134,"children":3135},{"style":148},[3136],{"type":54,"value":3137},"'PY'\n",{"type":49,"tag":125,"props":3139,"children":3140},{"class":127,"line":228},[3141],{"type":49,"tag":125,"props":3142,"children":3143},{"style":168},[3144],{"type":54,"value":3145},"import yaml, pathlib\n",{"type":49,"tag":125,"props":3147,"children":3148},{"class":127,"line":283},[3149],{"type":49,"tag":125,"props":3150,"children":3151},{"style":168},[3152],{"type":54,"value":3153},"for p in pathlib.Path('workflows\u002Fagentic\u002Fconfig\u002Fenvironments').glob('*.yaml'):\n",{"type":49,"tag":125,"props":3155,"children":3156},{"class":127,"line":326},[3157],{"type":49,"tag":125,"props":3158,"children":3159},{"style":168},[3160],{"type":54,"value":3161},"    yaml.safe_load(p.read_text())\n",{"type":49,"tag":125,"props":3163,"children":3164},{"class":127,"line":394},[3165],{"type":49,"tag":125,"props":3166,"children":3167},{"style":148},[3168],{"type":54,"value":3169},"PY\n",{"type":49,"tag":125,"props":3171,"children":3172},{"class":127,"line":403},[3173,3178,3182,3186,3191,3196,3200,3205],{"type":49,"tag":125,"props":3174,"children":3175},{"style":365},[3176],{"type":54,"value":3177},"workflows\u002Fagentic\u002Farena\u002Frun.sh",{"type":49,"tag":125,"props":3179,"children":3180},{"style":168},[3181],{"type":54,"value":1419},{"type":49,"tag":125,"props":3183,"children":3184},{"style":148},[3185],{"type":54,"value":3101},{"type":49,"tag":125,"props":3187,"children":3188},{"style":168},[3189],{"type":54,"value":3190},"en",{"type":49,"tag":125,"props":3192,"children":3193},{"style":142},[3194],{"type":54,"value":3195},"v",{"type":49,"tag":125,"props":3197,"children":3198},{"style":148},[3199],{"type":54,"value":196},{"type":49,"tag":125,"props":3201,"children":3202},{"style":168},[3203],{"type":54,"value":3204}," --dry-run",{"type":49,"tag":125,"props":3206,"children":3207},{"style":132},[3208],{"type":54,"value":3209},"      # necessary, NOT sufficient\n",{"type":49,"tag":125,"props":3211,"children":3212},{"class":127,"line":1359},[3213,3218,3223,3227,3231,3235,3239],{"type":49,"tag":125,"props":3214,"children":3215},{"style":365},[3216],{"type":54,"value":3217},"workflows\u002Fagentic\u002Fpolicy\u002Frun.sh",{"type":49,"tag":125,"props":3219,"children":3220},{"style":168},[3221],{"type":54,"value":3222}," --env",{"type":49,"tag":125,"props":3224,"children":3225},{"style":148},[3226],{"type":54,"value":3101},{"type":49,"tag":125,"props":3228,"children":3229},{"style":168},[3230],{"type":54,"value":3190},{"type":49,"tag":125,"props":3232,"children":3233},{"style":142},[3234],{"type":54,"value":3195},{"type":49,"tag":125,"props":3236,"children":3237},{"style":148},[3238],{"type":54,"value":196},{"type":49,"tag":125,"props":3240,"children":3241},{"style":168},[3242],{"type":54,"value":3243}," --dry-run\n",{"type":49,"tag":64,"props":3245,"children":3246},{},[3247,3249,3255,3257,3262,3264,3270],{"type":54,"value":3248},"For validation, onboarding readiness, ready-to-commit checks, or a full bake gate, load ",{"type":49,"tag":70,"props":3250,"children":3252},{"className":3251},[],[3253],{"type":54,"value":3254},"references\u002Fbake-checklist.md",{"type":54,"value":3256}," and run ",{"type":49,"tag":70,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":54,"value":853},{"type":54,"value":3263},". That gate intentionally opens a fresh sim window; ",{"type":49,"tag":70,"props":3265,"children":3267},{"className":3266},[],[3268],{"type":54,"value":3269},"RESULT: PASS",{"type":54,"value":3271}," is required for validation work.",{"type":49,"tag":57,"props":3273,"children":3275},{"id":3274},"prerequisites",[3276],{"type":54,"value":3277},"Prerequisites",{"type":49,"tag":462,"props":3279,"children":3280},{},[3281,3302,3307],{"type":49,"tag":466,"props":3282,"children":3283},{},[3284,3286,3292,3294,3300],{"type":54,"value":3285},"Workflow set up via [[i4h-workflow-setup]] (",{"type":49,"tag":70,"props":3287,"children":3289},{"className":3288},[],[3290],{"type":54,"value":3291},".venv",{"type":54,"value":3293}," present); the ",{"type":49,"tag":70,"props":3295,"children":3297},{"className":3296},[],[3298],{"type":54,"value":3299},"arena\u002Frun.sh --bridge",{"type":54,"value":3301}," launch depends on it.",{"type":49,"tag":466,"props":3303,"children":3304},{},[3305],{"type":54,"value":3306},"An existing env id with its scene keys (the bridge edits an env in place; preserve its ids).",{"type":49,"tag":466,"props":3308,"children":3309},{},[3310],{"type":54,"value":3311},"A GPU host able to launch Isaac Sim for the bridge session.",{"type":49,"tag":57,"props":3313,"children":3315},{"id":3314},"limitations",[3316],{"type":54,"value":3317},"Limitations",{"type":49,"tag":462,"props":3319,"children":3320},{},[3321,3326,3346,3359],{"type":49,"tag":466,"props":3322,"children":3323},{},[3324],{"type":54,"value":3325},"Live edits are not persisted until an explicit bake; only bake on user request (\"bake\"\u002F\"save\"\u002F\"persist\"\u002F\"commit to source\").",{"type":49,"tag":466,"props":3327,"children":3328},{},[3329,3331,3337,3339,3344],{"type":54,"value":3330},"Support-surface rescale is source-only (",{"type":49,"tag":70,"props":3332,"children":3334},{"className":3333},[],[3335],{"type":54,"value":3336},"spawn.scale",{"type":54,"value":3338},") — moving an ",{"type":49,"tag":70,"props":3340,"children":3342},{"className":3341},[],[3343],{"type":54,"value":2168},{"type":54,"value":3345}," surface live moves only the visual, not the collision mesh, so props fall through; relaunch to apply.",{"type":49,"tag":466,"props":3347,"children":3348},{},[3349,3351,3357],{"type":54,"value":3350},"A live-added body is not GPU-simulated and must not be tensor-queried (a manual ",{"type":49,"tag":70,"props":3352,"children":3354},{"className":3353},[],[3355],{"type":54,"value":3356},"create_rigid_body_view(...).get_transforms()",{"type":54,"value":3358}," is a fatal CUDA fault); relaunch to simulate it.",{"type":49,"tag":466,"props":3360,"children":3361},{},[3362,3364,3369,3370,3375],{"type":54,"value":3363},"While the bridge runs, do not edit ",{"type":49,"tag":70,"props":3365,"children":3367},{"className":3366},[],[3368],{"type":54,"value":866},{"type":54,"value":767},{"type":49,"tag":70,"props":3371,"children":3373},{"className":3372},[],[3374],{"type":54,"value":873},{"type":54,"value":3376},", the env class, runtime, or env YAML.",{"type":49,"tag":57,"props":3378,"children":3380},{"id":3379},"troubleshooting",[3381],{"type":54,"value":3382},"Troubleshooting",{"type":49,"tag":462,"props":3384,"children":3385},{},[3386,3402,3439,3485],{"type":49,"tag":466,"props":3387,"children":3388},{},[3389,3394,3395,3400],{"type":49,"tag":470,"props":3390,"children":3391},{},[3392],{"type":54,"value":3393},"Error:",{"type":54,"value":2096},{"type":49,"tag":70,"props":3396,"children":3398},{"className":3397},[],[3399],{"type":54,"value":3291},{"type":54,"value":3401}," \u002F import fails or bridge won't launch - Cause: workflow not set up. Fix: run [[i4h-workflow-setup]] first.",{"type":49,"tag":466,"props":3403,"children":3404},{},[3405,3409,3410,3415,3417,3422,3424,3430,3431,3437],{"type":49,"tag":470,"props":3406,"children":3407},{},[3408],{"type":54,"value":3393},{"type":54,"value":2096},{"type":49,"tag":70,"props":3411,"children":3413},{"className":3412},[],[3414],{"type":54,"value":535},{"type":54,"value":3416}," \u002F bridge URL unreachable - Cause: bridge not ready yet or wrong env URL. Fix: set ",{"type":49,"tag":70,"props":3418,"children":3420},{"className":3419},[],[3421],{"type":54,"value":1603},{"type":54,"value":3423}," and wait for ",{"type":49,"tag":70,"props":3425,"children":3427},{"className":3426},[],[3428],{"type":54,"value":3429},"[agentic-arena] scene-edit bridge ready",{"type":54,"value":1613},{"type":49,"tag":70,"props":3432,"children":3434},{"className":3433},[],[3435],{"type":54,"value":3436},"${RUN_DIR}\u002Flogs\u002Fbridge.log",{"type":54,"value":3438}," before calling endpoints.",{"type":49,"tag":466,"props":3440,"children":3441},{},[3442,3446,3448,3453,3454,3460,3462,3468,3470,3475,3477,3483],{"type":49,"tag":470,"props":3443,"children":3444},{},[3445],{"type":54,"value":3393},{"type":54,"value":3447}," object moves for one frame then snaps back - Cause: it's a kinematic embedded rigid body (",{"type":49,"tag":70,"props":3449,"children":3451},{"className":3450},[],[3452],{"type":54,"value":2176},{"type":54,"value":201},{"type":49,"tag":70,"props":3455,"children":3457},{"className":3456},[],[3458],{"type":54,"value":3459},"SCISSOR_TABLE_USD",{"type":54,"value":3461},"), so ",{"type":49,"tag":70,"props":3463,"children":3465},{"className":3464},[],[3466],{"type":54,"value":3467},"\u002Fobject\u002Fteleport",{"type":54,"value":3469}," and raw ",{"type":49,"tag":70,"props":3471,"children":3473},{"className":3472},[],[3474],{"type":54,"value":2133},{"type":54,"value":3476}," don't hold. Fix: use ",{"type":49,"tag":70,"props":3478,"children":3480},{"className":3479},[],[3481],{"type":54,"value":3482},"helpers.move(\"\u003Ckey>\", ...)",{"type":54,"value":3484}," to drive the PhysX body.",{"type":49,"tag":466,"props":3486,"children":3487},{},[3488,3492,3494,3499],{"type":49,"tag":470,"props":3489,"children":3490},{},[3491],{"type":54,"value":3393},{"type":54,"value":3493}," a live edit returns ",{"type":49,"tag":70,"props":3495,"children":3497},{"className":3496},[],[3498],{"type":54,"value":1651},{"type":54,"value":3500}," - Cause: invalid request for that entity. Fix: report the exact payload and error to the user; do not restart the bridge as a fallback.",{"type":49,"tag":57,"props":3502,"children":3504},{"id":3503},"final-response",[3505],{"type":54,"value":3506},"Final Response",{"type":49,"tag":64,"props":3508,"children":3509},{},[3510],{"type":54,"value":3511},"Live session: report each bridge action, verified live pose, capture path, and whether source was baked from the collected bridge state.",{"type":49,"tag":64,"props":3513,"children":3514},{},[3515],{"type":54,"value":3516},"After bake: report files touched, cheap static check results, and final bridge state. Report fresh-source validation results only if the user explicitly asked for that validation gate.",{"type":49,"tag":3518,"props":3519,"children":3520},"style",{},[3521],{"type":54,"value":3522},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3524,"total":3682},[3525,3543,3560,3571,3583,3597,3610,3624,3637,3648,3662,3671],{"slug":3526,"name":3526,"fn":3527,"description":3528,"org":3529,"tags":3530,"stars":3540,"repoUrl":3541,"updatedAt":3542},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3531,3534,3537],{"name":3532,"slug":3533,"type":13},"Documentation","documentation",{"name":3535,"slug":3536,"type":13},"MCP","mcp",{"name":3538,"slug":3539,"type":13},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":3544,"name":3544,"fn":3545,"description":3546,"org":3547,"tags":3548,"stars":3557,"repoUrl":3558,"updatedAt":3559},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3549,3552,3555],{"name":3550,"slug":3551,"type":13},"Containers","containers",{"name":3553,"slug":3554,"type":13},"Deployment","deployment",{"name":3556,"slug":3086,"type":13},"Python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":3561,"name":3561,"fn":3562,"description":3563,"org":3564,"tags":3565,"stars":3557,"repoUrl":3558,"updatedAt":3570},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3566,3569],{"name":3567,"slug":3568,"type":13},"CI\u002FCD","ci-cd",{"name":3553,"slug":3554,"type":13},"2026-07-14T05:25:59.97109",{"slug":3572,"name":3572,"fn":3573,"description":3574,"org":3575,"tags":3576,"stars":3557,"repoUrl":3558,"updatedAt":3582},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3577,3578,3579],{"name":3567,"slug":3568,"type":13},{"name":3553,"slug":3554,"type":13},{"name":3580,"slug":3581,"type":13},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":3584,"name":3584,"fn":3585,"description":3586,"org":3587,"tags":3588,"stars":3557,"repoUrl":3558,"updatedAt":3596},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3589,3592,3593],{"name":3590,"slug":3591,"type":13},"Debugging","debugging",{"name":3580,"slug":3581,"type":13},{"name":3594,"slug":3595,"type":13},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":3598,"name":3598,"fn":3599,"description":3600,"org":3601,"tags":3602,"stars":3557,"repoUrl":3558,"updatedAt":3609},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3603,3606],{"name":3604,"slug":3605,"type":13},"Best Practices","best-practices",{"name":3607,"slug":3608,"type":13},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":3611,"name":3611,"fn":3612,"description":3613,"org":3614,"tags":3615,"stars":3557,"repoUrl":3558,"updatedAt":3623},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3616,3619,3622],{"name":3617,"slug":3618,"type":13},"Machine Learning","machine-learning",{"name":3620,"slug":3621,"type":13},"Migration","migration",{"name":9,"slug":8,"type":13},"2026-07-17T06:07:11.777011",{"slug":3625,"name":3625,"fn":3626,"description":3627,"org":3628,"tags":3629,"stars":3557,"repoUrl":3558,"updatedAt":3636},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3630,3633],{"name":3631,"slug":3632,"type":13},"QA","qa",{"name":3634,"slug":3635,"type":13},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":3638,"name":3638,"fn":3639,"description":3640,"org":3641,"tags":3642,"stars":3557,"repoUrl":3558,"updatedAt":3647},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3643,3644],{"name":3553,"slug":3554,"type":13},{"name":3645,"slug":3646,"type":13},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":3649,"name":3649,"fn":3650,"description":3651,"org":3652,"tags":3653,"stars":3557,"repoUrl":3558,"updatedAt":3661},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3654,3657,3658],{"name":3655,"slug":3656,"type":13},"Code Review","code-review",{"name":3580,"slug":3581,"type":13},{"name":3659,"slug":3660,"type":13},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":3663,"name":3663,"fn":3664,"description":3665,"org":3666,"tags":3667,"stars":3557,"repoUrl":3558,"updatedAt":3670},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3668,3669],{"name":3631,"slug":3632,"type":13},{"name":3634,"slug":3635,"type":13},"2026-07-14T05:25:54.928983",{"slug":3672,"name":3672,"fn":3673,"description":3674,"org":3675,"tags":3676,"stars":3557,"repoUrl":3558,"updatedAt":3681},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3677,3680],{"name":3678,"slug":3679,"type":13},"Automation","automation",{"name":3567,"slug":3568,"type":13},"2026-07-30T05:29:03.275638",496,{"items":3684,"total":3778},[3685,3702,3712,3726,3736,3751,3766],{"slug":3686,"name":3686,"fn":3687,"description":3688,"org":3689,"tags":3690,"stars":23,"repoUrl":24,"updatedAt":3701},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3691,3694,3697,3698],{"name":3692,"slug":3693,"type":13},"Data Analysis","data-analysis",{"name":3695,"slug":3696,"type":13},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":13},{"name":3699,"slug":3700,"type":13},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":3703,"name":3703,"fn":3704,"description":3705,"org":3706,"tags":3707,"stars":23,"repoUrl":24,"updatedAt":3711},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3708,3709,3710],{"name":3553,"slug":3554,"type":13},{"name":3645,"slug":3646,"type":13},{"name":9,"slug":8,"type":13},"2026-07-14T05:29:06.667109",{"slug":3713,"name":3713,"fn":3714,"description":3715,"org":3716,"tags":3717,"stars":23,"repoUrl":24,"updatedAt":3725},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3718,3721,3722],{"name":3719,"slug":3720,"type":13},"Agents","agents",{"name":9,"slug":8,"type":13},{"name":3723,"slug":3724,"type":13},"Research","research","2026-07-14T05:28:06.816956",{"slug":3727,"name":3727,"fn":3728,"description":3729,"org":3730,"tags":3731,"stars":23,"repoUrl":24,"updatedAt":3735},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3732,3733,3734],{"name":3692,"slug":3693,"type":13},{"name":9,"slug":8,"type":13},{"name":3634,"slug":3635,"type":13},"2026-07-17T05:29:03.913266",{"slug":3737,"name":3737,"fn":3738,"description":3739,"org":3740,"tags":3741,"stars":23,"repoUrl":24,"updatedAt":3750},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3742,3743,3746,3747],{"name":3678,"slug":3679,"type":13},{"name":3744,"slug":3745,"type":13},"Imaging","imaging",{"name":9,"slug":8,"type":13},{"name":3748,"slug":3749,"type":13},"Video","video","2026-07-17T05:28:53.905004",{"slug":3752,"name":3752,"fn":3753,"description":3754,"org":3755,"tags":3756,"stars":23,"repoUrl":24,"updatedAt":3765},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3757,3758,3761,3762],{"name":3553,"slug":3554,"type":13},{"name":3759,"slug":3760,"type":13},"Docker","docker",{"name":9,"slug":8,"type":13},{"name":3763,"slug":3764,"type":13},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":3767,"name":3767,"fn":3768,"description":3769,"org":3770,"tags":3771,"stars":23,"repoUrl":24,"updatedAt":3777},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3772,3773,3776],{"name":9,"slug":8,"type":13},{"name":3774,"slug":3775,"type":13},"Quantum Computing","quantum-computing",{"name":15,"slug":16,"type":13},"2026-07-14T05:26:58.898253",305]