> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mesa.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# fs.changes

> Manage active changes on a mounted Mesa filesystem.

`fs.changes` operates on the mounted filesystem checkout. For REST-level change creation and patching, use `mesa.changes`.

```python theme={null}
async with mesa.fs.mount(repos=["app"]) as fs:
    change_id = await fs.changes.new("app", bookmark="main", message="Cool new feature")
    await fs.write("/acme/app/feature.py", b"print('hi')\n")
    current = await fs.changes.current("app")
```

## Methods

<ParamField path="new(repo, bookmark=None, change_id=None, message=None)" type="async -> str">
  Create a new change forked from a bookmark or existing change. Exactly one of `bookmark` or `change_id` must be supplied. Pass `message` to set the new change description; `None` omits it and creates the change with no description.
</ParamField>

<ParamField path="edit(repo, bookmark=None, change_id=None)" type="async -> str">
  Check out an existing change. This never creates a new change. Exactly one of `bookmark` or `change_id` must be supplied.
</ParamField>

<ParamField path="list(repo, limit=50)" type="async -> list[ChangeInfo]">
  List changes reachable from the current checkout, most recent first.
</ParamField>

<ParamField path="current(repo)" type="async -> ChangeInfo">
  Return the currently active change for a mounted repo.
</ParamField>

## ChangeInfo

<ResponseField name="change_id" type="str">
  Mesa change ID.
</ResponseField>

<ResponseField name="commit_oid" type="str">
  Git commit OID for the change snapshot.
</ResponseField>

## Errors

Raises `FileNotFoundError` if the source bookmark or change does not exist.
