# remember

> Сохранение факта, решения или заметки — параметры, ответ, идемпотентность и все ошибки инструмента.

Из этой страницы вы узнаете, какие параметры принимает `remember`, что он возвращает, как сделать повтор запроса безопасным и почему запись может быть отклонена.

Сквозной пример: агент сохраняет договорённость «staging выкатывается через systemd-юнит `app-staging`» со ссылкой на документ `docs/deploy.md`.

## Назначение

`remember` добавляет новую запись в память проекта, к которому привязан ключ. Инструмент **никогда не удаляет и не перезаписывает** существующие записи: повторное сохранение с тем же `fact_key` добавляет более новую версию, а старые остаются и помечаются.

## Параметры

| Параметр | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| `content` | string | — (обязательный) | Текст записи. Не пустой, не длиннее 100 000 символов. |
| `workspace` | string | `"default"` | Рабочая область. Если её ещё нет, она создаётся в проекте ключа. |
| `scope` | string | `"shared"` | Ярлык записи, например `shared` или `private`. По нему можно фильтровать поиск. Доступ не ограничивает. |
| `source` | string | `"owner"` | Кто сохраняет запись (например, `owner`, `agent`). |
| `source_id` | string или null | `null` | Метка источника: документ, файл, сессия. |
| `source_hash` | string или null | `null` | Хеш содержимого источника — по нему потом определяется устаревание. Требует `source_id`. |
| `source_revision` | string или null | `null` | Версия источника (тег, номер ревизии). |
| `fact_key` | string или null | `null` | Ключ темы. Записи с одним ключом и разным содержимым получают статус `conflict`. |
| `confidence` | number | `0.5` | Уверенность от 0.0 до 1.0. |
| `derived_from` | array of string или null | `null` | ID записей, которые эта запись обобщает (сводка). До 50 ID, только существующие и доступные вам записи. |

## Ответ

| Поле | Описание |
| --- | --- |
| `id` | ID новой записи. Нужен для `forget` и `derived_from`. |
| `api_version` | Версия API сервера (`1.0`). |
| `workspace` | Рабочая область. |
| `tenant_id` | Идентификатор аккаунта. |
| `project_id` | Идентификатор проекта ключа. |
| `scope` | Ярлык записи. |
| `status` | Всегда `unverified` для новой записи. |
| `source_id`, `source_hash` | Происхождение, как передано (после вычистки секретов). |
| `derived_from` | Отсортированный список ID исходных записей; пустой, если это не сводка. |
| `created_at` | Время создания, ISO 8601 (UTC). |

## Пример

Вызов, как его делает агент:

```json title="arguments"
{
  "content": "staging выкатывается через systemd-юнит app-staging",
  "workspace": "default",
  "source": "agent",
  "source_id": "docs/deploy.md",
  "source_hash": "sha256:9f2c4e1a",
  "source_revision": "a1b2c3d",
  "fact_key": "deploy-staging",
  "confidence": 0.9
}
```

Ответ:

```json
{
  "id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c",
  "api_version": "1.0",
  "workspace": "default",
  "tenant_id": "t-3f9a",
  "project_id": "0c6e2b54-2d0f-4a51-9d0e-6b1f3c2a8e77",
  "scope": "shared",
  "status": "unverified",
  "source_id": "docs/deploy.md",
  "source_hash": "sha256:9f2c4e1a",
  "derived_from": [],
  "created_at": "2026-10-05T09:12:00.412345+00:00"
}
```

Сводка из нескольких записей — тот же вызов с `derived_from`:

```json title="arguments"
{
  "content": "Деплой: staging — systemd-юнит app-staging, prod — через релизный пайплайн",
  "fact_key": "deploy-summary",
  "derived_from": ["4d428a41-e7b0-4f81-a886-f40c6f6c766c", "b7e1d0c2-5a44-4f0e-8f3a-2c9d1e6f0a11"]
}
```

## Ошибки

Тексты приходят в ответе с `"isError": true` в виде `Error executing tool remember: …`.

| Текст | Причина |
| --- | --- |
| `content exceeds maximum allowed length` | `content` длиннее 100 000 символов. |
| `content must not be empty` | Пустой или состоящий из пробелов `content`. |
| `Memory rejected by Security Guard: …` | Memory Guard распознал в тексте попытку «отравления памяти» (инструкции вида «ignore previous instructions»). |
| `workspace and scope must not be empty` | Пустые `workspace` или `scope`. |
| `confidence must be between 0 and 1` | `confidence` вне диапазона 0–1. |
| `source_id is required when source_hash is provided` | Передан `source_hash` без `source_id`. |
| `derived_from accepts at most 50 memory ids` | Больше 50 ID в `derived_from`. |
| `derived_from contains unknown memory ids` | Среди ID есть несуществующие, удалённые или недоступные вам записи. |
| `invalid X-Idempotency-Key` | Ключ идемпотентности пустой, длиннее 256 символов или содержит не печатные ASCII-символы. |
| `409 Conflict: idempotency key was used with different input` | Тот же ключ идемпотентности уже использован с другим содержимым. |
| `project memory limit exceeded` | Достигнут лимит записей проекта по тарифу. |
| `maximum number of memories exceeded for workspace` / `… for tenant` | Достигнут технический лимит записей рабочей области или аккаунта. |
| `MCP rate limit exceeded`, `project call limit exceeded` | Слишком много вызовов в минуту. |
| `workspace '…' was deleted and cannot be reused` | Рабочая область с этим именем была удалена. |
| `403 Forbidden: workspace access denied for project` | Рабочая область принадлежит другому проекту. |
| `membership may not write in this organization` | В организации: роль «аудитор» или членство неактивно. |
| `[MMW Notice]: …` | Нет подписки, льготный период (только чтение) или аккаунт приостановлен. |

Что делать с каждой ошибкой — на странице [Ошибки](/reference/errors/).

## Примечания

**Идемпотентность.** При прямом HTTP-подключении передайте заголовок `X-Idempotency-Key` (1–256 печатных ASCII-символов). Повтор с тем же ключом и теми же параметрами вернёт тот же ответ с тем же `id`, новой записи не появится. Ключ действует в пределах ключа доступа, проекта и рабочей области. Тот же ключ с другими параметрами даёт ошибку `409 Conflict`.

**Статуса `verified` нет.** `source_hash` — это сведения о происхождении, а не доказательство истинности. Новая запись всегда `unverified`; позже `search` может показать `stale` или `conflict`. Подробнее — [Источник и свежесть](/memory/source-and-freshness/).

**`scope` — это ярлык, а не права доступа.** В организации, кто видит запись, определяет её видимость (автор, отдел, проект, вся организация), а не `scope`. См. [Видимость записей](/organizations/visibility/).

**Секреты вычищаются.** Перед сохранением Memory Guard заменяет найденные ключи, токены и пароли во всех текстовых полях на метки вида `[REDACTED:правило:8 символов хеша]`. Запись при этом сохраняется. См. [Memory Guard](/memory/memory-guard/).

**Архивариус.** После сохранения запись в фоне анализирует [архивариус](/memory/archivist/): строит связи с другими записями (видны как `graph_relations` в `search`).

Сохраняя сводку, всегда передавайте `derived_from`. Тогда, если исходные записи окажутся в конфликте или устареют, сводка получит тот же статус и не будет выглядеть надёжнее своих источников.

## Что дальше
