前言
Memos 是一款轻量级开源备忘录应用,支持标签、置顶、关联等特性。但它的 Web 界面在搜索和批量操作上有些局限,特别是当你想把笔记内容和 AI 结合使用时,通过 Web API 调用的方式既消耗 token 又依赖网络。
本文介绍 memos-cli ------ 一个 Go 实现的 Memos 命令行工具,将远程备忘录同步到本地 SQLite 数据库,提供 CLI 命令行、TUI 终端界面和 AI 对话三种交互方式,支持关键词搜索和向量语义搜索。
项目地址:github.com/cicbyte/memos-cli
开源协议:MIT
环境说明
- 操作系统:Windows / Linux / macOS
- Go 版本:1.24+(仅源码编译需要,下载预编译二进制无需 Go)
- Memos Server:需要已部署的 Memos 服务端
- AI 功能(可选):Ollama(本地)或 OpenAI 兼容 API
安装
bash
# 方式一:从 Release 下载预编译二进制(推荐)
# https://github.com/cicbyte/memos-cli/releases
# 方式二:从源码编译
git clone https://github.com/cicbyte/memos-cli.git
cd memos-cli
go build -o memos-cli .
快速开始
1. 添加服务器
首次使用需要添加 Memos 服务器地址和认证信息:
bash
# 使用用户名和 Token 登录
memos-cli auth login --name my-server --token <your-access-token>
# 或指定服务器 URL(默认为 https://demo.usememos.com)
memos-cli auth login --name my-server --url https://memos.example.com --token <token>
查看认证状态:
bash
memos-cli auth status
2. 同步笔记
将远程备忘录同步到本地 SQLite 数据库:
bash
# 增量同步(首次会全量拉取)
memos-cli sync
# 全量同步(清空本地数据重新拉取)
memos-cli sync --full
同步完成后,所有笔记存储在本地 SQLite 数据库(~/.cicbyte/memos-cli/db/app.db)中,后续操作直接查本地,无需网络。
3. 命令行操作
bash
# 列出笔记(从本地 DB,支持过滤)
memos-cli memo list --limit 20 --tag Go --visibility PRIVATE
# 查看单条笔记
memos-cli memo get <uid>
# 创建笔记
memos-cli memo create --content "这是一条新笔记" --tag work
# 更新笔记
memos-cli memo update <uid> --content "更新后的内容"
# 删除笔记
memos-cli memo delete <uid>
# 统计概览
memos-cli memo stats
4. TUI 终端界面
无参数启动进入 Bubbletea TUI 浏览模式:
bash
memos-cli
TUI 界面支持:浏览笔记列表、查看笔记详情、创建新笔记、搜索、设置。所有数据从本地 SQLite 加载,响应即时。
5. AI 对话
内置 AI 对话功能,自动检索本地笔记作为上下文:
bash
# 单轮对话
memos-cli chat "我上周写了什么关于 Go 的内容?"
# 多轮交互式对话
memos-cli chat -i "帮我总结上个月的笔记趋势"
# 指定搜索模式
memos-cli chat "有哪些未完成的任务?" --mode db
memos-cli chat "关于系统架构设计的相关笔记" --mode vector
核心架构
数据流
Memos Server (远程)
↓ REST API
memos-cli sync (增量同步 + MD5 去重)
↓
本地 SQLite (~/.cicbyte/memos-cli/db/app.db)
├── local_memos # 笔记内容
├── memo_vectors # 向量索引(语义搜索)
├── sync_states # 同步状态
└── ai_conversations # AI 对话历史
所有命令行操作(list/stats/search)直接查本地 SQLite,不依赖网络。只有 create/update/delete 和 sync 才调用远程 API。
三种交互模式
| 模式 | 启动方式 | 适用场景 |
|---|---|---|
| CLI 命令 | memos-cli memo list |
脚本调用、自动化 |
| TUI 界面 | memos-cli(无参数) |
日常浏览、快速查看 |
| AI 对话 | memos-cli chat <question> |
语义搜索、内容总结 |
增量同步机制
同步服务采用分页拉取 + MD5 去重策略:
- 分页拉取远程 memo(每页 100 条,通过 nextPageToken 翻页)
- 对比
ContentHash(内容 MD5):相同则跳过,不同则插入或更新 - 检测远程已删除的 memo(
RowStatus=ARCHIVED),标记本地IsDeleted=true - 下次同步时,远程也消失的 memo 从本地 DB 彻底删除
- 同步完成后自动对新增/更新的 memo 建立 Embedding 向量索引
bash
# 查看同步状态
memos-cli sync status
# 带详细输出
memos-cli sync --verbose
AI 功能详解
搜索模式
memos-cli 提供三种搜索模式,通过 --mode 指定:
| 模式 | 说明 | 原理 |
|---|---|---|
auto(默认) |
AI 自动选择 | 优先语义搜索,失败则回退关键词 |
db |
关键词搜索 | SQLite LIKE 匹配 + 标签 JSON 匹配 + 时间范围 |
vector |
语义搜索 | Embedding 向量化 + 余弦相似度 |
AI Agent 工具
AI 对话采用 Tool Calling 机制,LLM 自动选择合适的工具检索笔记:
| 工具 | 功能 | 数据源 |
|---|---|---|
memo_stats |
统计概览(总数、标签分布、最近笔记) | 本地 SQLite |
search_memos |
关键词 + 标签 + 时间范围搜索 | 本地 SQLite |
semantic_search |
向量语义搜索 | Embedding + SQLite |
get_memo |
按 UID 精确查询单条笔记 | 本地 SQLite |
Agent 最多 5 轮工具调用迭代,每轮检测 LLM 返回的 ToolCalls 并执行,结果格式化为 Markdown 追加到上下文,最终返回带有引用来源的回答。
时间表达式
搜索支持中英文时间表达式:今天、昨天、上周、本月、3天前、2025-01-15 等。
向量搜索
需要配置 Embedding 服务(默认使用 Ollama 本地模型 nomic-embed-text):
bash
# 查看当前配置
memos-cli config list
# 设置 Embedding 模型(如使用其他提供商)
memos-cli config set embedding.model text-embedding-3-small
memos-cli config set embedding.base_url https://api.openai.com/v1
memos-cli config set embedding.api_key sk-xxx
同步时自动对新增笔记建立向量索引,无需手动操作。
流式输出
bash
# 流式输出(默认)
memos-cli chat "总结最近的笔记趋势"
# 保存到文件
memos-cli chat "帮我整理 Go 相关的笔记" --output go-notes.md
MCP Server 集成
memos-cli 内置 MCP Server,可以让 Claude Code、Cursor 等 AI 工具直接操作本地笔记:
bash
memos-cli mcp server
注册了 5 个工具:memo_search(关键词搜索)、memo_semantic_search(语义搜索)、memo_get(获取单条)、memo_create(创建笔记)、memo_stats(统计概览)。在 Claude Code 的 MCP 配置中添加 stdio 类型的服务器即可使用。
Skills 集成
除了 MCP Server,memos-cli 还提供了一种更轻量的 AI 集成方式------Skills 系统。
MCP Server 通过 stdio 协议传输工具定义,需要 AI 工具原生支持 MCP 协议。而 Skills 系统不依赖任何协议,它的原理很简单:把命令用法写成 Markdown 文件,让 AI 直接读后执行 CLI 命令。
skills/memos-cli/
├── SKILL.md # 技能总入口,描述工具定位和可用命令
└── references/
├── memo.md # memo CRUD 命令参考
├── sync-auth.md # 同步和认证命令参考
├── chat.md # AI 对话命令参考
├── config.md # 配置管理命令参考
└── mcp.md # MCP Server 配置参考
这意味着任何支持读取本地文件的 AI 工具都能集成 memos-cli,比如 Cherry Studio:
- 在 Cherry Studio 中新建一个知识库,将
skills/memos-cli/目录下的 SKILL.md 和 references/ 文件导入 - 对话时,AI 会根据这些 Skill 文件的指引,直接生成并执行
memos-cli命令
这种方式的好处:
- 零协议依赖:不需要 MCP 协议支持,任何能读文件的 AI 都能用
- 可自定义:Skill 文件是纯 Markdown,可以按需修改命令模板和说明
- 完全离线:Skill 文件随 memos-cli 一起分发,不需要额外的网络请求
MCP vs Skills 如何选择
| 维度 | MCP Server | Skills |
|---|---|---|
| 集成方式 | stdio 协议,需工具原生支持 | Markdown 文件,任何 AI 可用 |
| 适用工具 | Claude Code、Cursor 等 | Cherry Studio、ChatGPT 等 |
| 配置复杂度 | 需配置 MCP Server 地址 | 导入 Markdown 文件即可 |
| 功能 | 自动注册工具,AI 自动调用 | AI 根据文档指引执行命令 |
如果你的 AI 工具支持 MCP,优先使用 MCP Server;如果不支持,用 Skills 同样可以实现完整的 CLI 操作。
多服务器管理
支持配置多个 Memos 服务器并快速切换:
bash
# 添加服务器
memos-cli server add work https://memos.example.com --token <token>
memos-cli server add personal https://my-memos.com --token <token>
# 列出所有服务器
memos-cli server list
# 设置默认服务器
memos-cli server default work
# 切换服务器(通过 LastServer 记忆上次使用)
memos-cli auth login --name personal
配置管理
所有配置存储在 ~/.cicbyte/memos-cli/config/config.yaml:
bash
# 列出所有配置项
memos-cli config list
# 查询单项
memos-cli config get ai.model
# 修改配置
memos-cli config set ai.model gemma4:e4b
memos-cli config set ai.temperature 0.7
支持配置的类别:ai.*(模型、温度、最大 token 等)、embedding.*(模型、API 地址等)、log.*(级别、大小、保留天数等)。
技术选型
| 组件 | 选型 | 说明 |
|---|---|---|
| CLI 框架 | spf13/cobra | 子命令组织清晰 |
| TUI 框架 | charmbracelet/bubbletea | 终端交互界面 |
| HTTP 客户端 | go-resty/resty | Memos API 通信 + Embedding 请求 |
| 数据库 | GORM + glebarez/sqlite | 纯 Go SQLite,无 CGO 依赖 |
| AI 客户端 | sashabaranov/go-openai | OpenAI 兼容 API,支持 Ollama/OpenAI/智谱等 |
| MCP Server | mark3labs/mcp-go | stdio 传输,与 Claude Code 等工具集成 |
| Markdown 渲染 | charmbracelet/glamour | 终端流式输出渲染 |
编译后为单文件二进制,零外部运行时依赖。
与 Web 端的对比
| 维度 | Memos Web | memos-cli |
|---|---|---|
| 搜索 | 仅关键词 | 关键词 + 向量语义搜索 |
| 批量操作 | 不支持 | CLI 支持过滤/分页/导出 |
| AI 集成 | 无 | 内置 AI 对话 + MCP Server |
| 离线使用 | 不支持 | 完全离线(同步后) |
| 数据安全 | 全在服务器 | 本地 SQLite 缓存 |
| 响应速度 | 依赖网络 | 本地 SQLite 即时响应 |
常见问题
Q: 支持哪些 AI 提供商?
A: 任何 OpenAI 兼容 API,包括 Ollama(本地免费)、OpenAI、智谱 GLM、DeepSeek 等。通过 config set 配置。
Q: 语义搜索需要联网吗?
A: Embedding 向量化时需要联网(调用 API),但搜索匹配完全在本地 SQLite 中完成,不需要实时联网。
Q: 同步会丢失数据吗?
A: 不会。同步只操作本地 SQLite,不会删除远程数据。sync --full 会清空本地数据重新拉取,但不影响远程。
Q: TUI 在 Windows Terminal 中显示异常怎么办?
A: memos-cli 的 TUI 不使用 Alt Screen 模式,兼容大多数终端。如果遇到显示问题,建议使用 Windows Terminal。
Q: 如何更新到最新版本?
A: 从 Release 下载新二进制替换即可,本地数据库和配置自动兼容。
总结
memos-cli 通过本地 SQLite 缓存 + 增量同步 + 向量搜索三层架构,将 Memos 笔记从"只能通过 Web 查看"变为"本地即查即用、AI 可直接检索"。核心价值:同步一次、永久离线、AI 友好、零额外成本。
- 项目地址 :github.com/cicbyte/memos-cli
- 安装方式 :从 Release 下载预编译二进制,或
go build编译