---
title: Exit
description: The terminal event. Its absence is what distinguishes a cut connection from a finished command — the byte sequences are otherwise identical.
---

```python
@final
class Exit
```

The terminal event. Its **absence** is what distinguishes a cut connection from a
finished command — the byte sequences are otherwise identical.

## Constructor

`Exit` declares no `__new__` or `__init__`, so it is not constructed directly: an instance comes back from another call in this package.

## Properties

### `exit_code`

```python
exit_code: int | None
```

### `kind`

```python
kind: str
```

### `offset`

```python
offset: int
```

Total bytes published. A total rather than a position to resume at, which is why
`Exit` has no `end` getter while `Output` and `Gap` both do.

### `signal`

```python
signal: int | None
```

### `timed_out`

```python
timed_out: bool
```

True when the remote execution deadline expired.

### `truncated`

```python
truncated: bool
```

### `writers_may_be_alive`

```python
writers_may_be_alive: bool
```

## Special methods

### `__repr__`

```python
def __repr__() -> str
```

## Provenance

This page is generated from `bindings/microvms-py/microvms.pyi` by Griffe 2.3.0, run from `site/scripts/gen-reference.mjs` on every `pnpm run sync`, so an edit made here is overwritten by the next run.

To change the page, change the doc comment in the binding's Rust source, then regenerate the declarations with `mise run stubs`. `mise run stubs:check` fails when the committed file no longer matches the source.