> This page is for version 0.3.0.
> For other versions, use one of these documentation indexes:
> - Main (default): https://docs.nvidia.com/nemo/gym/main/llms.txt
> - 0.7.0: https://docs.nvidia.com/nemo/gym/v0.7.0/llms.txt
> - 0.6.0: https://docs.nvidia.com/nemo/gym/v0.6.0/llms.txt
> - 0.5.1: https://docs.nvidia.com/nemo/gym/v0.5.1/llms.txt
> - 0.5.0: https://docs.nvidia.com/nemo/gym/v0.5.0/llms.txt
> - 0.4.0: https://docs.nvidia.com/nemo/gym/v0.4.0/llms.txt
> - 0.3.0: https://docs.nvidia.com/nemo/gym/v0.3.0/llms.txt
> - 0.2.1: https://docs.nvidia.com/nemo/gym/v0.2.1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/gym/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/gym/_mcp/server.

# nemo_gym.agents.utils.sandbox_observation

Sandbox observations built only from lifecycle facts an AsyncSandbox actually saw.

## Module Contents

### Functions

| Name                                                                                        | Description                                                                                       |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| [`lifecycle_observation`](#nemo_gym-agents-utils-sandbox_observation-lifecycle_observation) | The owner's observation of one created sandbox, or None when there is no AsyncSandbox to observe. |

### API

```python
nemo_gym.agents.utils.lifecycle_observation(
    sandbox: nemo_gym.sandbox.api.AsyncSandbox | None,
    role: typing.Literal['agent', 'verifier', 'environment']
) -> dict[str, typing.Any] | None
```

The owner's observation of one created sandbox, or None when there is no AsyncSandbox to observe.

`outcome` is `sandbox_error` only when every provider close failed; otherwise it stays `unknown`: a
confirmed teardown says nothing about the command or the grade. Cleanup failures stay listed after a retry,
with the first as `error_type`. Resource usage and remote lifetime are never estimated.