---
title: "Импорт"
description: "Импорт бесед Claude и ChatGPT, MCP-памяти (memory.json), проектов и памяти Claude, а также обычного Markdown — с распознаванием формата по содержимому."
---

# Импорт

Импорт затаскивает существующую базу знаний в пространство (space) одним аплоадом: выгрузки claude.ai и ChatGPT, MCP memory-server, проекты и память Claude, а также обычные Markdown- и текстовые файлы. Формат распознаётся **по содержимому**, а не по имени файла, так что вам не нужно ничего готовить вручную — движок сам разберёт архив и разложит его по папкам.

Импорт — зеркало [экспорта](/docs/import-export/export/): экспорт читает файлы-истину с диска, импорт парсит источник и пишет заметки обычным путём записи. Каждая заметка попадает в пространство ровно так же, как если бы её создал человек в редакторе, — с версионированием, провенансом и индексацией.

## Какие форматы понимает

Один архив Claude или ChatGPT обычно содержит несколько видов данных сразу; импорт распознаёт и переносит всё, что умеет:

| Источник | Файл в выгрузке | Что становится заметкой |
|---|---|---|
| Беседы Claude | `conversations.json` | Одна заметка на разговор, сообщения как `### Human/Assistant` |
| Беседы ChatGPT | `conversations.json` (в т.ч. шардированный `conversations-000.json…`) | Одна заметка на разговор, транскрипт по времени |
| MCP-память | `memory.json` (JSONL) | Заметка на сущность; связи → `[[wikilinks]]` |
| Проекты Claude | `projects.json` или `projects/<uuid>.json` | Папка проекта: документы + инструкции |
| Память Claude | `memories.json` | Заметка на каждый блок памяти аккаунта |
| Дизайн-чаты Claude | `design_chats/<uuid>.json` | Одна заметка на чат |
| Markdown / текст | `.md`, `.txt` | Одна заметка, тело файла = тело заметки |

Формат определяется анализом содержимого (все сервисы шлют файл с именем `conversations.json`, поэтому имя ненадёжно). Пустые сообщения и разговоры без единого содержательного фрагмента не создают «сиротских» заметок — число пропущенных видно в сводке импорта. Если внутри архива попался нераспознанный JSON, он тоже попадает в сводку как `unsupported` — потеря данных всегда видна в сводке, а не происходит незаметно.

## Как импортировать

Импорт живёт на вкладке **Import** в настройках пространства (`/s/<space>/management/import`). Каждая опция — отдельная секция:

- **Файл** — выберите файл выгрузки (`conversations.json`, ZIP-выгрузку целиком или `memory.json`). Отдельный `.md`/`.txt` импортируется перетаскиванием (см. ниже), а не через этот диалог.
- **Skip existing notes** — что делать при повторном импорте (см. ниже).
- **Memory entries** — куда класть сущности памяти (см. ниже).

Долгий импорт идёт **устойчивой задачей** (durable job): прогресс-бар с живым счётчиком записанных заметок, фаза и кнопка **Cancel**. Можно уйти со вкладки и вернуться — импорт продолжит идти в фоне, а по возвращении вы снова увидите прогресс или итоговую сводку.

> [!tip] Перетащите файл в окно
> Отдельный аплоад-диалог не обязателен: перетащите `.md`- или `.txt`-файл прямо в окно приложения — он станет заметкой. Дроп на папку в дереве кладёт заметку в неё, дроп в область содержимого — в папку открытой заметки или в корень. Это тот же пайплайн импорта, просто второй вход в него.

### Опция «Skip existing notes»

Имя файла заметки детерминировано и завязано на идентичность источника. Благодаря этому повторный импорт того же экспорта **перезаписывает те же файлы**, а не плодит дубли, — и полсотни разговоров «Untitled» не сталкиваются друг с другом.

- **Выключено (по умолчанию для повторной заливки — upsert)** — существующие заметки перезаписываются по пути, идемпотентно.
- **Включено** — заметки, чей путь уже существует, **пропускаются**. Это кейс «дозалил обновлённую историю — не перезатирай уже поправленное вручную».

### Опция «Memory entries»

Сущности из `memory.json` можно направить в одно из трёх мест:

- **folder** — видимые пользовательские заметки под корневой папкой импорта.
- **space** — в скрытый mount памяти агента пространства (`.notarium/memory`): такие записи не показываются в дереве, ленте и поиске, но доступны агенту через `recall`.
- **skip** — не импортировать память вовсе.

> [!note] Память пространства, не глобальный домен
> Вариант **space** кладёт записи в память агента конкретного пространства. Отдельного UI-браузера этой памяти внутри пространства нет — она видна агенту через `recall`. Это память конкретного пространства, а не глобальный персональный домен памяти (тот открывается линзой **Memory** в дереве-проводнике) — в него этот импорт не пишет.

## Как раскладываются данные

Импорт создаёт предсказуемое дерево папок внутри выбранного корня:

```md
conversations/claude/     — беседы Claude
conversations/chatgpt/    — беседы ChatGPT
projects/<проект>/        — проекты Claude (+ docs/, prompt-template.md)
memory/claude/            — память аккаунта Claude
memory/<тип-сущности>/    — сущности из memory.json
design-chats/<проект>/    — дизайн-чаты Claude
```

## Даты сохраняются как данные

Наивный импорт датировал бы всю историю «сегодня», и лента свалила бы сотни бесед в одну кучу. Notarium вместо этого **протягивает дату создания как данные**: у каждой заметки во frontmatter пишется `created:` со временем, когда разговор реально произошёл. Лента раскладывает импортированную историю по настоящим дням, а связка «экспорт → импорт» сохраняет даты — перенос идёт без потерь.

Поле «Created» можно и поправить вручную из редактора (метаданные заметки) — например, при миграции или корректировке историчности. Время последнего изменения (`modified`) при этом остаётся реальным временем правки файла и не редактируется.

## Как это работает под капотом

Импорт устроен так, чтобы выдержать и гигабайтные архивы, и обрыв связи:

- **Потоковая обработка.** Аплоад стримится на диск, ZIP распаковывается по одному члену, JSON-массив бесед парсится поэлементно — один разговор за раз. Пиковая память не зависит от размера архива, поэтому 600-МБ выгрузка не роняет сервер.
- **Устойчивая задача.** Когда у хоста есть служебная БД (норма для self-host), импорт по умолчанию — устойчивая задача: аплоад сохраняется в staging, а фоновый воркер пишет заметки вне запроса. Закрытая вкладка, потерянное соединение и даже рестарт сервера не теряют прогресс.
- **Кооперативность.** Массовый импорт не монополизирует сервер: запись уступает интерактивным запросам, фоновая индексация приостанавливается на время потока и догоняет после. Поиск и навигация остаются отзывчивыми даже во время заливки тысяч заметок.

```mermaid
flowchart LR
  src([Архив / файл]) -->|аплоад| stage[Staging на диске]
  stage -->|задача import| worker[Фоновый воркер]
  worker -->|write-path| notes[(Markdown-заметки)]
  worker -.->|прогресс| ui([Вкладка Import])
```

> [!note] Импорт без служебной БД
> На хосте без служебной БД (а она отсутствует только в режиме `AUTH_MODE=none`) слоя задач нет: импорт идёт синхронным потоковым путём в рамках одного запроса, с тем же ядром и живым счётчиком. Прогресс и сводка выглядят так же; отличается лишь то, что импорт не переживёт рестарт сервера.

## Границы

- **Отмена, но не пауза.** Задачу можно отменить (кооперативно), но не поставить на паузу и возобновить.
- **Индикатор — indeterminate.** Число заметок в архиве заранее неизвестно, поэтому прогресс показывает фазу и живой счётчик записанных заметок, а не проценты и ETA.
- **Прерванный аплоад начинается заново.** Устойчивость включается после того, как байты доехали: если заливка большого архива оборвалась, она начинается заново.
- **Бинарные вложения не импортируются.** Текст из вложений встраивается в тело заметки, а сами бинарные файлы — нет (так же, как в экспорте).
- **Импорт ложится в корень пространства.** В диалоге импорта целевая папка не выбирается — заметки попадают в корень; при перетаскивании корень определяется зоной дропа.

## Дальше

- [Экспорт](/docs/import-export/export/) — забрать пространство или папку обратно архивом Markdown.
- [Агенты и MCP](/docs/agents/) — как агент работает с импортированной памятью через `recall`.
