写代码之前,先让计划成形。

Schematic Planner 把写好的计划变成一张你和 AI 智能体都能编辑的图,然后以 Markdown 文件和 Obsidian Canvas 的形式交还给你,由你保存。

DatabasedatabaseAuthauthPlan graphplan-graphCanvascanvasMCP surfacemcpExportexport

它要解决的问题

编程智能体很会写计划,却没法让计划稳住不动。你要一个功能,它给你一份像模像样的任务清单;三条消息之后,一半已被忘掉,下一次运行时,架构又被悄悄重新发明了一遍。计划从来不在任何地方:它只在对话里,而对话早已往前走了。

把计划放在你们双方都看得见的地方,这种事就不会再发生。

流程是这样的

  1. 智能体写出计划

    怎么写都行:一段文字、一份任务清单、一篇设计笔记。这部分本来就没问题。

  2. 一次调用,把它变成图

    智能体发送结构,服务器负责摆放每个节点。智能体只声明谁依赖谁,从不给出坐标,因为让模型给出位置,画出来的图没人想看。

  3. 想挪哪里,你来挪

    你拖动过的节点会被固定,此后自动布局不再动它。其余部分围绕它重新排布。

  4. 文件随你带走

    包含关系变成目录,依赖顺序变成文件名前的编号。把这个文件夹和源代码一起提交,智能体每次运行都会读到它。

智能体看到的是什么

一个 URL 加一个密钥,背后是二十一个工具。无需安装,也无需跟着服务器同步更新。一次调用就能开启一份计划,在其中画的一切都经由同一个批量、原子的入口,所以四十个节点会同时出现在你的画布上,而不是一个接一个慢慢爬进来。

节点通过你一眼就能认出的标识符来引用,所以重试不会造成第二次改动。

工具参考
create_plan({ title: "Billing rework" })

apply_ops({
  planId: "…",
  ops: [
    { op: "upsert_node",
      node: { slug: "pricing-rules", title: "Pricing rules" } },
    { op: "upsert_node",
      node: { slug: "render-pdf", title: "Render PDF" } },
    { op: "upsert_edge",
      edge: { from: "pricing-rules", to: "render-pdf" } }
  ]
})

导出的是什么

一个纯 Markdown 的 zip 包,图结构写在 frontmatter 里,另附一个 .canvas,在 Obsidian 中打开时布局原样保留。这个格式的任何部分都不依赖本服务就能读懂,同一份计划每次导出的字节都完全相同。

plan-export.zip
├── README.md
├── 01-foundation/
│   ├── 01-ledger-schema.md
│   └── 02-pricing-rules.md
├── 02-invoicing/
│   └── 01-render-pdf.md
├── plan.canvas
└── plan.json

自己运行

整套系统以 AGPL-3.0 发布,只需要 Node 和 Postgres。没有专有的身份验证服务,没有只能托管使用的依赖,每项设置都是一个环境变量。如果你的源代码不能离开你的网络,你的计划也不会。

它现在的真实状态

预览早期版(pre-alpha),这一点值得直说。规划、绘图、实时协作、智能体接口、分享、导出,以及管理工作区和账号,都已可用。它从不发送邮件,所以邀请就是一个由你转交的链接;社交账号登录尚未实现。请导出你的计划,导出功能就是为此而设的。