Token导航 LogoToken导航

Agent Skill · 研究检索

remnote-bridge(雷姆诺特桥)

remnote-bridge 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

remnote-bridge 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,暂无第三方扫描结果,按安装量在研究检索类的 73,675 个 Skill 里排第 66,030。

总安装 269周安装 11GitHub Stars 1下载 87核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:remnote-bridge(雷姆诺特桥)
来源仓库:https://github.com/baobao700508/unofficial-remnote-bridge-cli
仓库路径:skills/remnote-bridge
安装命令:
npx skills add https://github.com/baobao700508/unofficial-remnote-bridge-cli --skill remnote-bridge
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/baobao700508/unofficial-remnote-bridge-cli --skill remnote-bridge

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

用于查找、检索和筛选相关信息。适合在 Codex、Claude、Cursor、Gemini CLI 中根据关键词快速定位候选结果。通过 npx skills add 命令从指定仓库安装并使用。建议确认权限范围和维护状态,避免触发不必要的联网或文件操作。

remnote-bridge 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/remnote-bridge

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/baobao700508/unofficial-remnote-bridge-cli --s…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

remnote-bridge 怎么安装?

在终端执行 npx skills add https://github.com/baobao700508/unofficial-remnote-bridge-cli --skill remno…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

remnote-bridge 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

remnote-bridge 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

remnote-bridge 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

remnote-bridge 用的人多吗?

公开数据是累计安装 269 次,近一周安装 11 次,下载 87 次,GitHub 1 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

remnote-bridge 安全吗?

没有查到第三方扫描结果,安全性无法从公开资料判断,安装前请自行审查源码、依赖和命令行为。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 没有第三方扫描结果,安全性只能靠自己读源码判断。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 要求有安全扫描结论才肯安装的团队。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
remnote-bridge

雷姆诺特桥 · 本页

2691需要联网未明确未收录

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

RemNote CLI 操作指南

本 skill 指导 AI Agent 通过 remnote-bridge 操作 RemNote 知识库。

详细命令文档位于 instructions/ 目录下,执行具体命令前务必先读取对应文件:

命令文档路径
setupinstructions/setup.md
connectinstructions/connect.md
disconnectinstructions/disconnect.md
healthinstructions/health.md
read-reminstructions/read-rem.md
edit-reminstructions/edit-rem.md
read-treeinstructions/read-tree.md
read-rem-in-treeinstructions/read-rem-in-tree.md
edit-treeinstructions/edit-tree.md
read-globeinstructions/read-globe.md
read-contextinstructions/read-context.md
searchinstructions/search.md
addoninstructions/addon.md
cleaninstructions/clean.md
install-skillinstructions/install-skill.md
全局概览instructions/overall.md

1. 核心概念

一切皆 Rem

RemNote 中所有内容的基本单元都是 Rem。文档、文件夹、闪卡、标签——本质上都是 Rem 的不同形态。

用户说的实际上是
笔记 / 条目Rem
文档 / 页面Rem(isDocument=true)
文件夹Rem(Document 且子节点全是 Document)
闪卡 / 卡片Card——由 RemNote 根据 Rem 属性自动生成,不可直接操控

Rem 类型系统

两个独立维度:

  • type(闪卡语义):concept(加粗)、descriptor(正常字重)、default(普通)、portal(嵌入引用容器)
  • isDocument(页面语义):与 type 完全独立

CDF 框架(Concept-Descriptor Framework)

RemNote 推荐的知识结构化方法:

线性回归 :: 最基本的回归模型        ← Concept(type:concept,加粗)
  假设 ;; 因变量与自变量呈线性关系   ← Descriptor(type:descriptor,斜体)
  损失函数 ;; 均方误差 (MSE)        ← Descriptor

闪卡的 CLI 操作方式

闪卡由 type、backText、practiceDirection 三个字段控制。通过 CLI 操作闪卡,修改的是这些字段。

禁止:在文本中插入分隔符(::、;;、>>、<< 等)来创建闪卡。分隔符是 RemNote 编辑器的输入语法,CLI 无法识别。

闪卡操作CLI 方法
创建概念定义edit-tree 新增行 概念 ↔ 定义,再 edit-rem 设 type: "concept"
创建正向问答edit-tree 新增行 问题 → 答案
创建多行答案edit-tree 新增行 问题 ↓(子行自动成为答案)
改变闪卡类型edit-rem 修改 type、backText、practiceDirection

理解用户意图:分隔符映射

用户在 RemNote 编辑器中通过分隔符创建闪卡。当用户提到这些分隔符时,理解其意图并映射到上述 CLI 操作:

用户说 / 编辑器分隔符对应 type对应 practiceDirection
::conceptboth
;;descriptorforward
>> / << / <>defaultforward / backward / both
>>> / ::> / ;;>default / concept / descriptor多行(子 Rem 为答案)
{{}}defaultforward(完形填空)

三种链接机制

机制用户操作本质CLI 可见性
Reference[[RichText 中的 {"i":"q","_id":"remId"}read-rem 的 text 数组
Tag##Rem 的 tags 数组read-rem 的 tags 字段
Portal((嵌入实时视图(编辑同步)read-tree 标记 type:portal refs:id1,id2

Portal 的编辑同步意味着修改一处会影响另一处。Portal 引用的 Rem 不会被 read-tree 自动展开,需要对 refs 中的 ID 单独 read-tree。Portal 引用列表可通过 edit-rem 修改(直接修改 changes 中的 portalDirectlyIncludedRem 数组)。

Portal 操作速查
操作命令方式
创建 Portaledit-tree新增行 <!--portal refs:id1,id2-->
删除 Portaledit-tree从大纲中移除 Portal 行(与删除普通行相同)
修改引用列表(增删引用的 Rem)edit-rem直接修改 changes 中的 portalDirectlyIncludedRem 数组
移动 Portal(换父节点/位置)edit-tree与移动普通行相同
读取 Portalread-rem自动输出 8 字段简化 JSON

RichText 格式

text 和 backText 字段是 JSON 数组,元素为纯字符串或格式化对象:

["纯文本", {"i":"m","b":true,"text":"粗体"}, {"i":"q","_id":"remId"}]
元素类型
i 值类型必填字段可选字段
纯 string纯文本——
"m"带格式文本text格式标记(见下表)
"q"Rem 引用_idcontent, showFullName, aliasId
"i"图片urlwidth, height, percent(25/50/100)
"x"LaTeXtextblock(true=块级公式)
"a"音频/视频url, onlyAudiowidth, height
"s"卡片分隔符—delimiterCharacterForSerialization

注意:i:"a" 的 onlyAudio 是必填字段(true=音频,false=视频),缺少会导致 SDK 拒绝写入。

格式标记(主要用于 i:"m",但 i:"q" 等也支持)
字段类型含义
btrue加粗
ltrue斜体(小写字母 L,不是 I)
utrue下划线
hnumber高亮颜色(见 RemColor 枚举)
tcnumber文字颜色(见 RemColor 枚举)
qtrue行内代码(红色等宽样式)
codetrue代码块(带语言标签和复制按钮)
languagestring代码块语言(如 "javascript"、"python")
cIdstring完形填空 ID
hiddenClozetrue完形填空隐藏状态
revealedClozetrue完形填空已揭示状态
iUrlstring外部超链接 URL
qIdstring行内引用链接的 Rem ID

注意:url 字段已废弃无效,超链接必须用 iUrl。

RemColor 颜色枚举(h 和 tc 共用)
值颜色值颜色值颜色
0无颜色/默认4Green7Gray
1Red5Purple8Brown
2Orange6Blue9Pink
3Yellow————
常用构造示例

以下为 JSON.stringify(null, 2) 格式化后的实际样式(key 按字母序):

// 粗体(注意 key 顺序:b < i < text)
{ "b": true, "i": "m", "text": "粗体" }
// 行内代码
{ "i": "m", "q": true, "text": "console.log()" }
// 超链接(iUrl 不是 url!)
{ "i": "m", "iUrl": "https://example.com", "text": "点击访问" }
// 红色高亮 + 粗体(h 是数字,不是字符串)
{ "b": true, "h": 1, "i": "m", "text": "重点" }
// 完形填空
{ "cId": "cloze1", "i": "m", "text": "答案内容" }
// Rem 引用(_id 排在所有小写 key 之前)
{ "_id": "remId", "i": "q" }
// Rem 引用加粗
{ "_id": "remId", "b": true, "i": "q" }
// LaTeX 公式
{ "i": "x", "text": "E = mc^2" }
// 图片
{ "i": "i", "url": "https://...", "width": 200, "height": 100 }
// 视频(onlyAudio 必填!)
{ "i": "a", "onlyAudio": false, "url": "https://youtube.com/watch?v=xxx" }
// 音频
{ "i": "a", "onlyAudio": true, "url": "https://example.com/audio.mp3" }
注意:在 RemObject 的格式化 JSON 中,数组内的对象会展开为多行(每个 key 一行,缩进 4+2 空格)。以上为简写——构造 edit-rem 的 changes 中 RichText 值时,直接传入数组即可。
highlightColor(Rem 级别)vs h(RichText 行内)
  • highlightColor:RemObject 顶层字段,值为字符串("Red", "Blue" 等)或 null,作用于整行背景
  • h:RichText 元素内格式标记,值为数字 0-9(RemColor 枚举),作用于行内文字片段

两者完全独立,互不影响。

序列化确定性

RichText 对象内部按 key 字母序排列(sortRichTextKeys()),确保 JSON 始终一致。_id 中的 _(U+005F)排在所有小写字母(a=U+0061)之前。防线 2(语义并发检测)依赖此确定性序列化来逐字段比较缓存与最新数据。

Powerup 机制与噪音过滤

RemNote 格式设置(fontSize、highlightColor 等)底层通过 Powerup 机制实现,会注入隐藏 Tag 和子 Rem。默认自动过滤(includePowerup=false)。read-tree 支持 --includePowerup 恢复完整数据,read-globe 和 read-context 硬编码过滤无选项。


2. 命令决策

⚠️ 用户正在看的页面对你不可见

用户在跟你沟通时,往往默认你也能看到他正在浏览的 RemNote 页面,但实际上你们的信息是不对等的。当你发现以下情况时,必须主动执行 read-context 来对齐信息:

  • 用户提到了你没有上下文的内容(如"这个"、"当前页面"、"这里")
  • 用户的描述与你已知的信息对不上
  • 你搜索不到用户提到的某些内容
  • 用户似乎在引用他正在查看的界面

先用 read-context 看到用户所看到的,再做决策,沟通才能顺畅。

读取:用户想了解什么?

知识库整体结构("有哪些文档")       → read-globe
用户当前在看什么("当前页面")        → read-context
某个 Rem 的子树("展开这个主题")     → read-tree <remId>
某个 Rem 的详细属性("详细信息")     → read-rem <remId>
子树 + 每个节点属性("批量标注")     → read-rem-in-tree <remId>
按关键词搜索("搜索 X")            → search <query>(中文搜索有限制,见下方说明)
read-globe vs read-context vs read-tree
场景命令特点
知识库有什么read-globe仅 Document 层级,无缓存,最小序列化(无 backText/箭头)
当前页面内容read-context均匀展开(默认,推荐——只需有打开页面即可),无缓存
我光标在哪 / 正在编辑的 Remread-context --mode focus鱼眼视图(需光标在某 Rem 上,否则报错),无缓存
展开某主题细节read-tree <id>完整子树,有缓存供 edit-tree
展开子树 + 每个节点属性read-rem-in-tree <id>大纲 + RemObject,双重缓存供 edit-tree 和 edit-rem

重要:read-globe、read-context、search 都不写入缓存,不能替代 read-tree/read-rem/read-rem-in-tree 作为 edit 的前置条件。read-context 需要用户在 RemNote 中有打开页面(page 模式,默认)或有焦点(focus 模式)。

修改:用户想改什么?

Rem 的属性(文本、类型、格式、标签)  → edit-rem   (前置:先 read-rem)
树的结构(新增、删除、移动、重排)    → edit-tree  (前置:先 read-tree)
某行的文字内容                       → edit-rem   (不是 edit-tree!)

关键区分:edit-rem 修改 Rem 的属性,edit-tree 修改 Rem 之间的结构关系。edit-tree 禁止修改行内容。

read-rem-in-tree:何时用、怎么用

read-rem-in-tree = read-tree + 批量 read-rem 的合体。一次调用同时获取子树大纲和每个节点的 RemObject(含完整 RichText),同时建立 tree: 和 rem: 双重缓存。

何时用:当你需要对一棵子树中的多个节点做属性修改(edit-rem)时。典型场景:

  • 批量标注重点(给多个节点加高亮/粗体)
  • 批量修改类型(把多个普通 Rem 改为 concept)
  • 读取子树后需要检查多个节点的 RichText 再决定怎么改

何时不用:只需要看大纲结构(用 read-tree),或只改 1-2 个节点属性(用 read-tree + read-rem)。

用法示例(课本划重点场景):

# 1. 一次获取大纲 + 所有节点属性(默认 maxNodes=50)
read-rem-in-tree --json '{"remId":"kLr...","depth":3,"maxNodes":30}'

# 返回:outline(大纲文本)+ remObjects(每个节点的 RemObject)

# 2. 从 remObjects 中找到要标注的节点,直接 edit-rem(rem 缓存已就绪)
edit-rem --json '{"remId":"ABC","changes":{"highlightColor":"Yellow"}}'
edit-rem --json '{"remId":"DEF","changes":{"text":["关键词",{"b":true,"h":1,"i":"m","text":"重点"}]}}'

# 3. 如需结构变更,直接 edit-tree(tree 缓存已就绪)
edit-tree --json '{"remId":"kLr...","oldStr":"...","newStr":"..."}'

对比效率:修改 10 个节点时,read-rem-in-tree = 1 次调用;read-tree + 10×read-rem = 11 次调用。


3. 标准工作流

⚠️ 标准模式(推荐):connect 后需要用户配合

标准模式是推荐的日常使用方式。用户在自己的浏览器中操作 RemNote,Agent 可以通过 read-context 感知用户正在浏览的页面和焦点位置,实现真正的协作。

connect 成功只意味着 daemon 和 Plugin 服务已启动,Plugin 并未自动连接。用户必须在 RemNote 中完成操作,Plugin 才能连接到 daemon:

首次使用(RemNote 从未加载过此插件):

  1. 打开 RemNote 桌面端或网页端
  2. 点击左侧边栏底部的插件图标(拼图形状)
  3. 点击「开发你的插件」(Develop Your Plugin)
  4. 在输入框中填入 connect 输出的 Plugin 服务地址(如 http://localhost:29101)
  5. 等待插件加载完成

非首次使用(之前已加载过此插件):

  • 只需刷新 RemNote 页面即可(浏览器 F5 或 Cmd+R),插件会自动重新连接

你必须:执行 connect 后,立即告知用户需要完成上述操作,不要直接调用业务命令。引导用户完成后,用 health 确认三层就绪再继续。

Headless 模式(特殊场景,不推荐日常使用)

通过 setup(一次性)+ headless Chrome 实现自动连接,后续 connect 无需用户介入。

⚠️ 不推荐日常使用。Headless Chrome 是后台独立实例,会丢失用户上下文——read-context 返回的是 headless Chrome 的上下文,不是用户浏览器的。Agent 无法感知用户正在浏览和操作的页面,协作体验大打折扣。

仅在以下场景使用 headless:

  • 用户明确要求在服务器/无 GUI 环境中运行
  • 用户明确表示不想参与操作,希望全自动化(CI/CD、定时任务、批量处理等)
  • 用户自己不在 RemNote 前面,不需要与 Agent 协作浏览

默认始终使用标准模式,除非用户主动要求 headless。

首次使用(setup)

setup 会弹出 Chrome 窗口,用户只需 登录 RemNote,然后彻底退出 Chrome(macOS 必须 Cmd+Q,仅关窗口不够)。

setup 只负责保存登录凭证——配置 dev plugin 是 connect 之后的事(见标准模式说明)。

Agent 交互方式:

1. 调用 setup
2. 立即告知用户:
   "已打开 Chrome 浏览器。请登录 RemNote,完成后彻底退出 Chrome(macOS 请按 Cmd+Q)"
3. 等待 setup 返回(阻塞,最长 10 分钟)
4. 成功 → 进入下一步 connect --headless

setup 只需执行一次。之后每次连接直接用 connect --headless。

后续使用(connect --headless)
1. connect --headless   -- 启动 daemon + headless Chrome 自动加载 RemNote 和 Plugin
2. health               -- 等待三层就绪(Plugin 需要 10-30 秒连接,可多次轮询)
3. 业务操作
4. disconnect           -- 结束会话

无需任何用户操作——headless Chrome 在后台自动完成登录和 Plugin 加载。

排查
  • health --diagnose:截图 + Chrome 状态 + console 错误(确认页面是否正常加载)
  • health --reload:重载 headless Chrome 页面(Plugin 未连接时尝试)
  • 如果 Plugin 始终不连接,可能是 RemNote 登录 session 过期,需重新 setup

完整流程(标准模式)

1. connect              -- 启动会话(幂等,重复调用安全)
2. ⚠️ 引导用户在 RemNote 中加载插件(首次填端口,非首次刷新页面)
3. health               -- 确认三层就绪:daemon → Plugin → SDK(链式依赖)
4. read-globe           -- 了解知识库结构(首次探索)
   或 read-context      -- 了解用户当前上下文
5. search "关键词"       -- 定位目标 Rem(结果不进缓存!)
6a. [单节点] read-tree <id> + read-rem <id>  -- 各自建立缓存
6b. [多节点] read-rem-in-tree <id>           -- 一次建立双重缓存(推荐 ≥3 个节点需修改时)
7. edit-rem / edit-tree -- 执行修改
9. disconnect           -- 结束会话(缓存全部清空,幂等)

超时:daemon 默认 30 分钟无 CLI 交互自动关闭,每次请求重置计时器。长时间操作间可用 health 保活。


4. 双模式 I/O(--json)

Agent 应始终使用 JSON 模式调用命令。

# 正确:位置参数 = JSON 字符串
remnote-bridge read-rem --json '{"remId":"kLrIOHJLyMd8Y2lyA","fields":["text","type"]}'
remnote-bridge search --json '{"query":"机器学习","limit":10}'
remnote-bridge edit-rem --json '{"remId":"kLrIOHJLyMd8Y2lyA","changes":{"type":"concept"}}'

# 人类模式:
remnote-bridge edit-rem kLrIOHJLyMd8Y2lyA --changes '{"type":"concept"}'

# 错误:禁止混用裸 remId + --json
remnote-bridge read-rem kLrIOHJLyMd8Y2lyA --json   # 会失败!

中文搜索限制(重要)

search 调用 RemNote SDK 官方搜索方法,其分词基于空格分割。中文、日文、韩文等无空格分词的语言搜索效果差——SDK 将多字词拆为单字符 token 匹配,导致返回 0 结果或不相关结果。RemNote 本地桌面版已优化此问题,Web 版未优化。

应对策略:

  1. 先用完整关键词搜索
  2. 若返回 0 结果且关键词为中文等非空格语言:用单个最具区分度的字重试(如搜 "键" 而非 "共价键")
  3. 若仍无结果:改用 read-globe → read-tree 浏览定位
  4. 搜索持续不佳时,询问用户:"您使用的是 RemNote Web 版还是本地桌面版?Web 版中文搜索存在已知限制。"

JSON 输出结构

{ "ok": true,  "command": "read-rem", ... }   // 成功
{ "ok": false, "command": "read-rem", "error": "..." }  // 失败

5. 安全机制

防线 1:缓存存在性

必须先 read 再 edit。未缓存的 Rem 不允许编辑。

防线 2:语义并发检测(三层字段分类)

edit 时从 SDK 重新读取最新数据,逐字段与缓存比较并按三层分类处理:

  • 语义字段(text/type/tags/highlightColor 等)变化 → 硬拒绝,不更新缓存,迫使 Agent 重新 read
  • 敏感元数据(parent)变化 → 放行 + warnings 返回 "⚠️ parent has changed (was: X, now: Y)...",静默刷新缓存
  • 普通元数据(positionAmongstSiblings/updatedAt/siblingRem 等)变化 → 放行 + warnings 返回 "ℹ️ Metadata fields changed since last read:...",静默刷新缓存

这意味着 edit-tree 移动/重排 Rem 后,可直接 edit-rem 修改受影响节点,无需重新 read。

防线 3:str_replace 精确匹配(仅 edit-tree)

oldStr 必须在大纲文本中恰好匹配 1 次。仅适用于 edit-tree。

edit-rem 使用字段直接修改(changes 对象),不经过 str_replace,改为字段白名单校验(非法字段产生警告,枚举值非法则拒绝)。

缓存更新规则

场景缓存行为Agent 操作
写入成功从 SDK 重新读取 → 更新缓存可继续编辑
仅元数据变化(位置/时间戳等)静默刷新缓存并放行可继续编辑(返回 warnings)
语义字段冲突(text/type 等)不更新缓存必须重新 read
部分写入失败不更新缓存必须重新 read
枚举值非法(edit-rem)缓存保持不变检查允许的值范围后重试
防线 3 拒绝 / JSON 语法错误(edit-tree)缓存保持不变调整 oldStr/newStr 后直接重试
操作执行中异常(edit-tree)已执行的操作保留(无回滚),不更新缓存必须重新 read-tree

6. Markdown 大纲格式

read-tree / read-globe / read-context 输出 Markdown 大纲,edit-tree 基于此大纲编辑。

缩进规则

每级缩进 2 个空格。根节点 0 空格,直接子节点 2 空格,孙节点 4 空格。缩进不可跳级(如从 0 直跳 4 空格会报 indent_skip 错误)。

行结构

{缩进}{前缀}{内容}{箭头}{backText} <!-- {remId} {元数据} -->

前缀

前缀含义
# / ## / ###H1/H2/H3 标题
- [] / - [x]未完成/已完成待办
>引用块
1.有序列表项
` ... `代码块
---分隔线

箭头(编码 practiceDirection)

箭头方向格式
→forwardtext → backText
←backwardtext ← backText
↔bothtext ↔ backText
↓ / ↓forward 多行有 backText: text ↓ backText;无: text ↓
↑ / ↑backward 多行同上
↕ / ↕both 多行同上

元数据标记

标记含义
type:concept / type:descriptor / type:portalRem 类型
docisDocument = true
top知识库顶层 Rem
children:N折叠的子节点数(深度超限)
role:card-item多行闪卡答案行
tag:Name(id)标签
refs:id1,id2Portal 引用

省略占位符(两种类型)

<!--...elided 3 siblings (parent:id range:2-4 total:5)-->     精确省略:maxSiblings 超限,调大 maxSiblings
<!--...elided >=10 nodes (parent:id range:5-14 total:20)-->   非精确省略:maxNodes 耗尽,调大 maxNodes

精确省略保留前 70% + 后 30%,中间插入省略行。省略占位符不可删除或修改,否则报 elided_modified 错误。


7. edit-tree 结构编辑

支持的操作

操作方式执行顺序
新增在 newStr 中添加无 remId 的新行1(从浅到深)
移动改变行的缩进/位置2
重排调换同级行顺序3
删除从 newStr 中移除带 remId 的行4(从深到浅)

一次 edit-tree 可组合多种操作。

禁止的操作

操作错误类型替代方案
修改已有行内容content_modified使用 edit-rem
删除/修改/移动根节点root_modified—
删除有隐藏子节点的行folded_delete用更大 depth 重新 read-tree
删除行但保留子节点orphan_detected必须同时删除所有子行
删除/修改省略占位符elided_modified用更大参数重新 read-tree
缩进跳级indent_skip每级 2 空格,不可跳级

新增行格式

新增行可用 Markdown 前缀和箭头:

  # 新标题
  新闪卡 → 答案
  问题 ↔ 回答
  - [ ] 新待办
  > 引用内容
  1. 列表项
  `代码块`

新增行指定类型/属性(metadata-only 注释)

新增行可在行尾添加 HTML 注释来指定 type、isDocument、tag,格式中不含 remId:

  新概念 <!--type:concept-->
  新文档页 <!--type:concept doc-->
  带标签的描述 <!--type:descriptor tag:数学(tag01)-->
  多标记组合 <!--type:concept doc tag:基础(tag02) tag:数学(tag01)-->

支持的标记:type:concept、type:descriptor、doc、tag:Name(id)(可多个,空格分隔)。

新增 Portal

在 newStr 中用特殊格式创建 Portal:

  <!--portal refs:id1,id2-->      创建 Portal 并引用 id1、id2
  <!--portal-->                   创建空 Portal

注意:与已有 Portal 行(<!--remId type:portal refs:id1,id2-->)不同,新增 Portal 以 <!--portal 开头,无 remId。Portal 不能通过 edit-rem 设 type: "portal" 创建,只能用此格式或 SDK createPortal()。

嵌套新增(一次创建父+子结构)

新增行下面可以再嵌套新增行,缩进表示父子关系:

newStr:
  父节点 ↓
    答案行 1
    答案行 2
  子节点 A <!--idA-->

创建顺序从浅到深,嵌套的子行会自动成为新创建父节点的 children。

practiceDirection 保护

SDK bug 自动修复:移动行进入多行闪卡父节点时自动设 isCardItem=true 并修正 practiceDirection;移出时自动清除。Rem 自身的合法 practiceDirection 会被保留。

str_replace 构造示例

# 在 idA 前插入新行
--old-str '  子节点 A <!--idA-->'
--new-str '  新增行\n  子节点 A <!--idA-->'

# 删除叶子节点(注意尾部换行)
--old-str '    叶子节点 <!--leaf-->\n'
--new-str ''

# 调换两个兄弟顺序
--old-str '  节点 A <!--idA-->\n  节点 B <!--idB-->'
--new-str '  节点 B <!--idB-->\n  节点 A <!--idA-->'

8. edit-rem 字段修改要点

edit-rem 通过 changes 对象直接指定要修改的字段及其目标值,无需 str_replace。

使用方式

# JSON 模式
edit-rem --json '{"remId":"kLrIOHJLyMd8Y2lyA","changes":{"type":"concept","text":["新标题"]}}'

# 人类模式
edit-rem kLrIOHJLyMd8Y2lyA --changes '{"type":"concept","text":["新标题"]}'

changes 对象中只需包含要修改的字段,未提及的字段保持不变。

21 个可编辑字段

text, backText, type, isDocument, parent,
fontSize, highlightColor,
isTodo, todoStatus, isCode, isQuote, isListItem, isCardItem, isSlot, isProperty,
enablePractice, practiceDirection,
tags, sources, positionAmongstSiblings, portalDirectlyIncludedRem

特殊字段处理规则

字段特殊行为
backTextnull → 调用 setBackText([])(清除背面);裸字符串自动包装为 [string]
highlightColornull → 调用 removePowerup('h')(SDK 不接受 null)
fontSizenull → 调用 setFontSize(undefined)(恢复普通大小)
todoStatus依赖 isTodo=true 才生效;null 被跳过(清除 todo 应设 isTodo=false)
type不可设为 portal(只能通过 SDK createPortal() 创建)
parent + positionAmongstSiblings共享同一 SDK 调用 setParent(parentId, position),应在同一次 changes 中同时修改
tags / sourcesDiff 机制:对比当前 vs 目标数组,逐项 add/remove。必须列出完整目标数组,缺少的会被删除
portalDirectlyIncludedRemPortal 专用可写。Diff 机制:对比当前 vs 目标数组,逐项 addToPortal/removeFromPortal。仅 type=portal 时可修改

常用只读字段(修改只产生警告,不生效)

id, children, createdAt, updatedAt, remsReferencingThis, remsBeingReferenced,
aliases, descendants, siblingRem, isTable, portalType, propertyType

read-rem 输出模式

模式字段数用法
默认33(RW + R)常用场景
Portal 简化8(id, type, portalType, portalDirectlyIncludedRem, parent, positionAmongstSiblings, createdAt, updatedAt)type=portal 时自动切换,--full 和 --fields 可覆盖
--full51(含低频 R-F)需要 Powerup 标识、时间戳等
--fields自选 + id精确获取特定字段

缓存始终存储完整 51 字段 RemObject,字段过滤仅影响输出。


9. 错误诊断速查

错误原因恢复
守护进程未运行未 connect 或已超时connect
Plugin 未连接RemNote 未打开打开 RemNote(health 三层:daemon→Plugin→SDK 链式依赖)
has not been read yet未先 read执行对应 read 命令(search 结果不算 read!)
has been modified since last read语义字段被外部修改(元数据变化不触发此错误,只返回 warnings)重新 read(必须,不可直接重试)
Invalid value for 'field'枚举字段值不合法(edit-rem)检查该字段允许的值范围
old_str not foundoldStr 不精确(edit-tree)检查引号、空格、换行
old_str matches N locationsoldStr 不够具体(edit-tree)扩大 oldStr 范围,包含更多上下文
content_modifiededit-tree 中改了行内容用 edit-rem
orphan_detected删了父但留了子同时删除所有子行
folded_delete删了有隐藏子节点的行用更大 depth 重新 read-tree
elided_modified删/改了省略占位符用更大 depth/maxSiblings 重新 read-tree
indent_skip缩进跳级(如 0→4 空格)每级 2 空格,不可跳级
children_captured新行劫持已有子节点把新行插到兄弟末尾
Rem not foundremId 无效或已删除用 search 重新定位

10. 配置

配置文件:~/.remnote-bridge/config.json(全局目录,所有实例共享)

端口由槽位自动分配(槽位 0: 29100/29101/29102,槽位 1: 29110/29111/29112,以此类推),最多 4 个并发实例。

关键默认值:超时 30 分钟、maxNodes 200、maxSiblings 20、readTreeDepth 3、readGlobeDepth -1(无限)、缓存上限 200 条。

平台分布

Codex

35.41%
按下载量换算31

Claude

29.64%
按下载量换算26

Cursor

21.06%
按下载量换算18

Gemini CLI

9.46%
按下载量换算8

安全审计

暂无安全审计结果可展示。

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills