# Источники, которые вы добавляете сами (/ru/docs/memo/sources)

Эта страница поможет дать Memo одну вещь, которую нужно запомнить: файл, веб-страницу или вставленный текст. Memo
хранит ее как отдельный документ, поэтому вы находите ее поиском, агент находит ее, когда что-то ищет, а факты могут
на нее ссылаться. Папка, за которой следит Memo, нужна для многих файлов, которые часто меняются
([Заметки и папки](/llms.mdx/docs/ru/memo/notes/content.md)). Эта страница про один источник.

## Добавьте источник [#добавьте-источник]

```sh
memo sources add ~/Downloads/runner-notes.pdf --subject project:3
memo sources add https://example.org/release-notes --title "Release notes"
pbpaste | memo sources add - --subject person:12
```

| Что дать | Что читает Memo |
|---|---|
| Путь к файлу | Файл, теми же читателями, что в разделе [Файлы, которые читает Memo](/llms.mdx/docs/ru/memo/notes/content.md#files-memo-can-read), и веб-страницы, сохраненные как `.html` или `.htm` |
| Адрес `http` или `https` | Страницу, один раз, с этого компьютера, в том виде, в каком она есть сегодня |
| `-` | Текст из stdin |

- **Хранится только текст.** Memo сохраняет прочитанный текст, заголовок и, для страницы, адрес, который вы дали.
  Файл он не копирует, если вы не добавите `--keep-copy`. Тогда файл копируется в папку данных Memo под именем по
  его содержимому, поэтому один и тот же файл, добавленный дважды, хранится один раз. `--keep-copy` работает только
  с файлом, не со страницей и не со вставленным текстом.
- **Один и тот же источник дважды остается одним источником.** Повторное добавление меняет только предметы, которые
  вы добавили. Если содержимое источника уже есть в папке, за которой следит Memo, или в Drive, он не сохраняется
  еще раз. Ответ называет тот документ в `duplicate_of`, и к нему привязываются только предметы.
- **`--subject`** говорит, о ком или о чем источник: `person:`, `organization:`, `project:`, `task:`, `meeting:` или
  контакт мессенджера, например `telegram:'Kai Sample'`. Повторите его для нескольких. Ваши предметы действуют
  сразу, а предметы агента ждут, пока вы их не подтвердите.
- **`--title`** дает название. Без него Memo берет собственный заголовок страницы или файла или первую строку текста.
- **`--max-chars`** оставляет не больше этого числа символов текста, до 2 000 000 (по умолчанию 200 000). Ответ
  пишет `truncated: true`, когда сохранена только первая часть.

У картинки или отсканированного PDF нет текста, который Memo может прочитать. Такой источник хранится только по
заголовку и предметам (`read: "no-text"`).

## Что говорит ответ [#что-говорит-ответ]

```sh
memo sources add notes.txt --json
```

| Поле | Что значит |
|---|---|
| `ref` | Документ, например `document:42`. Его цитируют, показывают или удаляют |
| `created` | `true`, когда этот вызов его сохранил, и `false`, когда он уже был |
| `duplicate_of` | Документ из папки или Drive с тем же содержимым, когда ничего нового не сохранено |
| `kind` | `file`, `page` или `text` |
| `mime`, `bytes` | Тип и размер прочитанного |
| `chars`, `truncated` | Сколько символов текста хранится и только ли это первая часть. `truncated` равен `null`, когда текст сохранило прошлое добавление |
| `extractor`, `read` | Читатель, который его прочитал, и `extracted` или `no-text` |
| `url` | Адрес, который вы дали. Адрес, на котором закончилось перенаправление, никогда не хранится |
| `kept` | `text` или `copy`, когда хранится и копия файла. `null` для дубликата |
| `searchable.words` | Его текст уже есть в поиске по словам |
| `searchable.meaning` | Его текст ждет поиска по смыслу: модель поиска загружена, и `notes.embed` не `false`. `memo sync` его обработает |
| `subjects` | Все, о чем он сейчас, включая предметы, привязанные раньше |

## Посмотрите на источник [#посмотрите-на-источник]

```sh
memo sources show document:42
memo sources show document:42 --bytes 65536 --json
memo sources mentions document:42
```

`sources show` дает текст (16 КиБ по умолчанию, `--bytes` для большего), что это такое (`kind`, `url`, который вы
дали, `file_name`, `mime`, `bytes`), хранится ли копия, предметы и подтвержден ли каждый, и что на него ссылается.
Это `facts`, `memories` и пакеты находок (`batches`), чьи доказательства его называют. `kept` равен `copy`, только
пока копия лежит в папке данных Memo. Любой другой документ показывается с `added: false`, и эти поля в нем `null`.

`sources mentions` перечисляет людей и организации, которых Memo уже знает и чьи имена есть в тексте. Текст
читается на этом компьютере. Человек находится по имени, которое Memo видел в мессенджере или на встрече, или по
его адресу почты или номеру телефона, а организация по полному названию. Если одно имя носят несколько человек, в
списке будет каждый. Memo читает названия не больше 500 организаций. Если их больше, ответ говорит об этом в
`missing`.

## Читатель предлагает факты [#читатель-предлагает-факты]

Читатель это модель, которую вы выбираете. Он читает источник и предлагает факты из него. Каждый факт подтверждаете
вы, сам по себе ничего фактом не становится.

```sh
memo sources readers list
memo sources readers set claude-code
memo sources suggest document:42 --subject person:12
memo actions confirm 17 fact-1 fact-3 --fingerprint <fingerprint>
```

**Выберите читателя один раз.** `memo sources readers list` показывает каждого читателя: установлен ли он и выполнен
ли вход, его модель, уходит ли текст с этого компьютера (`leaves_computer`) и мог бы ли он открывать здесь файлы
(`reads_files`). Команда делает по одной проверке на читателя, только для чтения, и ничего не выбирает.
`memo sources readers set <reader>` выбирает читателя. Выбираете только вы, и пока вы не выбрали, `sources suggest`
отказывает с `reader.none-chosen` и называет читателей.

| Читатель | Кто читает текст | Уходит ли с компьютера | Модель |
|---|---|---|---|
| `claude-code` | Ваш Claude Code, в котором выполнен вход, в пустой папке, со всеми выключенными инструментами, серверами MCP, хуками и сохраненными сессиями | Да, в Anthropic | Своя или `--model` |
| `codex` | Ваш Codex CLI, в котором выполнен вход, в своей песочнице только для чтения, в пустой папке. Это агент, и файлы на этом компьютере он читать все равно мог бы | Да, в OpenAI | Своя или `--model` |
| `ollama` | Ollama, запущенный на этом компьютере, только по `127.0.0.1:11434` | Нет | Нужна, одна из тех, что показывает `ollama list` |
| `openai`, `anthropic` | API провайдера с вашим собственным ключом | Да | Нужна |

Читатель API берет ключ из системного хранилища ключей, никогда из переменной окружения или командной строки.
`memo models keys set openai` спрашивает его в скрытом вводе или читает из stdin. `memo models keys remove openai`
забывает ключ. Ключ никогда не выводится.

**Что делает `sources suggest`.** Он отправляет читателю сохраненный текст источника с указанием предложить факты,
каждый с точными словами, на которых он держится, и считает текст данными, а не указаниями. Затем он проверяет
каждый ответ:

- цитата должна быть в тексте слово в слово, пробелы и переносы строк не учитываются. Факт, чьей цитаты там нет,
  отбрасывается как `quote-not-found`.
- у факта должно быть утверждение и один из видов фактов (`fact`, `statement`, `question`, `decision`, `promise`).
- факт, который уже сохранен из этого источника, отбрасывается и называется в `duplicate_of`, а факт, повторенный в
  ответе, остается один раз.

Остальное становится одним пакетом находок, который ссылается на источник. В нем каждый факт со своей цитатой, его
добавляет `memo-reader`, а в поле модели указаны читатель и модель. **Подтверждаете его только вы**, даже когда
включен `agent_decisions`. `memo actions confirm <batch> [fact ids] --fingerprint <fingerprint>` создает названные
вами факты и отклоняет остальные. Подтвержденный факт хранит цитату в своем доказательстве, поэтому позднейшая
проверка источника знает, на каких словах он держится. Ответ перечисляет добавленные `facts` и отброшенные
(`dropped`) с причиной.

Если прочитать тот же текст тем же читателем, моделью и с тем же предметом, команда вернет пакет, добавленный раньше,
с `reused: true`, и читателя снова не спросит. `--rescan` спрашивает снова. `--subject` говорит, о ком или о чем
каждый факт: `person:`, `organization:`, `project:` или `task:`. `--provider` и `--model` читают один раз другим
читателем, и указать их можете только вы.

Агент в своем терминале может выполнить `sources suggest`, но только с читателем, которого выбрали вы, и пакет все
равно ждет вас. Через MCP команда не предлагается, агент не может отправить текст источника за пределы компьютера.

## Удалите источник [#удалите-источник]

```sh
memo sources remove document:42
```

Добавленный вами источник удаляете только вы. Его текст удаляется, копия, которую хранил Memo, тоже, а ответ
перечисляет факты и записи памяти, которые на него ссылаются, в `facts` и `memories`. Удаление ни одну из них не
меняет. Они сохраняют свой статус, а следующая проверка источников в `memo sync` открывает проверку для каждой, с
источником, которого больше нет, и решаете вы. Файл на вашем диске Memo никогда не трогает.

## Для агента [#для-агента]

Агент в терминале добавляет источник так же, и его предметы ждут вашего подтверждения:

```text prompt
Используй memo CLI, чтобы сохранить эти заметки со встречи как источник о Northbridge Bench, затем перечисли людей,
которые в нем названы.
```

Через MCP `sources add` принимает только `text`. Агент не может заставить Memo прочитать файл на этом компьютере или
открыть адрес. `sources remove`, `sources suggest` и `sources readers set` через MCP не предлагаются
([Сервер MCP](/llms.mdx/docs/ru/memo/mcp/content.md)).

## Если добавить не получается [#если-добавить-не-получается]

Каждый отказ называет причину и что делать дальше. Все они, и причины, по которым отказывает читатель, перечислены
в разделе [Решение проблем](/llms.mdx/docs/ru/memo/troubleshooting/content.md#adding-a-source). Ссылку, для которой нужно войти, например закрытый
Google Doc, так прочитать нельзя. Сохраните ее как файл и добавьте файл.
