Vortex Notes

io.github.vortex-303由 GitHub 帳號 vortex-303 發布v0.1.11更新於 Oct 30, 2026

E2E-encrypted markdown notes as shared memory for you and your agents, with local semantic search.

概覽

AI 產生的概覽

本機 MCP 伺服器,把加密的 Markdown 筆記庫變成 AI 助手的共享記憶,並支援在裝置本機進行關鍵字與語意混合搜尋。

可以做什麼
  • 以關鍵字加語意的混合搜尋尋找筆記,並讀取筆記路徑、標題與片段
  • 建立新筆記,以附加、前置或精確字串取代的方式局部編輯筆記,並在每日筆記附加帶時間戳的條目
  • 一次呼叫即可載入某主題的工作脈絡,包含最相符筆記的全文及一跳維基連結筆記
  • 把長期事實寫入共享記憶並支援被新事實取代的生命週期,以及列出近期修改或指定資料夾下的筆記
適用情境
適合以純 Markdown 保存筆記、並希望助手能跨工作階段搜尋、讀取與更新這些筆記作為長期記憶的情境,尤其是載入主題脈絡與記錄決策日誌。也適合讓助手寫入你手機或電腦上的同一個筆記庫。
執行需求
透過 npx 以本機 stdio 程序執行,需要 Node.js。筆記庫資料夾由 VORTEX_NOTES_VAULT 指定,或在執行 pair 指令並於應用程式核准 6 位字母代碼後自動找到。搜尋不需 API 金鑰,向量嵌入在本機執行,設定 VORTEX_NOTES_NO_SEMANTIC=1 可略過嵌入。
安裝前請注意
此伺服器可以建立與修改筆記庫中的筆記,若只需搜尋與讀取可設定 VORTEX_NOTES_READONLY=1。配對會給助手獨立的、可撤銷的受限金鑰,而不是你的復原詞組。供聊天應用使用的選用雲端連接器是零知識模式的刻意例外:中繼會以加密形式保存該助手的金鑰,連接器 URL 本身即屬機密。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Vortex Notes,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Vortex Notes

End-to-end-encrypted notes that double as memory for your AI agents.

▶ Open the app · Live demo · npm · Self-host

[Vortex Notes web app: a live-preview markdown editor with an encrypted vault]

Your notes are plain .md files you own — greppable, git-able, Obsidian-compatible. Vortex Notes adds the two things a notes app and an agent-memory store each do separately, in one place:

  • The server can't read anything. A 12-word phrase is your whole account; keys are derived in your browser. The relay stores ciphertext only — no plaintext field exists in its schema, and there's no password to reset because there's nothing on the server to reset.
  • Agents are principals, not passengers. An agent gets its own key — born on its machine, never transmitted, certified by yours, scoped to the spaces you grant, and revocable in one command. Every edit it makes is signed as the agent.

That combination — agents can fully use it and the server can't read it — is the empty quadrant this fills.


The app

A real app, not a viewer: installable on iPhone / Android / Mac (works offline), sub-second cross-device sync over WebSocket, and an Obsidian-style live-preview markdown editor that's as good on a phone as on a desktop.

[Vortex Notes on a phone]    [Agents and devices: each has its own scoped, revocable key]

  • Password-locked notes — lock a note with a password or your 12 words; the title stays visible, the body is a sealed second layer even your own devices can't read until unlocked.
  • Version history & recovery — every synced version is kept; restore an earlier one, or recover a note whose password you lost from before it was locked.
  • Public notes — publish any note to a themed public page in one tap.
  • Change your 12 words — rotate your recovery phrase without losing a thing; every signed-in device and agent keeps working, the old phrase goes dead.

Agent memory (MCP)

A first-party MCP server gives Claude Code, OpenClaw, Cursor, or any MCP client task-shaped tools — not a CRUD mirror — and it works headless:

  • search_notes · read_note · write_note · edit_note (surgical)
  • append_daily — timestamped journal entries
  • remember(fact, supersedes) — facts with a lifecycle: a superseded fact stays visible, struck through, pointing at what replaced it. Auditable, not a black box.
  • build_context(topic) — the top notes in full plus one hop of [[wikilinks]], so an agent starts a task with the right context in one call.

Search is on-device. Hybrid BM25 + multilingual embeddings (SQLite FTS5 + sqlite-vec + a small local model). No API key, nothing leaves your machine, and an English query finds your Spanish notes across ~100 languages.


Quick start

Try the app

Open vortex-notes.pages.dev/app, create an account (save the 12 words), and start writing. Add it to your home screen to install it. That's the whole onboarding — no email, no password.

Connect an agent

On the agent's machine:

sh
npx -y vortex-notes@latest pair

It prints a 6-letter code; approve it in the app (user menu → Agents & devices → Pair an agent). The agent gets its own scoped, revocable key and never sees your recovery phrase. pair then wires every harness it finds on that machine, pinned to the paired vault:

  • Claude Code: user scope, so every project sees it
  • Hermes: type /reload-mcp afterwards
  • OpenCode: added to ~/.config/opencode/opencode.json

No MCP in your agent? The same tools work as shell commands, see Agents without MCP. Works over SSH too (you approve from your phone). Any other stdio MCP client: { "command": "npx", "args": ["-y", "vortex-notes", "mcp"], "env": { "VORTEX_NOTES_VAULT": "<path pair printed>" } }. Add --read-only to make it read-only.

Connect Claude.ai, ChatGPT, or another chat app

Chat apps in the browser or on your phone can only reach an MCP server by URL. In the app: user menu → Agents & devices → Connect a chat app creates a cloud agent and gives you a secret connector URL:

  • Claude (web, desktop, mobile): Settings → Connectors → Add custom connector → paste the URL
  • ChatGPT: Settings → Apps & Connectors → Advanced → Developer mode → Create → paste the URL (no authentication)

This is the one opt-in exception to zero-knowledge: the relay holds that agent's key (encrypted at rest) so it can serve the notes that agent may access. It's scoped, can be read-only, and revoking it kills the URL. Everything else stays end-to-end encrypted.

Use the CLI

sh
npm install -g vortex-notesvortex-notes init                              # create a vaultvortex-notes search "that idea about pricing"  # hybrid semantic + keywordvortex-notes serve                             # local web viewer at 127.0.0.1:7303

Agents without MCP: the same tools as commands

Every MCP tool is also a command, so any agent that can run a shell (OpenClaw-style harnesses, scripts, cron, git hooks) gets the same behavior. After pair, commands find the paired vault by themselves; each one syncs before reading and after writing.

sh
npm install -g vortex-notes@latest                # once, so `vortex-notes` is on PATHvortex-notes context "kiln"                       # top notes in full + linked notesvortex-notes read projects/kiln.mdvortex-notes daily "fired the test tiles"vortex-notes remember "Kiln max is cone 8" --topic kiln --supersedes "cone 10"vortex-notes write "Glaze tests" "Three recipes…" --folder studio --tags glazevortex-notes edit clay.md --append "Order more in May."vortex-notes recent --days 3 --json               # --json on any command

write/edit/daily/remember read stdin when the text is -. Errors exit 1 ({"error": …} with --json). Full list: vortex-notes --help. There's a ready OpenClaw skill built on these.

The index in .vortex/index.db is disposable — the markdown files are always the source of truth. VORTEX_NOTES_NO_SEMANTIC=1 skips embeddings (keyword only, no model download).

Self-host the relay

The hosted relay at vortex-notes.pages.dev is convenience, not lock-in. Run your own:

sh
vortex-notes relay --port 7300 --db ~/relay.db   # the ciphertext store, web app and chat connectorsvortex-notes setup --relay http://<host>:7300    # on each computer: your 12 words, then syncnpx -y vortex-notes@latest pair --relay http://<host>:7300   # an agent machine

Open http://<host>:7300/app to create an account in the browser.

  • Your data is the --db file (default ~/.vortex-notes/relay.db). Back it up. --db :memory: is for throwaway tests.
  • Chat apps (Claude, ChatGPT):
    • Set RELAY_CONNECTOR_KEK to 64 hex characters (openssl rand -hex 32) before creating connectors, so their keys are encrypted at rest.
    • Serve the relay over HTTPS (Caddy, nginx, or a tunnel): the chat apps can't reach localhost.
    • OAuth discovery follows the Host / X-Forwarded-Host headers, so a reverse proxy just works.
  • Other settings:
    • RELAY_QUOTA_MB caps each account's storage.
    • RELAY_ADMIN_ACCOUNT (your Account ID) turns on admin stats in the web app.
  • Native apps: the Mac and iPhone apps use the hosted relay for now. The CLI, agents and the web app work with any relay.

How the encryption works

A 12-word BIP39 phrase derives your account's signing + encryption keys. Each device and agent has its own random keypair, certified by your account key — an account → device → agent chain. A space's content key is sealed to each principal that may read it; the relay enforces scope and read-only on every signed request but only ever holds sealed blobs.

What a malicious or subpoenaed relay can do: serve stale or withheld ciphertext (detectable via sequence gaps). What it can't do: read a note, a title, or a key; forge an edit; or silently alter one. The WebSocket sync channel carries only content-free "a space changed" pokes — the doorbell, never the data.

For a broad usage view, the relay derives a coarse country (two-letter code) from your IP in memory and stores only that code — the IP itself is never written to disk or logged.

Stack

TypeScript, all-MIT: @noble / @scure crypto, CodeMirror 6, better-sqlite3, sqlite-vec, transformers.js, marked. The relay is a small Node service; the web app is a single esbuild bundle with all crypto client-side. 48 unit tests plus ten Playwright browser suites.

MIT © Vortex303

來源:README.md,提交 3b4d724

工具

9

search_notes

Search notes

Search the vault with hybrid keyword + semantic search. Returns note paths, headings, and snippets. Use read_note for full content.

輸入參數modelimitquery必填

read_note

Read note

Read a note's full markdown content by vault-relative path.

輸入參數path必填

write_note

Create note

Create a new markdown note. Fails if the path already exists — use edit_note to modify existing notes.

輸入參數tagstitle必填foldercontent必填

edit_note

Edit note

Edit an existing note surgically: append, prepend, or find_replace (exact string). Prefer this over rewriting whole notes.

輸入參數findpath必填content必填operation必填

append_daily

Append to daily note

Append a timestamped entry to today's daily note (or a given date). The right place for observations, decisions, and things to remember.

輸入參數datecontent必填

build_context

Build context

Load working context for a topic in one call: full content of the top-matching notes plus one hop of [[wikilinked]] notes as pointers. Prefer this over multiple search+read rounds when starting work on a topic.

輸入參數topic必填max_notes

remember

Remember a fact

Record a durable fact in the shared memory (memory/*.md) as a dated bullet with a stable ^id. If it replaces an earlier fact, pass supersedes (the old fact's ^id, or a distinctive substring of it) — the old fact stays visible with strikethrough and a pointer to the new one. Use search_notes to find existing facts first.

輸入參數fact必填topicsupersedes

recent_activity

Recent activity

List notes modified in the last N days, newest first.

輸入參數dayslimit

list_notes

List notes

List note paths, optionally under a folder.

輸入參數limitfolder

版本歷史

1
  1. v0.1.11最新Oct 29, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分