---
title: memhtml curate run
description: "Run the curator: start (or resume) a session on curate/<date>, brief a model on the corpus, let it search, read, exec, and propose within a budget, then commit the session to the branch as `memhtml(curate): <report line>`."
---

## 1. Synopsis

Run the curator: start (or resume) a session on curate/&lt;date>, brief a model on the corpus, let it search, read, exec, and propose within a budget, then commit the session to the branch as `memhtml(curate): <report line>`.

```sh
memhtml curate run [options]
```

## 2. Arguments

This command takes no positional arguments.

## 3. Flags

| Flag | Type | Default | Values | Description |
| --- | --- | --- | --- | --- |
| `--ref` | string | *no default* | *no fixed set* | The curator branch, `refs/heads/` prepended when absent. Defaults to curate/&lt;UTC date>. Must sit under curate/: `main`, `refs/heads/main`, any other branch, or a tag is ERR_INVALID_FLAG at exit 2, and the branch HEAD points at is ERR_INVALID_MEMORY at exit 1, so a run can never land on the system of record or move the checkout. The session id is the ref with slashes as dashes (curate-2026-09-23). |
| `--model` | string | *no default* | *no fixed set* | The model: `fake` (a scripted, credential-free curator that plays the dedup rule), `bedrock:<modelId>` (the default AWS credential chain, region from AWS_REGION), or `proxy:<model>` (an OpenAI-compatible proxy at MEMHTML_LLM_BASE_URL, named with the MEMHTML_LLM_MODEL_PREFIX convention). Defaults to MEMHTML_CURATOR_MODEL, else `proxy:<default model>` when MEMHTML_LLM_BASE_URL is set; otherwise the flag is required. |
| `--max-steps` | integer | `40` | *no fixed set* | Model calls the run may make before it is stopped (`stoppedBy: maxSteps`). |
| `--wall-clock-ms` | integer | `1200000` | *no fixed set* | Wall clock for the whole run, model calls and tool executions together (`stoppedBy: wallClock`). |
| `--dry-run` | flag | `false` | *no fixed set* | Run the loop over an in-memory overlay: no session is written, nothing is appended, nothing is committed, and the ref stays where it was. With `--resume`, the overlay starts from the session's logged ops and the log is left as it was. The payload reports what would have been proposed. |
| `--resume` | flag | `false` | *no fixed set* | Reuse the existing session on the ref instead of refusing with ERR_STORAGE (session.exists). The head is loaded at the session's own base. A missing session is ERR_STORAGE at exit 1. |
| `--charter` | string | *no default* | *no fixed set* | A file to brief the model with in place of the shipped charter. Its placeholders are filled from the store's `memhtml.config.json` as the shipped one's are: `{{placementQuota}}` (curator.placementQuota), `{{refusedTypesRule}}` (a sentence naming writeBar.refusedTypes, or nothing when the store refuses none), and `{{refusedTypesClause}}` (the same as a clause); any other text is used as written. The write bar still judges every op the run proposes. A file that cannot be read or has no text is ERR_STORAGE at exit 1 before any model call. |

Every command also accepts the [global flags](/reference/global-flags/).

## 4. Response

On success the command writes one JSON envelope to stdout, and its `type` is `curate.run`.

On failure it writes the failure envelope, whose `code` comes from [error codes](/reference/error-codes/).

[The JSON envelope](/reference/envelope/) gives the fields both shapes carry. [Response types](/reference/response-types/) lists every value `type` takes across the binary.

## 5. Further reading

No guide block names this command. The [guide](/reference/guide/) is the workflow prose the CLI ships beside the command table: which command to reach for, and in what order.

## 6. Provenance

A loader generates this page from `apps/cli/src/commands.ts` while the site builds, so no file in the repository holds it: the `COMMANDS` array there is the one source of argument parsing, of `memhtml manifest`, and of `AGENTS.md`. Change the registry and this page changes with it.