README file from
GithubAuto-Zettelkasten for Obsidian
English — Auto-Zettelkasten turns conversations, files in an Obsidian vault, clipboard text, and web articles into reusable atomic notes. Inspired by A-MEM: Agentic Memory for LLM Agents, it automatically generates metadata and tags, retrieves related notes, creates bidirectional wikilinks, and performs lightweight memory evolution.
中文 — Auto-Zettelkasten 将对话、Obsidian vault 内的文件、剪贴板文本和网页文章转换成一组可复用的原子笔记(atomic notes)。它借鉴 A-MEM: Agentic Memory for LLM Agents 的思路,自动生成元数据和标签、检索相关笔记、建立双向链接,并进行轻量的记忆演化。
This is an Obsidian Community plugin project, not a wrapper around the A-mem Python repository. It maps A-mem's
MemoryNotemetadata, nearest-neighbor retrieval, andstrengthen/update_neighborevolution operations to Obsidian Markdown, YAML frontmatter, and wikilinks.这是一个 Obsidian 社区插件项目,不是 A-mem Python 仓库的封装。它把 A-mem 的
MemoryNote元数据、近邻检索和strengthen/update_neighbor演化流程映射到 Obsidian Markdown、YAML frontmatter 和 wikilinks。
Features / 已实现功能
Chatbot over notes / 基于 notes 的问答
- English — Open the chatbot with the
Auto-Zettelkasten: Open notes chatbotcommand or the sidebar message icon. It embeds your question, retrieves the most relevant A-mem notes, answers only from those notes, and links to each source. Retrievals update each note'sretrieval_countandlast_accessed. Chat history stays in the sidebar session and is not written to the vault. - 中文 — 通过命令面板的
Auto-Zettelkasten: Open notes chatbot或侧栏消息图标打开。插件对问题生成 embedding,从 A-mem 索引检索最相关的 notes,再仅依据这些内容回答,并附上可点击的来源笔记。每次检索会更新对应 note 的retrieval_count与last_accessed。聊天记录默认只存在当前侧栏会话,不会写入 Vault。
Input sources / 输入入口
- English — Vault files (Markdown, TXT, HTML, JSON, CSV) via the command or the file context menu; the current editor selection; clipboard text; and article URLs fetched through Obsidian
requestUrl. - 中文 — 通过命令或文件右键菜单处理 vault 内的文件(Markdown、TXT、HTML、JSON、CSV);支持编辑器选中文本、剪贴板文本,以及通过 Obsidian
requestUrl获取的网页文章 URL。
A-mem-style note generation / A-mem 风格 note 生成
- English — Splits long content into chunks and asks the LLM to produce independent, retrievable atomic notes. Each note stores
content,keywords,context,category,tags, timestamps, retrieval counts, links, and evolution history. - 中文 — 将较长内容按段落分块,并要求 LLM 产出多个独立、可检索的 atomic notes。每条 note 都含有
content、keywords、context、category、tags、时间戳、检索次数、链接和演化历史。
Lightweight A-mem evolution / 轻量 A-mem 演化
- English — Embeds new and existing notes, takes the Top-K neighbors, then asks the LLM to make A-mem-aligned
strengthen/update_neighbordecisions. It creates bidirectional wikilinks and optionally updates existing notes'context,tags,retrieval_count, andevolution_history. - 中文 — 对新 note 和既有 note 调用 OpenAI-compatible embeddings,取 Top-K 近邻后,让 LLM 作出与 A-mem 对齐的
strengthen/update_neighbor决策;建立双向[[wikilink]],并可更新旧 note 的context、tags、retrieval_count和evolution_history。
Maintenance / 自动维护
- English — Maintains
A-mem/_A-mem MOC.mdand persists a lightweight semantic index inA-mem/_amem-index.json. - 中文 — 自动维护
A-mem/_A-mem MOC.md,并在A-mem/_amem-index.json中保存轻量检索索引和向量。
Installation / 安装
1. Build / 构建
English — Run these commands in the project directory:
中文 — 在本项目目录执行:
npm install
npm run build
2. Install into your vault / 安装到你的 vault
English — Create the target folder:
中文 — 创建目标目录:
<your Obsidian vault>/.obsidian/plugins/auto-zettelkasten/
English — Copy the build artifacts into that folder, then enable the plugin.
中文 — 将以下构建产物复制到该目录,然后启用插件。
main.js
manifest.json
styles.css
English — In Obsidian: open Settings → Community plugins, disable Restricted mode if needed, refresh the community plugin list, and enable Auto-Zettelkasten.
中文 — 在 Obsidian 中:打开 Settings → Community plugins,如有需要先关闭 Restricted mode,刷新社区插件列表并启用 Auto-Zettelkasten。
English — For development, link or copy this project into the plugin folder, run
npm run buildafter each change, then reload the plugin.中文 — 开发时,可以把此项目目录直接链接或复制到上述插件目录;每次修改后运行
npm run build,然后在 Obsidian 中重新加载插件。
Model configuration / 配置模型
English — Open Settings → Auto-Zettelkasten and fill in:
中文 — 打开 Settings → Auto-Zettelkasten,填写:
| Setting / 配置项 | Description / 说明 |
|---|---|
OpenAI-compatible base URL |
Root URL of the chat service, usually ending in /v1. The plugin calls POST /chat/completions. 聊天模型服务的根 URL,通常以 /v1 结尾。 |
API key |
Chat model API key; use a restricted key where possible. 聊天模型 API key,建议使用可限制额度/权限的 key。 |
Chat model |
A chat model that can return structured JSON. 能稳定返回 JSON 的对话模型。 |
Embedding model |
Used for nearest-neighbor retrieval. 用于近邻检索的 embedding 模型。 |
Embedding base URL / API key |
Optional. Set these when your chat provider does not expose /embeddings; leave empty to reuse the chat URL and key. 可选。如果聊天供应商没有 /embeddings,可单独填写另一个 OpenAI-compatible embedding 服务;留空则复用聊天 URL 与 key。 |
English — Chat and embedding APIs can be different services. If embedding fails, notes are still created with tags and the plugin falls back to keyword similarity.
中文 — 聊天和 embedding API 可以分开:例如用支持 /chat/completions 的模型生成笔记,再使用另一个兼容 /embeddings 的服务建立关联。如果 embedding 调用失败,插件仍会生成带标签的笔记,并降级为关键词相似度。
Usage / 使用方法
Conversations / 对话
English — Copy a conversation, then run Auto-Zettelkasten: Ingest clipboard text as A-mem notes. Alternatively, export the conversation as Markdown/JSON into the vault and run Auto-Zettelkasten: Ingest current file as A-mem notes.
中文 — 复制对话内容后,运行 Auto-Zettelkasten: Ingest clipboard text as A-mem notes。或者将对话导出为 Markdown/JSON 放入 vault,再对该文件运行 Auto-Zettelkasten: Ingest current file as A-mem notes。
English — An Obsidian plugin cannot read the current conversation state of an external web/desktop app (including the DSH GUI). Clipboard and exported chat files are the one-click entry points today.
中文 — Obsidian 插件无法直接读取外部网页/桌面应用(包括 DSH GUI)的当前对话状态;剪贴板和聊天导出文件是当前的一键入口。
Files and articles / 文件与文章
- English — Open a vault text file and run
Auto-Zettelkasten: Ingest current file as A-mem notes. - 中文 — 打开 vault 中的文本文件,运行
Auto-Zettelkasten: Ingest current file as A-mem notes。 - English — Right-click a file in the file explorer and choose
Create A-mem notes from this file. - 中文 — 或在文件资源管理器中右键文件,选择
Create A-mem notes from this file。 - English — Select text and run
Auto-Zettelkasten: Ingest selected text as A-mem notes. - 中文 — 选中一段内容,运行
Auto-Zettelkasten: Ingest selected text as A-mem notes。 - English — Run
Auto-Zettelkasten: Ingest web article URL as A-mem notesand enter a URL. - 中文 — 运行
Auto-Zettelkasten: Ingest web article URL as A-mem notes并输入文章 URL。
English — Markdown, TXT, HTML, JSON, and CSV are supported directly. Convert PDFs to Markdown or plain text first. Dynamically rendered pages may need their content saved manually.
中文 — 当前直接支持 Markdown、TXT、HTML、JSON、CSV。PDF 需先用 OCR/文本提取器转换为 Markdown 或纯文本;动态渲染且正文不在初始 HTML 中的网站也可能需要先保存正文。
Output structure / 输出结构
English — Notes are written to A-mem/ by default:
中文 — 默认写入 vault 的 A-mem/ 目录:
A-mem/
├── 20250308-1530-example-note-a1b2c3.md
├── 20250308-1531-another-note-d4e5f6.md
├── _A-mem MOC.md
└── _amem-index.json
English — A generated note looks like:
中文 — 每条生成笔记类似:
---
id: "uuid"
amem: true
note_type: "insight"
category: "Research"
tags:
- "amem"
- "amem/source/article"
- "amem/category/research"
- "amem/agent-memory"
keywords:
- "A-mem"
- "Zettelkasten"
context: "…"
links:
- "related-memory-id"
evolution_history: []
---
# 笔记标题
独立、可复用的笔记正文。
## Links
- [[A-mem/相关笔记|相关笔记]]
A-mem field mapping / 与 A-mem 的字段映射
| A-mem field / 字段 | Obsidian mapping / 映射 |
|---|---|
id, content |
YAML id and Markdown body / YAML id 与 Markdown 正文 |
keywords, context, category, tags |
YAML frontmatter + body sections / YAML frontmatter + 正文小节 |
links |
YAML memory IDs + bidirectional [[wikilink]] / YAML 内存 ID + 双向 [[wikilink]] |
timestamp, last_accessed, retrieval_count |
YAML frontmatter |
evolution_history |
YAML evolution history / YAML 演化记录 |
| Chroma similarity search | Cosine similarity over embeddings persisted in _amem-index.json / _amem-index.json 中持久化 embedding 的余弦相似度检索 |
Privacy and cost / 隐私与费用
- English — Source text and candidate note metadata are sent to your configured chat/embedding services. Do not process sensitive content until you confirm the provider's data policy.
- 中文 — 原始文本片段、候选 note 元数据会发送到你配置的聊天/embedding 服务;请勿在未确认供应商数据政策前处理敏感内容。
- English — API keys are stored in Obsidian plugin data, not the system keychain. Use restricted keys and avoid syncing
data.jsonto untrusted locations. - 中文 — API key 存在 Obsidian 插件数据中,而不是系统密钥链。请使用受限 key,并避免同步
data.json到不可信位置。 - English — Long files can trigger multiple chat and embedding requests. Lower
Maximum notes per ingestionor disableAuto-link and A-mem evolutionto control cost. - 中文 — 文章/长文件会产生多次聊天和 embedding 请求。可在设置中调低
Maximum notes per ingestion或关闭Auto-link and A-mem evolution控制成本。
Design boundaries / 设计边界
- English — This is a lightweight implementation: embeddings are stored in the vault and no local ChromaDB or
sentence-transformersservice is required. - 中文 — 这是轻量实现:向量索引保存在 vault 中,未启动本地 ChromaDB 或
sentence-transformers服务。 - English — Neighbor updates are conservative: only the LLM's explicit
update_neighboraction writes back to existing notes. - 中文 — A-mem 的邻居更新是可选且保守的:只有 LLM 明确选择
update_neighbor时才写回旧 note。 - English — Test in a scratch vault first to review tags, links, and model output before processing a large corpus.
- 中文 — 建议先在测试 vault 试跑,检查标签词表、链接质量和模型输出后再处理大量资料。
Development validation / 开发验证
English — The project is validated with:
中文 — 本项目已通过:
npx tsc --noEmit
npm run build