v4.0 · 让 Agent 住进编辑器
Agent in SoloMD
SoloMD v4.0 把工作区从"按需调用 AI"变成"Agent 持续在场工作" 的地方。五大支柱,全部跑在你早就拥有的纯 Markdown 文件上。 每一次自动写入都先进 AutoGit 分支沙箱,你 Accept 或 Reject 后才会落到 main。
1. 内置 Agent 面板
右侧一等公民面板,与 Outline / Backlinks 平级。流式输出地与整个
vault 对话,通过进程内 MCP 工具走 14-provider AI 栈。引用以
[[wikilink]] 芯片形式呈现,点击在新标签页打开被引用笔记。
tool-call 卡片 (Cursor 风格) 把每次读 / 写都展开在面板里 —— 展开卡片可看完整入参和返回。
运行历史以纯 markdown 持久化在
<workspace>/.solomd/agent-runs/<ts>.md。
可 grep,可 git。这是黑盒的反面。
- 用
⌘⇧A或右栏开关呼出 - 当前笔记开关把当前文档注入系统提示 —— 选项性, 默认关
- 允许写入开关按会话控制
write_note和append_to_note - 10 个进程内 agent 工具 —— 与内置 MCP server 同样的能力面
2. 定时 Recipe
一个 Recipe 就是一个 YAML 文件,放在
<workspace>/.solomd/agents/*.yml。无构建步骤,
无插件清单。改、保存、跑。五种触发模式:
| 触发器 | 触发条件 |
|---|---|
schedule | cron 表达式匹配当前 UTC 分钟 |
on-save | 匹配 match: 的 markdown 文件保存时 (800ms 防抖) |
on-commit | AutoGit 提交落地且涉及 match: |
on-tag-add | 笔记新加入与 tag: 匹配的 #tag |
manual | 设置 → Recipes 里点 立即运行 |
示例 Recipe:
name: 周回顾
trigger: schedule
schedule: "0 18 * * SUN" # cron, UTC
match: "daily/**/*.md"
prompt: |
阅读本周 daily/ 下的笔记。
写到 weekly/{{date:YYYY-WW}}.md:主题 / 决定 / 未决问题。
allow-write: true
write-cap: 5
provider: claude
触发器与下面的安全模型组合 —— 每次运行都先开自己的 AutoGit 分支
agent/<recipe>/<run-id>,写入是可审的,不是"魔法"。
3. Trace 视图 + 重放
每次运行 (Panel 对话或 Recipe) 都吐
<workspace>/.solomd/agent-runs/<run-id>/trace.jsonl
—— 行分隔的 JSON Lines,长任务可以边跑边 tail -f。
schema:每步一个 JSON 对象,kind 包括 run_started ·
prompt · model_call ·
tool_call · tool_result ·
git_commit · run_ended。字段含时间戳、
工具入参、截断后的返回 (≤ 2048 字符)、token 数、成本估算。
UI 把这些渲染成可折叠步骤卡片:
- Panel 对话结束后 inline 展示
- 设置 → Recipes → 历史 (每次运行一条)
- 点开看完整 result body 的步骤详情抽屉
- 从第 N 步重放会复用 trace 前缀(到第 N 步为止), 重新跑 model。模型在第 7 步走偏想换提示重试时很有用。
-
新的
read_agent_trace(run_id)MCP 工具 —— agent 现在能读自己的 trace,自我纠错的 Recipe 成为可能。
4. 多 vault Federation
内置的 solomd-mcp 在 v4 长出了多工作区模式。
通过任意多个 --workspace 标志在一个 MCP 会话里桥接多个 vault:
solomd-mcp \
--workspace ~/Vaults/personal \
--workspace ~/Vaults/work \
--workspace ~/Vaults/research
工具签名加了可选的 workspace 参数。默认 = 第一个传入 (向后兼容)。
AutoGit 分支按工作区隔离。设置 → 集成里加了具名的
MCP profile —— 可一键复制对应的 Claude Desktop 配置块。
现在用户得开多个 Claude Code 会话才能跨两个 vault 工作。v4 一会话就够了。
5. Ollama 一等公民
我们不内置本地 LLM 运行时。Ollama 已经在 14-provider 列表里 且做得很好 —— 重写一遍违反原则 #7 (写更少的我们要长期维护的代码)。 v4 改为打磨集成:
- 自动检测
localhost:11434上的 Ollama,设置 → AI 里有绿色状态指示。 - 没装就出现安装 Ollama按钮 (跳 ollama.com,我们不代理下载)。
/api/tags内联列出已装模型;空列表时给拉取推荐 (qwen2.5:1.5b, ~1 GB)按钮。- 3 个内置预设:rewrite (qwen2.5:7b) · quick (qwen2.5:1.5b) · CJK 友好 (qwen2.5:14b)。
- Recipe 可以指定
provider: local作为默认,跑廉价的本机自动循环。
11 个起步 Recipe
打开 设置 → Recipes → 浏览菜谱就能装下面任何一个。
YAML 会复制到 .solomd/agents/ 并打开编辑。
可重复装 (自动加后缀)。
01-weekly-review.yml—— 周日 18:00 UTC,把daily/*.md总结到weekly/YYYY-WW.md02-todo-extract.yml—— on-save 扫- [ ],累积到todo.md03-translate-zh-to-en.yml—— 手动;当前笔记中英互译04-cjk-proofread.yml—— on-save 用 Ollama (provider: local) 跑中日韩语法检查05-citation-cleanup.yml—— on-commit 规范化@citekey格式06-meeting-notes-summary.yml—— on-tag-add#meeting抽决定 + 行动项07-link-suggester.yml—— 只读,在 trace 视图里给[[wikilink]]建议 (不改文件)08-daily-summary.yml—— 每晚 22:00,把 TL;DR 写到当天的 daily 笔记09-orphan-notes.yml—— 每周扫零反向链接的笔记,列在orphans.md10-on-commit-changelog.yml—— on-commit 给CHANGELOG.md追加一行总结11-tag-classifier.yml—— on-save 根据笔记内容建议#tag(只读)
安全模型 —— AutoGit 沙箱
每次 Recipe 运行都先做这三步:
- 从当前 HEAD 开一条新的 AutoGit 分支
agent/<recipe-slug>/<run-id>。 - 跑 prompt + tool 循环。所有
write_note/append_to_note调用都落在这个分支上。 - 成功后进入待审核,三个按钮:查看 diff、Accept(快进合到
main)、Reject(整条分支删除)。
被 Reject 的运行在 git 历史里完全消失。被 Accept 的运行在
git log 里像普通提交一样出现。
write-cap 在 dispatch 之前就检查 ——
如果模型在 cap=5 的情况下要写 100 个文件,从第 6 个起就被拒,
不会出现"半成品"状态。默认 5,硬上限 50。
写自己的
完整 schema、所有变量 ({{path}}、
{{date:YYYY-MM-DD}}、{{files}}...)、
agent 能调用的所有工具、生产环境真正能跑的模式 ——
全在仓库的 docs/agents.md 里:
Schema 的源头是
app/src-tauri/src/recipes.rs —— Rust 类型,不是纸面规范。