# search

> Поиск записей в памяти — параметры, поля ответа, статусы unverified/stale/conflict, связи графа и ошибки.

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

Сквозной пример: новый разработчик спрашивает агента «как у нас выкатывается staging?», и агент ищет в MMW.

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

`search` возвращает записи рабочей области, подходящие под запрос, вместе с происхождением (`source_id`, `source_hash`, `source_revision`), статусом свежести и связями графа знаний. Инструмент только читает: ничего не создаёт и не меняет.

## Параметры

| Параметр | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| `query` | string | — (обязательный) | Текст запроса. Пустой запрос возвращает последние записи области. |
| `workspace` | string | `"default"` | Рабочая область. Должна уже существовать (в ней хотя бы раз сохраняли). |
| `scope` | string или null | `null` | Фильтр по ярлыку, например `shared` или `private`. |
| `limit` | integer | `10` | Сколько записей вернуть. Значения вне 1–50 приводятся к ближайшей границе. |
| `current_source_hash` | string или null | `null` | Текущий хеш источника: записи, у которых `source_hash` отличается, получат статус `stale`. |
| `exclude_stale` | boolean | `false` | Не возвращать записи со статусом `stale`. |

## Как ищет

1. Запрос делится на слова; запись подходит, если в её тексте или поле `source` встречается хотя бы одно слово. `score` — число совпавших слов.
2. Если совпадений нет или запрос абстрактный, сервер расширяет его синонимами и терминами проекта с помощью языковой модели и ищет ещё раз (с учётом `fact_key`).
3. Результаты сортируются по `score`, затем по времени последнего изменения, и обрезаются до `limit`.
4. В организации в выдачу попадают только записи, которые вам разрешено видеть по правилам видимости.

## Ответ

Результат — список записей, в структурированном ответе он лежит в поле `result`.

| Поле | Описание |
| --- | --- |
| `id` | ID записи. |
| `workspace` | Рабочая область. |
| `scope` | Ярлык записи. |
| `content` | Текст записи. |
| `source` | Кто сохранил (`owner`, `agent`, `telegram` и т. п.). |
| `source_id`, `source_hash`, `source_revision` | Происхождение записи. |
| `fact_key` | Ключ темы. |
| `confidence` | Уверенность 0.0–1.0. |
| `status` | `unverified`, `stale` или `conflict` (см. ниже). |
| `derived_from` | ID записей, которые эта запись обобщает. |
| `superseded_by` | ID более новой версии с тем же `fact_key` или `null`. Новейшие версии стоят в выдаче первыми. |
| `score` | Релевантность: число совпавших слов запроса. |
| `graph_relations` | Связи с другими записями: `relation`, `direction` (`outgoing` или `incoming`), `weight`, `target_id`, `preview` (первые 120 символов связанной записи). |
| `created_at`, `updated_at` | Время создания и последнего изменения, ISO 8601. |

### Статусы

| Статус | Когда |
| --- | --- |
| `conflict` | У записи есть «соседи» с тем же `fact_key` в той же области, но с другим содержимым или хешем источника. |
| `stale` | Передан `current_source_hash`, и он отличается от `source_hash` записи; или запись помечена устаревшей архивариусом. |
| `unverified` | Всё остальное. Это нормальный статус: MMW хранит происхождение, но не утверждает истинность. |

Если статусов несколько, показывается самый тревожный: `conflict` важнее `stale`, `stale` важнее `unverified`. **Сводка наследует статус источников:** если запись создана с `derived_from`, а одна из исходных записей в конфликте или устарела, сводка получит `conflict` или `stale` (проверяется до трёх уровней вглубь).

## Пример

```json title="arguments"
{
  "query": "staging выкатывается",
  "workspace": "default",
  "limit": 5
}
```

```json
{
  "result": [
    {
      "id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c",
      "workspace": "default",
      "scope": "shared",
      "content": "staging выкатывается через systemd-юнит app-staging",
      "source": "agent",
      "source_id": "docs/deploy.md",
      "source_hash": "sha256:9f2c4e1a",
      "source_revision": "a1b2c3d",
      "fact_key": "deploy-staging",
      "confidence": 0.9,
      "status": "unverified",
      "derived_from": [],
      "score": 2,
      "graph_relations": [
        {
          "relation": "relates_to",
          "direction": "outgoing",
          "weight": 0.8,
          "target_id": "b7e1d0c2-5a44-4f0e-8f3a-2c9d1e6f0a11",
          "preview": "prod выкатывается через релизный пайплайн"
        }
      ],
      "created_at": "2026-10-05T09:12:00.412345+00:00",
      "updated_at": "2026-10-05T09:12:00.412345+00:00"
    }
  ]
}
```

Связи строит архивариус; он выбирает `relation` из значений `relates_to`, `fixes_issue`, `supersedes`; `weight` — сила связи.

## Ошибки

| Текст | Причина |
| --- | --- |
| `workspace '…' is not active` | Такой рабочей области нет (в ней ещё ничего не сохраняли) или она удалена. Поиск не создаёт области. |
| `403 Forbidden: workspace access denied for project` | Рабочая область принадлежит другому проекту, а ключ привязан к этому. |
| `MCP rate limit exceeded`, `project call limit exceeded` | Слишком много вызовов в минуту. |
| `bound project is missing, inactive, or outside tenant` | Проект, к которому привязан ключ, удалён или неактивен. |
| `[MMW Notice]: …` | Нет подписки или аккаунт приостановлен. В льготный период после окончания подписки поиск работает. |

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

`current_source_hash` сравнивается со **всеми** записями выдачи, у которых есть `source_hash`, — в том числе из других источников. Чтобы проверить один документ, используйте [`validate_memory`](/reference/validate-memory/) с `source_id`, а в `search` передавайте хеш только когда в выдаче записи одного источника.

- `scope` — фильтр по ярлыку, а не механизм доступа. В организации доступ определяет [видимость](/organizations/visibility/).
- Пустая выдача не ошибка: попробуйте другие слова, проверьте `workspace` и то, что ключ привязан к нужному проекту.
- Чтения переданных знаний уволенных сотрудников записываются в [журнал организации](/organizations/audit-log/) (только количество, без содержимого).

## Что дальше
