# mark_promise_used

Name the promises you cited or acted on in this session, out of the ones an index read handed you. It is the only thing that tells Balladeer which rows were worth sending: expanding a promise and then ignoring it is not the same as using it, and a row nobody uses is a row the index should have kept back. Call it once, near the end of the work, with the ids you actually used. It changes nothing about any promise, and naming none is a fine answer: say nothing rather than naming ids you did not use. An id this session was never offered comes back under `notServed` rather than being recorded.

Reviewed 2026-10-01. Read the [current operating instructions](https://app.balladeer.ai/agent) and the [tool index](/docs/mcp-reference.md). This reference does not authorize the action.

## Parameters

```json
{
  "type": "object",
  "properties": {
    "session": {
      "description": "The session id `npx -y balladeer@latest session` printed, the same one you passed to the reads and wrote into your commit as Balladeer-Session.",
      "type": "string",
      "pattern": "^bs_[0-9a-f]{32}$"
    },
    "promiseIds": {
      "description": "The promises you cited or acted on, at most 12, which is one selection's worth. Ids only: never a reason, a file name or anything out of your conversation.",
      "minItems": 1,
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^prom_[a-z0-9]{8,64}$"
      }
    }
  },
  "required": [
    "session",
    "promiseIds"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
```

## Effect annotations

```json
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
```
