インポート
インポートは、既存のナレッジベースを一度のアップロードでまるごとスペースに取り込みます。claude.aiやChatGPTのエクスポート、MCP memory-server、Claudeのプロジェクトとメモリ、そして通常のMarkdown・テキストファイルまで。フォーマットはファイル名ではなく内容から判定するので、事前に手作業で整える必要はありません。エンジンが自力でアーカイブを解析し、フォルダへ振り分けます。
インポートはエクスポートの鏡像です。エクスポートがディスク上のファイル——信頼できる唯一の情報源——をそのまま読み出すのに対し、インポートはソースを解析し、通常の書き込みパスを通してノートを書き込みます。だからこそ各ノートは、バージョン管理も来歴もインデックス化も込みで、人がエディタで作成したのとまったく同じ形でスペースに収まります。
認識できるフォーマット
ClaudeやChatGPTのアーカイブは、たいてい1つの中に複数種類のデータが同居しています。インポートは、扱えるものをすべて検出して取り込みます。
| ソース | エクスポート内のファイル | ノートになるもの |
|---|---|---|
| Claudeの会話 | conversations.json | 会話1件につき1ノート。メッセージは ### Human/Assistant |
| ChatGPTの会話 | conversations.json(シャード化された conversations-000.json… を含む) | 会話1件につき1ノート。トランスクリプトは時系列順 |
| MCPメモリ | memory.json(JSONL) | エンティティ1件につき1ノート。リレーションは [[wikilinks]] に |
| Claudeのプロジェクト | projects.json または projects/<uuid>.json | プロジェクトのフォルダ: ドキュメント + インストラクション |
| Claudeのメモリ | memories.json | アカウントのメモリブロック1件につき1ノート |
| Claudeのデザインチャット | design_chats/<uuid>.json | チャット1件につき1ノート |
| Markdown / テキスト | .md、.txt | 1ノート。ファイルの本文がそのままノートの本文 |
フォーマットは内容の分析で決まります(どのサービスも conversations.json という名前のファイルを吐くため、名前はあてになりません)。空のメッセージや、意味のある断片が1つもない会話が「孤児」ノートを生むことはありません——スキップした件数はインポートのサマリーに出ます。アーカイブに認識できないJSONが混じっていた場合も、unsupported としてサマリーに載ります。データの取りこぼしは黙って起きるのではなく、必ずサマリーで見えるようになっています。
インポートのしかた
インポートはスペース設定のImportタブ(/s/<space>/management/import)にあります。オプションはそれぞれ独立したセクションです。
- File — エクスポートしたファイルを選びます(
conversations.json、ZIPエクスポート丸ごと、またはmemory.json)。単体の.md/.txtファイルは、このダイアログではなくドラッグ&ドロップでインポートします(後述)。 - Skip existing notes — 再インポート時の挙動(後述)。
- Memory entries — メモリのエンティティの置き場所(後述)。
長いインポートは永続ジョブとして走ります。書き込み済みノート数のライブカウンター付きプログレスバー、現在のフェーズ、そしてCancelボタン。タブを離れて戻ってきても大丈夫です——インポートはバックグラウンドで動き続け、戻ってくれば進捗、あるいは最終サマリーがまた見えます。
アップロードダイアログを使うかどうかは自由です。.md や .txt ファイルをアプリのウィンドウへ直接ドロップすれば、それがそのままノートになります。ツリーのフォルダにドロップすればそのフォルダへ、コンテンツ領域にドロップすれば開いているノートのフォルダか、なければルートへ入ります。中身は同じインポートのパイプラインで、入口が2つあるだけです。
「Skip existing notes」オプション
ノートのファイル名は決定論的で、ソース側の同一性に紐づいています。おかげで、同じエクスポートを再インポートしても重複が増えるのではなく、同じファイルが上書きされます——「Untitled」の会話が50本あっても、互いに衝突しません。
- オフ(再アップロード時のデフォルト — upsert) — 既存のノートをパス単位で冪等に上書きします。
- オン — すでにパスが存在するノートはスキップします。「更新した履歴を流し直したが、手で直した分は潰さないでほしい」というケース向けです。
「Memory entries」オプション
memory.json のエンティティは、次の3か所のいずれかに振り分けられます。
- folder — インポート先ルートフォルダの下に、ユーザーから見える通常のノートとして置く。
- space — スペースの隠しエージェントメモリマウント(
.notarium/memory)へ。ここに入ったエントリはツリーにもフィードにも検索にも現れませんが、エージェントはrecallで辿り着けます。 - skip — メモリをまったくインポートしない。
spaceを選ぶと、エントリはそのスペース固有のエージェントメモリに入ります。このメモリを閲覧する専用UIはスペース内にはありません——エージェントが recall を通して見るだけです。これはあくまで特定のスペースのメモリであって、グローバルな個人メモリドメイン(エクスプローラーツリーの Memory レンズで開くもの)ではありません。このインポートはそちらには書き込みません。
データの配置
インポートは、選んだルートの下に予測可能なフォルダツリーを作ります。
conversations/claude/ — Claudeの会話
conversations/chatgpt/ — ChatGPTの会話
projects/<project>/ — Claudeのプロジェクト (+ docs/, prompt-template.md)
memory/claude/ — Claudeアカウントのメモリ
memory/<entity-type>/ — memory.json のエンティティ
design-chats/<project>/ — Claudeのデザインチャット
日付はデータとして受け継がれる
素朴なインポートなら履歴を丸ごと「今日」の日付にしてしまい、フィードは何百もの会話を一つの山に積み上げるでしょう。Notariumはそうせず、作成日をデータとして引き継ぎます。どのノートにも、その会話が実際に行われた時刻がフロントマターの created: として書き込まれます。フィードはインポートした履歴を本来の日付に沿って並べ、「エクスポート → インポート」の往復も日付を保ちます——移し替えで失われるものはありません。
「Created」フィールドは、エディタから手で編集することもできます(ノートのメタデータ)。たとえば移行のときや、ノートの日付を直したいときに使えます。最終更新時刻(modified)のほうは常にファイルが実際に編集された時刻を指し、変更できません。
内部の仕組み
インポートは、ギガバイト級のアーカイブにも、回線の切断にも耐えるように作られています。
- ストリーミング処理。 アップロードはディスクへ流し込み、ZIPは1メンバーずつ展開し、会話のJSON配列は要素ごとに——1会話ずつ——解析します。ピーク時のメモリ使用量はアーカイブのサイズに左右されないので、600MBのエクスポートでもサーバーは落ちません。
- 永続ジョブ。 ホストにメタデータデータベースがあれば(セルフホストでは通常こちら)、インポートはデフォルトで永続ジョブになります。アップロードはステージングに保存され、バックグラウンドワーカーがリクエストの外でノートを書き込みます。タブを閉じても、接続が切れても、サーバーが再起動しても、進捗は失われません。
- 協調動作。 大量インポートがサーバーを独占することはありません。書き込みはインタラクティブなリクエストに道を譲り、バックグラウンドのインデックス化はストリームの間だけ止まって後から追いつきます。何千本ものノートを書き込んでいる最中でも、検索とナビゲーションは軽快なままです。
flowchart LR
src([アーカイブ / ファイル]) -->|アップロード| stage[ディスク上のステージング]
stage -->|インポートジョブ| worker[バックグラウンドワーカー]
worker -->|書き込みパス| notes[(Markdownノート)]
worker -.->|進捗| ui([Importタブ])
メタデータデータベースを持たないホスト(それが無いのは AUTH_MODE=none のときだけです)には、ジョブ層がありません。インポートは1つのリクエストの中で同期のストリーミング経路を走り、コアもライブカウンターも同じです。進捗もサマリーも見た目は変わりません。違うのは、サーバーの再起動を越えられないという一点だけです。
境界
- キャンセルはできるが、一時停止はできない。 ジョブは(協調的に)キャンセルできますが、一時停止して再開することはできません。
- インジケーターは不定表示。 アーカイブに入っているノート数は事前にわからないため、進捗はパーセンテージやETAではなく、フェーズと書き込み済みノート数のライブカウンターで示されます。
- 途切れたアップロードは最初からやり直し。 永続性が効き始めるのは、バイトが届いてからです。大きなアーカイブのアップロードが途中で切れた場合は、やり直しになります。
- バイナリの添付ファイルはインポートされない。 添付から取り出したテキストはノート本文に埋め込まれますが、バイナリファイルそのものは入りません(エクスポートと同じです)。
- インポート先はスペースのルート。 インポートダイアログでは対象フォルダを選べません——ノートはルートへ入ります。ドラッグ&ドロップの場合は、ドロップした場所がルートになります。
次へ
- エクスポート — スペースやフォルダをMarkdownのアーカイブとして取り出す。
- エージェントとMCP — エージェントが
recallを通じてインポート済みのメモリをどう扱うか。