履歴
ブラウザが作成した書き出し不可の AES-256-GCM 鍵と、コンテンツごとのランダムな12バイトのベクトル。テキストは書き込む前に暗号化され、表示するときだけ復号されます。すべてブラウザの Web Crypto API で処理し、サードパーティのライブラリは使いません。
- src/lib/db/crypto.ts
- src/lib/db/schema.ts
このページの文はすべて、サイトを動かしているコードと照らし合わせて確認しています。NeverNo が保存するもの、決して保存しないもの、メッセージを読むのは誰か、そして自分で確かめる方法を示します。
コードとの最終照合:2026年11月11日
会話、画像、キャラクター、メモリー。ブラウザが誰にも書き出させない鍵で暗号化されています。同期をオンにした場合は、読めないコピーが私たちのサーバーにも保存されます。メディアは含まれません。
アカウント、プラン、クレジット、利用カウンター、そして下に挙げるアカウントの記録(デバイス、支払い、トライアル)。共有リンク、バックアップ、同期は暗号化された状態でのみ保存され、私たちには読めません。
メッセージと回答の本文、画像、声。回答を作る間だけサーバーを通過し、読める形では記録されません。
作成したものはすべて、このブラウザだけにある neverno という名前の IndexedDB データベースに保存されます。私たちのサーバーに読めるコピーはありません。あるのは、自分で作成した場合のバックアップ、共有リンク、同期用のコピーだけで、3つとも暗号化されています(下記参照)。
初回利用時、ブラウザは「書き出し不可」の AES-256-GCM 鍵を作成します。ページはこの鍵で暗号化と復号ができますが、どのスクリプトもそれをバイト列として読み取れません。私たちのスクリプトも同じです。鍵は同じデータベースの keys テーブルに置かれ、デバイスの外に出ることはありません。各コンテンツは個別に、ランダムな12バイトのベクトルで暗号化されます。
すべてを復号しなくても会話を並べ替えたり探したりできるよう、いくつかの目印は読める状態で残ります。ID、日付、使ったモデルなどです。どれが該当するかは表に示しています。
| 保存されるもの | 暗号化されるもの | 読める状態で残るもの |
|---|---|---|
| 会話 | タイトル | ID、フォルダ、プロジェクト、種類(例:コンフェッショナルのセッション)、ピン留めの有無、モデル、キャラクター、日付 |
| メッセージ | 本文、モデルの推論、ウェブの出典、ステップ、バージョン、評価 | ID、送信者(あなたか NeverNo)、モデル、状態、メディアへのリンク、日付、推論時間 |
| フォルダー | 名前 | 並び順、日付 |
| 画像・動画・音声 | ファイル、その説明、モデル、サイズ | メディアの種類、ファイル形式、関連する会話、日付 |
| 作成したキャラクター | プロフィール全体 | ID、日付 |
| メモリー(アカウント) | 各記憶とそのベクトル | 元になった会話、記憶の種類、誰についての記憶か(あなたかキャラクター)、日付 |
| カスタム指示、学習待ちの内容 | テキスト | なし |
| 設定 | 匿名化モデルに送る前にマスクする名前、同期のデータ鍵 | メモリーのオン・オフ、マスキングのオン・オフ、自動バックアップ、最終バックアップの日付、バックアップ鍵(書き出し不可)、共有リンクとその鍵(再びコピーできるように)、同期の状態(アカウント、鍵のエポック、カーソル、最後のやり取りの日付) |
| 同期の管理情報 | なし:内容はここにコピーされません | 送信待ちの変更された行(テーブルと ID)と、すでにやり取りした各項目の不透明な ID、カウンター、バージョン、フィンガープリント |
| プライベート金庫 | 各文書の名前と詳細、各箇所のテキストとそのベクトル | ID、箇所の順序、インデックス作成の状態、箇所の数、日付 |
| プロジェクト | プロジェクト全体(名前、指示、設定) | ID、日付 |
| プロジェクトや会話のファイル | 名前と中身 | ID、紐づく会話またはプロジェクト、ファイルの種類とサイズ、出どころ(あなたかエージェントか)、日付 |
| 同期するファイルの管理(メディア同期が有効なとき) | ファイルごとの専用の鍵 | 不透明な ID、サイズ、分割数、送信の状態、日付 |
インターフェースの設定の一部は、ブラウザのlocalStorageに平文で保存されます。会話の内容は含みません。選んだモデル、画像スタジオの設定(ネガティブプロンプトを含む)、選んだ音声、アクセントカラー、訪問者のアバター、サイドバーの状態、すでに表示したアップグレードの提案、そのほか同じ種類の設定(コンフェッショナルで選んだキャラクター、通知、表示済みのウェルカム画面、作成したばかりのアカウントではその ID と作成時刻)です。例外が一つあります。動画、音楽、効果音を作成している間は、再読み込み後もその作成を見つけられるよう、説明文と設定がそこに平文で保存されます。作成物が届いたとき、またはあなたが取り消したときに削除され、失敗した場合は24時間を過ぎたあとの最初の訪問時に削除されます。一時チャットから始めた作成は、そこには一切書き込まれません。
メッセージをミッションにするとき、そのテキストはタブのsessionStorageを通じて平文でミッションのページに渡されます。ページは一度だけ読み取って消去し、いずれにせよタブを閉じれば消えます。
設定の「すべて消去」、またはブラウザでこのサイトのデータを消去すると、データベースと鍵が削除されます。バックアップも同期もなければ、あなたにも私たちにも、何も復元できません。
私たちのサーバーに、読める形のものは何もありません。保存しているのは読めないコピーだけで、開けるのはパスキー、リカバリーキー、承認済みのデバイスだけです。同期した項目の数と時刻は見えますが、内容は決して見えません。
アカウントがあれば、設定 › データ でオンにできます。会話、フォルダー、キャラクター、プロジェクト(各200 KBまでのファイルを含む)、メモリー、エージェント、カスタム指示、設定が、ほかのデバイスに引き継がれます。各項目は送信前にブラウザで AES-256-GCM により暗号化され、私たちのサーバーが決して持たないデータ鍵が使われます。ID も不透明にされるので、サーバーはそれがメッセージなのか、キャラクターなのか、設定なのかを判別できません。金庫(文書とその箇所)も同じ方法で暗号化されて同期されます。画像、動画、音声はまだ同期されません。これらはこのブラウザに残り、バックアップを作った場合はその暗号化されたバックアップにも入ります。アカウントのない訪問者は同期を使えません。
データ鍵は最初のデバイスで作られます。この鍵は、パスキー(ログインではなくこの用途だけに使う WebAuthn の鍵)とリカバリーキーで包まれ、承認済みのデバイスごとにも封印されます。新しいデバイスは、この3つのいずれかの経路で鍵を受け取ります。盗まれたセッションだけでは足りません。同期のリクエストはすべて、承認済みのデバイスによる署名が必要です。
| プラン | 容量 |
|---|---|
| 無料 | 100 MB |
| Pro | 5 GB |
| Pro+ | 20 GB |
| Max | 100 GB |
容量がいっぱいになると、新しい変更はデバイス上で待機します。何も失われず、ほかのデバイスは同期済みの内容を受け取り続けます。プランが使用量より容量の少ないものに変わっても何も削除されませんが、十分に削除するまでは、テキストを含め新しいものは同期されません。
一時チャット(モデル選択の横にある点線の吹き出し、またはサイドバーと ⌘K のパレットの「新しい一時チャット」)は、ほかのチャットと同じように使えますが、ひとつだけ違います。このブラウザに一切書き込まれません。メッセージ、その中で作った画像や音声、添付したファイルは、タブのメモリの中にだけ存在します。
IndexedDB には何も入りません。チャットもメッセージもメディアもなく、そのための鍵も作られません。/chat?ephemeral=1 のままです。それでも数えられるもの:メッセージは本日の上限に数えられ、回答への評価はほかのチャットと同じく匿名の合計に加わります。こちら側も何も変わりません。どのチャットとも同じく、テキストはサーバーを通ってモデルに届き、どこにも書き込まれません。
金庫(サイドバーの「金庫」)は、追加した PDF、Word、Markdown、テキスト、コードの文書を同じ neverno データベースに、同じ鍵で暗号化して保管します。各文書は約800トークンの箇所に分けられ、文書の名前と詳細、各箇所のテキストとそのベクトルは封印されます。読めるのは ID、箇所の順序、インデックス作成の状態と件数だけです。元のファイルは保管されません。
質問に答える箇所を見つけるには、箇所ごとにベクトル(意味を表す1,024個の数値)が必要です。この計算はブラウザ内では行われません。何が、いつブラウザから出るのかを、以下に正確に示します。
/api/memory/embed)。それでも数えられるもの:インデックスを作成した箇所と検索した質問はそれぞれ1日の上限(vault)に数えられ、計算にかかった費用はメモリーと同じく金額として記録されます。「匿名化」と表示されたモデルでは、箇所はメッセージとともにその開発元に届き、開発元のルールに従って扱われます。設定の「すべて消去」で、金庫もほかのデータと一緒に削除されます。
ミッション(有料プラン。無料アカウントはトライアルが1回)は、あなたが不在の間も私たちのサーバー上で実行されます。作業のためにサーバーがあなたの指示を読み取る必要があるのは、NeverNo の中でここだけです。これを正直にお伝えし、それ以外は必要最小限にとどめます。
指示、エージェントのプロフィール、送ったフィードバック、監視の直近の観測結果は、ミッションサーバーだけが持つ鍵で保存時に暗号化されます。この鍵はミッションとアカウントに紐づいています。実行中に読んだページと作業メモは暗号化して保持され、結果が配信されるとすぐに削除されます。
結果はあなたのデバイスの公開鍵で暗号化されます。秘密鍵はあなたのブラウザ内で作られ、外には出ません(暗号化バックアップとともに保管されます)。配信済みの結果を私たちが再び読む方法はありません。その暗号文は、デバイスが受け取り次第、遅くとも30日後には私たちのサーバーから削除されます。これらの期限つきの削除(30日と90日)は、毎時動く消去処理が行います。
| データ | サーバーが読める | 保管期間 |
|---|---|---|
| 実行スケジュール(曜日、時刻、タイムゾーン)、予算、状態、カウンター | はい(ミッションを起動するため) | ミッションが存在する間 |
| 指示、エージェントのプロフィール、フィードバック、選んだコネクタ | 実行中のみ(保存時に暗号化) | ミッションが存在する間 |
| 監視の直近の観測結果(比較に使う少数の事実) | 実行中のみ(保存時に暗号化) | 実行のたびに置き換え |
| 読んだページ、作業メモ、ステップのログ | 実行中(保存時に暗号化) | 配信時に削除 |
| 配信済みの結果 | いいえ(デバイス向けに暗号化) | デバイスが受け取るまで、最長30日 |
| コネクタのトークンまたはシークレット | 呼び出し時のみ(保存時に暗号化) | 接続を解除するとすぐに削除 |
外部へのあらゆる操作(メッセージの送信、操作を伴うツールの呼び出し)は、ワンタップで承認するまで待機します。通知にミッションの内容が含まれることはありません。
私たちのデータベース(Supabase、Postgres)には、メッセージ、返答、画像を読めるテーブルがありません。同期が保存するのは暗号化された項目だけで、読める種類も ID もありません。以下は、そのマイグレーション(supabase/migrations/)から読み取った保存内容を、種類ごとにまとめたものです。
| データ | 目的 | 保存期間 |
|---|---|---|
| アカウント:メールアドレス、登録日、最終ログイン日時。私たちに代わってログインを処理する Supabase は、開いているセッションごとに、ブラウザの完全な名称(ユーザーエージェント)と、そのセッションを開いた IP アドレスを保存し、ログインの記録も残します | メールで送るコードでログインしてもらうため | アカウントがある限り。セッションは閉じるまで(設定 › セキュリティ で確認して閉じられます) |
| プロフィール:プランと更新日、コンテンツフィルターのオン・オフ、「18歳以上」と申告した日付、利用停止の有無、選んだアバター(最大64文字のシード値で、写真ではありません)、アクセントカラー | プランの権利を適用し、どのデバイスでも同じインターフェースを表示するため | アカウントがある限り |
| 支払い:Stripe のカスタマー ID、サブスクリプションの状態、自動チャージ(しきい値、金額、Stripe 上のカード ID)、使用したギフトコード、処理済みの Stripe イベントの ID | 請求、サブスクリプションの管理、同じ支払いを決して二重に処理しないため | アカウントがある限り。請求書は会計法の定めに従い Stripe に保管 |
クレジット:付与ごとの記録(金額、出どころ、有効期限)と利用ごとの記録(金額、日付、支払い対象の機能名またはモデル名を含む理由。例:chat:claude-opus-5.5、confessional、debate:contract、research:…、image:…、media:…)。そのため、この記録からは、コンフェッショナルのセッションに支払った日付がわかります。そこで話された内容は一切含みません | 残高を正確に保ち、失敗した生成の分を返金するため | アカウントがある限り |
| 利用カウンター:操作の種類(メッセージ、画像、検索など)と時刻。アカウントに紐づきます。アカウントのない訪問者の場合は、ランダムな試用 ID と、秘密鍵で計算した IP アドレスのフィンガープリント(IPv6 アドレスの場合は、単一のアドレスではなく、同じ接続が使えるアドレスのまとまりである/64ネットワーク全体のもの)に紐づきます。無料アカウントでは、画像・読み上げ・音声入力もこのフィンガープリントで別のカウンターに数えられ、そこにはアカウント ID は含まれません(同じ接続の無料アカウントは上限を共有します) | 直近24時間の利用上限と、「マイプラン」の30日間カレンダー | アカウント:31日間保持(数値のみで、内容は一切含みません)し、その後は毎時消去。アカウントのない訪問者:48時間を過ぎたものを毎時消去。リクエストの集中を抑える直近1分間のカウンターは1時間後に消去 |
| プランに含まれる利用のコスト:ドル建ての金額、種類(チャット、画像、音声など)、時刻。あなたのアカウントに、アカウントのない訪問者の場合は試用 ID または IP アドレスのフィンガープリントに紐づきます | 各プランの1日あたりのコスト上限 | アカウント:35日を過ぎたものを毎時消去。アカウントのない訪問者:48時間を過ぎたもの |
| 時間のかかる生成(動画、音楽、効果音):モデル、状態、日付、確保したクレジット、提供元側のタスク番号、そして動画の場合は、取り込んだ画像をもとにしているという事実 | 生成の進行を追い、支払いを一度だけにするため | アカウントがある限り。私たちの側には説明文もファイルもありません。提供元は、受け取った説明文を保管している間、タスク番号からそれを探し出せます |
| 共有リンク:暗号化されたテキスト(私たちには読めません)、そのサイズ、作成日と有効期限、作成したアカウント | リンクを持つ人が読めるようにするため | 選んだ有効期限(1日、7日、30日)が来るか、削除するまで。その後1時間以内に消去 |
| バックアップ:パスフレーズで暗号化されたファイル1つ、そのサイズと日付 | 別のデバイスでデータを取り戻すため | 削除するか置き換えるまで |
| 暗号化された同期:暗号化された各項目(私たちには読めません)とその不透明な ID、バージョン、256バイト単位に丸めたサイズ、時刻、書き込んだデバイス。パスキー、リカバリーキー、承認済みの各デバイスで包まれたデータ鍵。使用中の容量 | ほかのデバイスでデータを使えるようにするため | 同期をオフにするかアカウントを削除するまで。削除された項目は、内容のない痕跡が180日間残ります |
| コンパニオンからの自発的なメッセージ:コンパニオンごとに、不透明なランダム ID(どのキャラクターかは含まない)、選んだ頻度、次の時刻、タイムゾーンと通知を控える時間帯、最後の通知の日付と未読の通知の有無。通知に名前を出すことを許可した場合のみ、その名前。会話の内容は一言も含みません。メッセージはアプリを開いたときにデバイス上で書かれます | 内容のない通知を送るため(「NeverNo」、「Lena があなたのことを考えています」、または「メッセージが届いています」) | そのコンパニオンまたはアカウント全体で無効にするか、関係をやり直すか、アカウントを削除するまで |
| API キー:名前、先頭12文字、SHA-256 フィンガープリント(キーそのものは保存しません)、最終使用日 | API 呼び出しを識別するため | アカウントがある限り(無効化したキーは無効化の日付を保持) |
| 回答への評価:日ごと、モデルごと、評価ごと、理由ごとのカウンター | 「自動」モードの調整 | 無期限。ただしアカウントも ID もテキストもないため、あなたと結びつくものはありません |
| 管理ログ:管理者がアカウントに対して行った各操作(クレジットの追加、利用停止など)と、一部の自動処理(サブスクリプションの終了、申告した国と接続元の国を含む暗号資産での注文、同期のリセット、利用のないアカウントの削除) | 監督とセキュリティ | アカウント削除後も、その ID を除いて保管。保管期間の上限はまだ定めていません |
| 利用統計:決まったリストのイベント名、ページのテンプレート、流入元のドメイン、キャンペーンタグ、国、デバイスの種類、言語、日ごとのフィンガープリント(鍵は毎晩消去)。アカウントについては登録日、流入元、初回支払い、売上とコストの合計 | 改善点を知り、登録数と利益率を測るため | 生のイベントは90日、その後は匿名の日次合計のみ。アカウント分はオフにするかアカウントを削除するまで |
| 休眠通知:アカウント ID、通知メールの送信日、削除予定日(3年間使われていない無料アカウントが対象) | プライバシーポリシーの約束を守るため:30日前にお知らせし、「アカウントを削除」と同じ手順で一度だけ削除します(二重には削除しません) | 次にログインするまで(通知は取り消されます)、またはアカウントが削除されるまで |
| アカウントの既知のブラウザ:ブラウザとシステムの名称(「Chrome, Windows」)、最初と最後に確認された日時、通知メールの送信日 | 新しいブラウザからログインがあったときにメールで知らせるため | アカウントがある限り(最大30件) |
| 重要な操作のコード確認:依頼したセッションについて、6桁のコードのフィンガープリント、試行回数と送信回数、最後の送信時刻、確認が有効な時間の終わり | ほかのセッションをログアウトしたり、ログイン通知を止めたりする前に、本人であることを確かめるため | コード:10分間。コードを含まない行:24時間以上たってから次にコードを依頼するとき、またはアカウントの削除まで |
| 有料機能のトライアル:アカウントごと、IP アドレスのフィンガープリントごとのカウンター(機能別・月別。一度きりのトライアルは1回分)。ミッションのトライアルはその日付 | 各トライアルを一度だけ提供し、大量のアカウントで増やされないようにするため | IP アドレスのフィンガープリント:当月分のみで、翌月最初の夜に消去。アカウント:月次カウンターは最長3か月。一度きりのトライアル(Claude Opus の回答、コンフェッショナル、動画、エージェント、ミッションなど)はアカウントがある限り。すべてアカウントとともに消去されます |
| 暗号資産で支払った注文:プラン、価格、状態、日付、申告した国、接続元の国、付加価値税、CoinGate での注文番号 | 支払ったプランを有効にし、法律が求める会計と付加価値税の記録を残すため | 支払い済みの注文:法定の10年間。アカウント削除時にアカウントから切り離されます(期間満了時の自動消去はまだ導入していません)。未払いの注文はアカウントとともに消えます |
| 契約上の証拠:確認と領収書の送信日、表示した通知の版、購入前にチェックした撤回権の放棄 | 消費者法が求めるとおり、何に同意し何を送ったかを証明するため | アカウントがある限り。支払い済みの暗号資産での注文に関するものは、アカウントと切り離して残ります |
| 付与されたプランと回収したクレジット:管理者が付与したプランと自由記述のメモ、返金や異議申し立てのあとに回収したクレジット、確保分の自動修正(理由、金額) | 付与されたプランを適用し、返金されたクレジットを回収し、開いたままの確保分を清算するため | 付与されたプラン:その終了まで。回収したクレジット:アカウントがある限り。修正:365日 |
| 自動チャージ:直近の支払いエラー(Stripe のメッセージの冒頭)と各試行(金額、状態、請求書番号、日付) | 二重に請求せず、3回失敗したら止めるため | アカウントがある限り |
| 開発者向けサブスクリプション:Stripe でのサブスクリプション ID、状態、更新期限 | 開発者向けプランの権利を適用するため | アカウントがある限り |
| ミッションのデバイスと通知:デバイスごとの公開鍵、名前、状態、日付。承認と取り消しの記録。ブラウザの通知の購読アドレス | 結果をあなたのデバイスだけに向けて暗号化し、内容を含まない通知を送るため | デバイスまたは購読がある限り。一度も承認されなかったデバイス:30日。取り消したデバイスは鍵を除いた痕跡を90日間残します。記録:90日 |
| ミッションのコネクター:接続した各サービスへのアクセス情報(ミッションのサーバーの鍵で暗号化され、操作のためにサーバーが読めます)と最後に使った日付 | ミッションが必要とするときに、あなたのサービスを読み取ったり操作したりするため | 接続を解除するか、アカウントを削除するまで。その際、サービス(Google、Notion、Slack、GitHub)に許可の取り消しを依頼します |
| 同期のアカウントと鍵:包まれたデータ鍵、パスキー、承認済みのデバイス。オフにしたあと、またはリセットしたあとは、オフにした日付と、リセットの日付・デバイス・回数 | あなたのデバイスでデータを開き、古いデバイスが消去済みのコピーを再び開けないようにするため | 同期が有効な間。オフとリセットの目印:アカウントがある限り |
| 利用中のエージェント:あなたが実行する個人エージェントごとに、その ID の鍵付きフィンガープリント(名前やプロフィールは含みません)、アカウントのエージェントになった日付、最後に実行した日付、入れ替えた場合はその日付 | プランのエージェント数を適用するため | 現在のエージェント:アカウントがある限り。入れ替えたエージェント:31日後、次の実行時に消去 |
| コンフェッショナルの音声のキュー:回線を使っている、または待っているアカウントや訪問者、その状態、優先度、二つの時刻 | 同時通話数を超えないようにし、順番に対応するため | 通話中または待機中の間。放置された回線は、次の通話(あなたのものでも他の人のものでも)の際に取り除かれます |
| アカウントに紐づく統計:登録日、最初に訪れたページ、参照元サイト、キャンペーンのタグ、国、デバイスの種類、言語、登録前に試したかどうか、最初に支払った日と最初のプラン、売上・コスト・クレジットの合計。統計を拒否した場合は、その拒否の日付だけ | 登録数と利益率を測り、あなたの拒否を尊重するため | あなたがオフにするまで(その時点で消去され、拒否の日付だけが残ります)、またはアカウントを削除するまで |
サービスの稼働状況:サーバーエラーごとに、ルートのテンプレート(例:/api/chat。実際のアドレスやそのパラメーターは含みません)、HTTP ステータス、エラーの種類、提供元を、1分ごとに集計したもの | 不具合のあるルートに気づき、アラートを受けるため | 30日間。アカウント、ID、メッセージは含まれません |
| 提供元への支出:提供元ごと、操作の種類ごとの1分あたりのドル金額。どのアカウントにも結び付きません | コストが急増したときにアラートを受けるため | 35日間 |
| 機能スイッチとアラートログ:どの機能が停止中か、誰が止めたか(管理者または自動停止)、各アラートの数値 | デプロイなしで機能を一時停止し、その記録を残すため | スイッチ:サイトが存在するかぎり。アラート:90日間 |
設定の「アカウントを削除」を使うと、これらすべてが消去されます。サブスクリプションが解約され、Stripe のカスタマーとそのカードが削除され、続いてバックアップ、同期されたコピー、リンク、鍵、カウンター(トライアルのものを含む)、コスト、最後にアカウントが消去されます。Google、Notion、Slack、GitHub に与えた許可は、それぞれの側で取り消されます。応答しないサービスがあっても、私たちが持つアクセス情報は消去され、そのサービスのあなたのアカウントから許可を取り消せます。残るもの:匿名の評価カウンター。アカウントの ID を除いた管理ログ。法律が求める会計記録(暗号資産で支払った注文とその領収書の送信記録。あなたとは切り離されています)。アカウントと切り離された利用統計(最長90日)。IP アドレスのフィンガープリントに紐づくカウンター(自動で消えます:48時間、トライアルのものは月末)。私たちのデータベースの外にあるもの:Resend に残る私たちのメールの送信記録、Supabase の技術的なバックアップ(その保管期間中)、Stripe が自社で保管する請求書。
Supabase の技術的なバックアップには、データベースのコピーが、つまり削除された行のコピーも、Supabase が保管している間は残ります。
回答するために、メッセージは私たちのサーバーを通ってモデルに届き、回答はストリーミングでブラウザに戻ります。以下のものは、データベースにもログにも読める形では書き込まれません(同期をオンにした場合に保存されるのは、ブラウザが暗号化したコピーだけです)。
エラーログに記録されるのは技術的な目印だけです。モデル名や提供元の名前、エラーコード、クレジット操作の番号などです。アカウントは、秘密の鍵で計算したタグとしてしか現れず、タグだけでは何もわかりません。アカウントを削除したときだけその ID を記録しますが、メールアドレスは決して記録しません。なお、受け取った内容を一定期間保管する提供元もあります。「メッセージを読むのは誰か」をご覧ください。
何を改善すべきかを知るために、NeverNo の使われ方を自社のサーバー上の自社ツール(/api/analytics)で数えています。Cookie も第三者のトラッカーも、フィンガープリント用のスクリプトもありません。
訪問者は「当日の指紋」で数えられます。サイト、IP アドレス、ブラウザから鍵付きで作るハッシュで、その鍵はランダムに作られ、毎晩0時を少し過ぎた頃(UTC。その日の最初の訪問時、遅くとも0時7分)に消去されます。アドレスもブラウザも保存されず、鍵が消去されたあとは、私たちを含め誰も、ある日の訪問を翌日の訪問と結び付けることはできません。鍵は、私たちのデータベースの技術的なバックアップに、その保管期間中は残る場合があります。
/chat/:id のようなテンプレートで、ID は含みません)、流入元のサイト(ドメインのみ)、キャンペーンタグ utm_source、utm_medium、utm_campaign。生のイベントは90日後に消去され、匿名の日次合計だけが残ります。設定で「匿名の統計を共有する」をオフにするか、ブラウザから Global Privacy Control または Do Not Track を送れば、引き続きカウントはされますが、フィンガープリントは使われず、アカウントにも紐付けられません。紐付いていた情報は消去されます。アカウントを削除すると、その分も消去されます。
「匿名化」と表示されたモデル(Claude、GPT、Gemini、Grok)を選ぶと、開発元の企業がリクエストを読みます。メッセージがブラウザからそれらのモデルへ出る前に、決まった種類の個人情報が [EMAIL_1] のようなプレースホルダーに置き換えられ、回答では実際の値が元に戻されます。これらはいっさい私たちのサーバーに届きません。検出、置き換え、対応表はすべてページ内にあり、対応表は保存されません(メッセージごとに会話から再び導き出されます)。
これは限定されたリストで、できるだけ質問を壊さないように作られています。名前を広く推測して検出することはしません。対象になるものとならないものは、正確には次のとおりです。
+33 6 12 34 56 78)、または区切りのある国内形式(06 12 34 56 78、(555) 123-4567、090-1234-5678)で書かれた電話番号。:: を使った IPv6)。スイッチは 設定 › データ にあり、初期設定ではオンです。オフにすると、メッセージはそのまま匿名化モデルに届きます。プライベートモデルではマスクしません。そこには何も保存されず、誤ったマスクは守れるもの以上の損になるためです。入力欄の下の「3件をマスクしました」で、直前のメッセージで置き換えた内容を確認できます。検出の調整には一切使わず取り置いた「封印ケース」で測定したところ、住所は72%、電話番号は94%、IBAN は100%の割合で検出され、個人情報に似ているだけの文章160件の罠では誤検出がありませんでした。これは私たち自身のテスト結果であり、保証ではありません。変わった書き方の情報はすり抜けることがあるため、匿名化モデルに送る内容は見直してください。ローンチ後に3回目の改善を予定しています。
Clean Room(/clean-room)は、PDF、Word ファイル、テキストファイルの黒塗りコピーを作ります。ファイルはブラウザの中で読み込まれ、検索され、表示され、書き直されます。私たちのどのルートも、ファイルもそのテキストも、隠す項目の一覧も受け取りません。ページが読み込むのは、私たちのアドレスにあるサイト自身のファイルだけです(PDF リーダーと、スキャンページ用の OCR エンジンおよびその言語モデル)。一度開けばオフラインでも動きます。
自動で見つかるのは、上のマスキングと同じ限定リストです:メールアドレス、電話番号、IBAN、カード番号、IP アドレス、省略なく書かれた住所、名前リストにある名前。それ以外はありません。残りは手で追加し、書き出す前にすべての枠を確認します。
[EMAIL_1])か █ のブロックに置き換えます(選択可)。任意のレポートは種類ごとの件数のみを示し、値は決して含みません。約束は「ファイルはデバイスから出ず、書き出す前に自分で確認する」であり、保証ではありません。検出器は知らないもの(リストにない名前、日付、場所)を見つけられず、スキャンページは OCR が読み取れた内容に依存します。確認のステップはそのためにあります。
モデルが答えるには、メッセージを読む必要があります。この表は、誰がそれを受け取り、保存するのかを示します。表はモデルのカタログと提供元への経路から生成されており、コードが変わると自動で変わります。
どの提供元も、メールアドレス、アカウント ID、IP アドレスを受け取りません。提供元を呼び出すのは私たちのサーバーで、サーバー自身のキーを使います。提供元が受け取るのは現在の会話のテキストと、設定していればカスタム指示、記憶、キャラクターのプロフィールです。自分が誰かを書けば、それも読まれます。OpenRouter では、さらにすべてのリクエストで学習への利用を拒否しています。
「プライベート」:DeepInfra、またはデータを保持しないオプションを有効にした OpenRouter が提供するオープンモデルで、リクエストを保存しません。「匿名化」:クローズドモデルです。開発元の企業がテキストを読みますが、あなたが誰かは知らず、自社のルールを適用します。
| モデル | ラベル | テキストを受け取る相手 | 保存 |
|---|---|---|---|
| AutoNeverNo | プライベート、制限なし | DeepInfra、OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| NeverNo UncensoredNeverNo | プライベート、制限なし | OpenRouter 経由で、データを保持しない第三者のホスト | なし(データを保持しないという各社の約束に基づく) |
| DeepSeek V4 FlashDeepSeek | プライベート | OpenRouter、予備として DeepInfra | なし(データを保持しないという各社の約束に基づく) |
| GLM 5.3 FlashZ.ai | プライベート | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| Qwen 3.5 35BAlibaba | プライベート | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| Mistral Small 3.2Mistral | プライベート | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| GLM 5.2Z.ai | プライベート | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| DeepSeek V4 ProDeepSeek | プライベート | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| Euryale 70BSao10K | プライベート、制限なし | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| Kimi K3Moonshot | プライベート | DeepInfra、予備として OpenRouter | なし(データを保持しないという各社の約束に基づく) |
| Claude Fable 5.2Anthropic | 匿名化 | OpenRouter、次に Anthropic | データを保持しない経路がありません。Anthropic は自社のポリシーに従いリクエストを保存する場合があります |
| Claude Opus 5.5Anthropic | 匿名化 | OpenRouter、次に Anthropic | OpenRouter ではなし。Anthropic は独自のポリシーを適用 |
| Claude Sonnet 5.5Anthropic | 匿名化 | OpenRouter、次に Anthropic | OpenRouter ではなし。Anthropic は独自のポリシーを適用 |
| Claude Haiku 5.5Anthropic | 匿名化 | OpenRouter、次に Anthropic | OpenRouter ではなし。Anthropic は独自のポリシーを適用 |
| GPT-6 AstraOpenAI | 匿名化 | OpenRouter、次に OpenAI | OpenRouter ではなし。OpenAI は独自のポリシーを適用 |
| GPT-6.1 SolOpenAI | 匿名化 | OpenRouter、次に OpenAI | OpenRouter ではなし。OpenAI は独自のポリシーを適用 |
| GPT-6.1 TerraOpenAI | 匿名化 | OpenRouter、次に OpenAI | データを保持しない経路がありません。OpenAI は自社のポリシーに従いリクエストを保存する場合があります |
| Gemini 4 ArgonGoogle | 匿名化 | OpenRouter、次に Google | OpenRouter ではなし。Google は不正利用の監視で検出されたリクエストを最長90日保管する場合があります |
| Grok 4.7xAI | 匿名化 | OpenRouter、次に xAI | OpenRouter ではなし。xAI は独自のポリシーを適用 |
「自動」モードはプライベートモデルを使います。一部のやり取りは、マスキングのうえで匿名化モデルを通ります。「自動」のプライベートモデル:DeepSeek V4.1 Flash、DeepSeek V4.1 Flash、DeepSeek V4.1 Flash、DeepSeek V4.1 Flash、DeepSeek V4.1 Flash、DeepSeek V4.1 Flash、DeepSeek V4 Flash、DeepSeek V4 Pro、GLM 5.2、NeverNo Uncensored、Qwen 3.5 35B、Mistral Small 3.2。それ以外(下の政治的な質問を除く)では、匿名化モデルが答えるのは、自分でそのモデルを選んだとき、または回答の下に出る、そのモデルに聞いてみる提案をクリックしたときだけです。中国のモデルが回答を拒む一部の政治的な質問では、「自動」は DeepSeek、GLM、Kimi、Qwen の代わりに、マスキングのうえ、データを保持しないホスト上で、匿名化モデルの Claude(Anthropic)で回答します。
スタジオは Runware を経由します。説明文は識別子なしでサーバーから送られます。この表もコードから生成されています。
| モデル | 種類 | ホスト先 | 備考 |
|---|---|---|---|
| Z-Image TurboTongyi | 画像 | Runware | ブラウザに直接返送 |
| FLUX 3 KleinBlack Forest Labs | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり匿名化 |
| NeverNo UncensoredZ-Image | 画像 | Runware | ブラウザに直接返送 |
| Z-ImageTongyi | 画像 | Runware | ブラウザに直接返送 |
| Qwen Image 2.1 TurboAlibaba | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり |
| Qwen Image 3.0 ProAlibaba | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり |
| FLUX 3Black Forest Labs | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり |
| Nano Banana 2.1Google | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり匿名化 |
| GPT Image 2.6OpenAI | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり匿名化 |
| GPT Image 2.6 FlareOpenAI | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり匿名化 |
| Muse ImageMeta | 画像 | Runware | ブラウザに直接返送開発元によるフィルターあり匿名化 |
| LTX 2.3 FastLightricks | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード |
| P-Video 2 ProPruna AI | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| MiniMax H3 MaxMiniMax | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| HeyGen Video 1HeyGen | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| Veo 3.1 FastGoogle | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| Kling 4.0 FlashKuaishou | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| Wan 3.0Alibaba | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| Seedance 2.5ByteDance | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| LTX 2.3Lightricks | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード |
| P-Video 2 ProPruna AI | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| Veo 3.1 LiteGoogle | 動画 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり匿名化 |
| ACE-Step 1.5 TurboACE Studio | 音楽 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード |
| ACE-Step 1.5ACE Studio | 音楽 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード |
| MiniMax Music 2.6MiniMax | 音楽 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり |
| Seed Audio 1.0ByteDance | 効果音 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード開発元によるフィルターあり |
| Mirelo SFX 1.5Mirelo | 効果音 | Runware | Runware の CDN に置かれ、そこからブラウザがダウンロード |
ブラウザが作成した書き出し不可の AES-256-GCM 鍵と、コンテンツごとのランダムな12バイトのベクトル。テキストは書き込む前に暗号化され、表示するときだけ復号されます。すべてブラウザの Web Crypto API で処理し、サードパーティのライブラリは使いません。
パスフレーズは PBKDF2-SHA-256 で鍵に変換されます。反復回数は600,000回、ソルトはランダムな16バイトです。その後、ファイル全体が AES-256-GCM で暗号化されます。パスフレーズがブラウザの外に出ることはなく、ファイルは署名付きリンクでストレージに直接送られます。
パスフレーズがなければ、私たちを含め誰もファイルを開けません。間違ったパスフレーズは単に拒否されます。忘れてしまうと、バックアップは失われます。
リンクごとに、ブラウザで作成された専用の AES-256-GCM 鍵があります。私たちが受け取るのは暗号化されたテキストだけです。鍵はリンクの # の後ろに書かれており、この部分をブラウザがサーバーに送ることはありません。完全なリンクを持つ人は読めますが、私たちには読めません。
リンクは1日、7日、30日後、または削除した時点で無効になります。
これは、ブラウザ内で暗号化を行うコードで、このページがビルドされた時点のリポジトリの内容そのままです。要約も書き換えもしていません。ファイルそのものを読み取り専用で表示しています。
/** * Local-only encryption for the Zero-Log store. * * One AES-256-GCM key per browser, generated on first use as a non-extractable * CryptoKey and kept in IndexedDB: it never leaves the device and cannot be read * back as raw bytes, even by our own scripts. */import { requestPersistentStorage } from "./storage";export type Sealed = { v: 1; iv: Uint8Array<ArrayBuffer>; ct: Uint8Array<ArrayBuffer> };const encoder = new TextEncoder();const decoder = new TextDecoder();export type KeyStore = { load: () => Promise<CryptoKey | undefined>; /** Stores the key unless one is already there (the first stored wins). */ save: (key: CryptoKey) => Promise<void>;};let keyPromise: Promise<CryptoKey> | null = null;let activeStore: KeyStore | null = null;/** Point the module at the table that holds the key. Called once by the database. */export function configureKeyStore(store: KeyStore) { activeStore = store; keyPromise = null;}
リポジトリはまだ非公開です。今後公開リポジトリを用意し、このコードとブラウザが実行しているコードを比較できるようにします。
私たちの言葉を信じる必要はありません。ブラウザの開発者ツールがあれば十分です(パソコンなら F12、または右クリックして「検証」)。
「アプリケーション」タブ(Chrome、Edge)または「ストレージ」タブ(Firefox)を開き、IndexedDB › neverno › messages へ進みます。各メッセージの content フィールドは { v, iv, ct } オブジェクトで、読めないバイト列です。keys では、鍵に extractable: false と表示されます。
「ネットワーク」タブを開いてメッセージを送ると、chat リクエストが1つ送られます。中身は現在の会話とその時点の設定です。ほかの会話は送られません。
メモリーがオン:続いて2つの小さな memory リクエストが、覚えておく事実を選び出すためにこの直近のやり取りを送ります。新しい会話:タイトルを付けるために chat/title リクエストが最初の質問と回答の冒頭を一度だけ送ります。提案がオン(設定、コンテンツ):回答のあと、chat/follow-ups リクエストが最後の質問と回答の最初と最後を送り、続きを提案します。何も保存されません。同期がオン:sync/push と sync/pull リクエストが、ブラウザが暗号化した項目を運びます。その ct フィールドは読めません。セッション Cookie は、chat リクエストも含め、これらのどれにも一緒に送られます。ログインしているどのサイトとも同じです。
「ネットワーク」タブを開いた状態で共有リンクを開いてください。shares/… リクエストに含まれるのはリンクの ID だけです。# の後ろの部分はどこにも現れません。
neverno.ai では、ページのContent-Security-Policyヘッダーに、ページが通信を許可されているアドレスだけが列挙されています。私たちのサーバー、Supabase、メディア用の Runware の CDN、ボット対策用の Cloudflare、そしてコンフェッショナルのリアルタイム音声会話のために確保した二つのアドレス(api.elevenlabs.ioと私たちのサーバーrt.neverno.ai)です。この二つはあらかじめ載せてあり、その機能が公開されるまで、ページがそこに接続することはありません。第三者によるアクセス解析も広告もありません。
NeverNo のプライバシー保護にできないこと、まだできていないこと:
プライバシーに関わる変更を、日付つきですべて記録しています。このページの事実の一部(モデル、提供元、期間、暗号化のパラメーター)は自動テストで確認しています。コードが変わると、ページが修正されるまでテストは失敗します。
# に置かれ、中の画像も同じ鍵で暗号化されます。