reef について
reefは、個人・家庭・プロジェクト向けの共有メモリーサービスです。AIアシスタントが会話をまたいで情報を読み書きできます。Markdownページをプライベートおよび共有coveに整理し、記録や共有の前に内容を確認できます。
主な機能
- 01プライベートおよび招待制の共有cove
- 02インデックスから必要なページを読む
- 03ページ内容の検索
- 04確認用に記憶内容を一時保存
- 05ページとファイルの履歴管理
- 06Markdown・JSON・履歴のエクスポート
活用シーン
- 01アシスタントの会話間で個人情報を引き継ぐ
- 02家庭やプロジェクトで選んだメモを共有
- 03関連する記憶ページを検索して読む
- 04記憶と変更履歴をバックアップ・移行
MCP 対応
リモートMCPサーバーが、記憶の読み取り・検索・書き込みツールをクライアントに提供します。インデックス、ページ読み取り、検索を通じてアクセスし、coveの権限に応じて閲覧範囲を制限します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://reefwith.me/mcpclaude mcp add --transport http me-reefwith-reef https://reefwith.me/mcp{"mcpServers":{"me-reefwith-reef":{"type":"http","url":"https://reefwith.me/mcp"}}}Cursor で開く{"servers":{"me-reefwith-reef":{"type":"http","url":"https://reefwith.me/mcp"}}}VS Code で開く{"mcpServers":{"me-reefwith-reef":{"type":"http","url":"https://reefwith.me/mcp"}}}{"mcpServers":{"me-reefwith-reef":{"serverUrl":"https://reefwith.me/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
reef
あなたと、人生を共にする人たち、そしてお互いがすでに使っているAIアシスタントのための、共有できる生きた記憶です。
アシスタントは会話が終わるとあなたのことを忘れてしまいます。reef は記憶を保ち、パートナーや家族、プロジェクトのメンバーと共有できるようにします。
- 一度伝えるだけ。 ボイラーが Vaillant 製だとアシスタントに伝えておけば、翌月、別の会話でも覚えています。
- 意図して共有。 個人的なメモは非公開のままです。共有コーブには、あなたが意図して入れたものだけが保存されます。
- 使い慣れたアシスタントを利用。 Claude、ChatGPT desktop、または Codex。reef はリモート MCP コネクターであり、新たなチャットアプリではありません。
試してみる
reef は招待制のため、招待が必要です。招待を受け取ったら:
uv tool install reef-cli # or: npm install -g @haai/reef-cli
reef login
reef load-index
代わりにアシスタントから使うには、https://reefwith.me/mcp をリモート MCP コネクターとして追加し、招待を受け取ったアドレスでサインインしてください。
Claude Code では、プラグインにこのコネクターと3つのコマンドが含まれています:
claude plugin marketplace add diepzee/reef
claude plugin install reef@haai
/reef:recall は推測ではなく記憶に基づいて回答し、/reef:remember は情報を保存し、/reef:whats-new はほかの人のアシスタントが書き込んだ内容を報告します。
reefwith.me/app にはブラウザーアプリもあります。アシスタントを使わずにページを読んだり編集したりできます。
記憶の整理方法
記憶はコーブに保存されます。サインインすると、最初に自分専用のプライベートコーブが1つ作成されます。共有コーブはいくつでも作成できます。家族、学校の仲間、会計士、小規模なプロジェクトなどに使えます。
| プライベートコーブ | 共有コーブ | |
|---|---|---|
| 読める人 | あなただけ | 招待された全員 |
| 作成時期 | 初回サインイン時 | 必要とする人が作成 |
| 名前 | 常に personal | 自分で、自分のために命名 |
| 参加方法 | なし | オーナーからのメール招待 |
共有コーブの名前は、自分で自由に決められます。 コーブにつけた名前は、あなた専用です。2つの世帯がそれぞれ family という名前を使っても、お互いの存在を知ることはなく、誰かが他人から名前を奪うこともできません。
共有は意図的に行われ、取り消せません。 プライベートコーブから何かを移すには、2つの手順が必要です。まず、アシスタントが移す内容そのものを提示し、それを読めるようになる全員の名前を知らせます。その後に初めて移動します。
それ以外の方法で個人的な内容を共有コーブに書き込もうとしても、推奨されないのではなく、拒否されます。また、共有を取り消すことはできません。
アシスタントによる読み取り方法
reef はまずインデックスを読み込み、次にページを読み込みます。共有とアクセス権限に対応するよう調整された LLM Wiki パターンです。
- アシスタントが
load_indexを呼び出すと、閲覧可能なすべてのページの一覧を取得します。そこにはパス、タイトル、タグ、1行の説明が含まれます。ページ本文は含まれません。 - 一覧を確認して、この会話に必要な内容を判断し、必要なものだけを
read_pagesで取得します。 - 話題の展開に合わせて、再度取得します。一覧だけではどのページを読むべきか判断できない場合、
search_pagesがページ本文内の語句を照合します。検索にもすべての読み取りと同じ行レベルのセキュリティが適用されるため、呼び出し元が開けないページが検索結果に表示されることはありません。
インデックスは呼び出しのたびにデータベースから再構築されるため、古いままになることはありません。
アシスタントが記録する方法
何も黙って記録されることはありません。会話の途中で残しておく価値のある事実があれば、remember を通じて、その入り江の受信箱に日付付きの行として登録します。そして会話が終わる前に、アシスタントが何を残すかを伝えるので、必要なら先に削除できます。
受信箱の項目は、まだ記憶ではありません。整理(いつでも依頼できます)を行うと、受信箱の内容を実際のページにまとめ、古くなったページにフラグを付け、あなたのページと共有ページの矛盾を見つけて知らせます。どちらかを黙って優先することはありません。意図的に記録し、あなたが確認することが設計の基本です。reef があなたに内緒で会話を書き起こすことはありません。
プライバシーの保護
プライバシーを守るのはアプリケーションコードではなく、データベースです。
すべてのページ、ファイル、メンバーシップは、PostgreSQL の 行レベルセキュリティによって保護されています。 フィルターを忘れたクエリは、他の人のデータではなく、何も返しません。誤りがあれば、アクセスを拒否します。
これは、アプリが通常のデータベースロールで接続しているからこそ機能します。スーパーユーザーはすべてのポリシーを無視するため、reef は rif_app として実行します。このロールは行の読み書きはできますが、スキーマは変更できません。マイグレーションとバックアップには、別のより高い権限を持つ認証情報を使用します。詳しくは
scripts/provision_app_role.pyをご覧ください。
データはあなたのものです
ページは、作成した時点から Markdown です。ウェブアプリでは、次のものをエクスポートできます。
- 現在のコンテンツ:Markdown アーカイブまたは JSON
- すべてのデータ:完全な改訂履歴と保存済みファイルのバイトデータを含む、単一のダウンロード
どちらも、このデプロイが終了した後も使えるプレーンファイルです。エクスポートは reef から外に出す一方通行です。ここに記憶を閉じ込めることはありません。
CLI の使用方法
reef コマンドをインストールするパッケージが 2 種類あります。
| インストール | 利用できるもの | |
|---|---|---|
| Python | uv tool install reef-cli | すべての MCP ツールを名前付きコマンドとして利用できます |
| npm | npm install -g @haai/reef-cli | login、tools、call |
名前付きコマンドではハイフンを使います。load_index は load-index になります。すべての結果は JSON で、not_found などのエラーが発生した場合は、終了コードが 0 以外になります。
reef read-pages personal profile.md preferences.md
reef write-page personal plans.md --body-file ./plans.md \
--message "Add the summer plan" --title Plans
reef add-file personal ./lease.pdf --description "Signed rental agreement"
reef call read_pages '{"cove":"personal","paths":["plans.md"]}'
reef call は任意の MCP ツール名と JSON オブジェクトを受け取るため、名前付きコマンドで実行できるすべての操作に対応できます。大きな入力はファイルまたは標準入力から渡せます。アップロードのエンコードは自動で行われます。
どちらのパッケージも、同じブラウザーフローでサインインします。それぞれが個別にトークンをキャッシュするため、一方でログインしても、もう一方ではログインしたことになりません。トークンはユーザー専用の設定ファイルに保存されます。
別のサーバーを指定するには REEF_MCP_URL を設定します。ヘッドレス実行では REEF_ACCESS_TOKEN を設定してください。
最新のスキーマを確認するには reef tools を、引数を確認するには reef <command> --help を実行します。
エージェントスキル: skills/reef/SKILL.mdでは、アシスタントに検索プロトコル、デフォルトで非公開にする書き込み、楽観的ロック、操作の前にユーザーへ確認が必要な状況を教えます。
ステータス
2026 年 8 月 6 日から稼働中です。reefwith.meで公開され、WorkOS AuthKit の背後にある Railway にデプロイされており、日常的に利用されています。
スキーマとアクセス制御、インデックスとページの読み取り、バージョン管理された書き込み、セクション単位の共有は完成し、レビュー済みです。複数ユーザー対応の入り江、オーナーが管理する招待、ファイルストレージ、ブラウザーアプリ、インポート、バックアップ、エクスポートにも対応しています。
テストはモックではなく、実際の PostgreSQL に対して実行します。
未解決の課題は、正直にお伝えします。
- 利用者はまだ少数です。 設計上、利用者は招待によって一度に 1 人ずつ増えていきます。
- スマートフォンでのコンテキスト上限はまだ測定していません。
独立したスケジュールジョブが、現在は毎日 pg_dump を R2 に書き込んでいます。2026 年 8 月 24 日から 9 月 10 日までに確認された実行では、すべてアップロードに成功し、スクリプトのバイト数チェックにも合格しました。これとは別に、8 月 7 日の本番ダンプはリストア訓練に合格しています。Railway 管理のバックアップ状況と R2 の保持設定は、引き続き未確認です。
未完了の項目はすべて、docs/runbook.mdの先頭にある「Open items」リストで管理しています。
開発
Docker と uv が必要です。 just は任意ですが、セットアップを自動で行ってくれます。
just setup # dependencies, database, and the roles the tests need
just test # lint, Python suite, frontend suite
just dev # serve the app locally
just を単独で実行すると、すべてのタスクが一覧表示されます。使用しない場合は、次のようにします。
docker compose up -d # PostgreSQL on port 5433
uv sync && (cd frontend && bun install)
uv run pytest # builds its own schema in rif_test
テスト用ロールが作られる前にクラスターを作成した場合、それらのロールは存在しません。その場合、テストスイートは弱い条件でテストを続けるのではなく、はっきりとそのことを報告します。just db-roles で修復できます。
ローカルデータベースには、意図的に設定している点が2つあります。
- アプリをスーパーユーザーとして実行しません。 スーパーユーザーは行レベルセキュリティを無視するため、セキュリティテストは何も証明しないまま成功してしまいます。
docker-compose.ymlのコメントを参照してください。 - テスト用に、所有者とは別のロールを作成します。 テーブルの所有者には列権限が適用されません。このロールがないと、「メンバーは入り江の名前を変更できない」というテストは、誤った理由で成功してしまいます。
マイグレーションでは、1人とその人の入り江がシードされます。それ以外の人は、意図的にシードされません。初回サインイン時に照合するキーはメールアドレスであり、マイグレーションは誤った推測を訂正するために再実行されることはありません。それ以外の人は、招待によって参加します。
PR のタイトルは Conventional Commit の形式で記述してください(PR はスカッシュマージされるため、リリースバージョンはタイトルによって決まります)。また、reef を使う人が気づく変更であれば、changes/ に一文の変更記録を追加してください。詳しくはdocs/releasing.mdを参照してください。
ドキュメント
| ドキュメント | 内容 |
|---|---|
docs/spec.md | 設計と、この形になっている理由 |
docs/runbook.md | デプロイ方法と、未解決の項目 |
docs/restore.md | バックアップと復元 |
docs/competitor-research.md | 周辺市場 |
ライセンス
サーバー(リポジトリのルートにあるすべてのもの)は AGPL-3.0-or-later です。ライセンスを読んで、自分で実行したり、フォークしたりできます。注意が必要な唯一の条件は、ネットワークに関するものです。変更を加えた reef を、ほかの人が利用するサービスとして運用する場合、その変更を利用者に提供する必要があります。これは reef 自身が掲げる方針にも合致しています。誰かがあなたの記憶を預かるなら、それを保持するコードを確認できるべきです。
ホストするのではなくインストールして使う部分は、ライセンスがクライアントをためらう理由にならないよう、MIT ライセンスです。
| 部分 | ライセンス |
|---|---|
サーバー(src/、このリポジトリ) | AGPL-3.0-or-later |
clients/python — PyPI の reef-cli | MIT |
clients/ts — npm の @haai/reef-cli | MIT |
plugins/reef — Claude Code プラグイン | MIT |
著作権は Haai BV が保有しています。
名前について
製品名は reef で、Python モジュール名も同じです。作業中の名前は rif で、想定以上に長く残りました。
現在も rif と呼ばれているのは、稼働中のシステムが記憶しているものです。これらは人が読む名前ではなく、すでに何かが書き込んだキーだからです。
現在も rif のもの | 内容 | 変更しない理由 |
|---|---|---|
app_name="rif" | migration テーブルにおける Piccolo のキー | 名前を変更すると、Piccolo は適用済みのマイグレーションを見つけられず、データが入ったデータベースにマイグレーションチェーン全体を再適用します |
rif_roster、rif_admit_member、… | SQL ヘルパー関数 | これらは行レベルセキュリティの境界です。名前を変更することは、間違いが許されないシステム部分に対する稼働中の DDL です |
rif、rif_authz、rif_probe | データベースロール | RLS は適切なロールに対してのみ適用され、テストスイートは rif_probe として権限を検証します |
RIF_* | 環境変数 | Railway に12個設定されており、署名キーや開放されているドアも含まれます。名前を変更しても、設定されていない変数は存在しないものとして扱われます |
diepzee/reef | リポジトリ | 審査中のプラグイン申請がこの URL を参照しています |
何かを追加する際のルールは次のとおりです。データベースやデプロイ環境に記憶される名前なら rif、人が読む名前なら reef です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。