Obsidian +AIAgent又一个关键工具:Knap
激进拥抱智能体,CEO 发布新工具:Knap
今天 Obsidian CEO Kepano 开源了一个新项目:Knap.
一个专门把JSON/CSV/应用提供的结构化数据,按照模板转换成Markdown的领域专用模板语言(DSL)和模板引擎。
GitHub: obsidianmd/knap,Website:https://knap.md/
(Kepano的推特也有正式推文,我就不截图了。)
这是一套很小的模板语法。它最早就是 Obsidian Web Clipper 内部使用的模板系统,后来又被 Obsidian Importer 使用。现在Steph把这套能力单独抽出来,做成了一个公开、开源的独立工具。更好的被智能体/命令行使用。

Knap 到底是什么?
假设现在有这样一份数据,和一份markdown模版:
{
"title": "我的文章",
"author": "Jason",
"tags": ["AI", "Obsidian"]
}# {{ title }}
作者:{{ author }}
标签:{{ tags | join:", " }}Knap 会自动把数据填进模板,最后生成:
# 我的文章
作者:Jason
标签:AI, Obsidian为什么特别适合 Obsidian?
所以 Knap 最核心的工作其实非常简单:数据 + 模板 → Markdown 文件。它负责把原本杂乱的数据,按照我们提前规定好的格式,稳定地生成 Markdown。
如果只是简单地把文字塞进模板,其实很多工具都能做到。Knap 比较特别的地方,是它本身就是围绕 Markdown 和 Obsidian 使用场景设计的。
例如它可以直接处理:YAML 属性、Obsidian 双链、Markdown 链接、列表、表格、Callout、文件名等。
例如把一个名字处理成双链:{{ person | wikilink }}
又比如自动生成适合 Obsidian 属性系统使用的 YAML:{{ tags | yaml_property:"tags" }}
所以它特别适合一个场景:
把外部数据批量整理成格式统一的 Obsidian 笔记。
Knap 最实用的几个使用场景
- • 网页收藏:网页 → 提取内容 → Knap → 标准 Obsidian 笔记
- • 批量导入资料:Knap 可以读取 JSON、CSV 等结构化数据,然后批量生成 Markdown。
- • 自动整理研究资料:把资料整理成结构化信息,再交给 Knap 生成最终笔记。
- • 建立统一的知识库格式:资料可能来自网页、RSS、API、数据库、AI Agent,最终都可以先转换成结构化数据,再交给 Knap。
它和 Jinja / Liquid 到底有多像?
非常像,而且是故意的。 你如果用过 Jinja、Liquid、Twig,这套语法几乎不用学习。
Steph 明确表示,Knap 的语法刻意设计得让 Twig、Liquid、Jinja、Tera 用户感到熟悉。
如何安装和使用?
Knap 是一个 Node.js 工具,要求 Node.js 20+ 版本。安装:
npm install -g knap最基础的使用方法
准备两个文件。一个数据文件,例如保存为article.json
{
"title": "Knap",
"author": "Steph Ango"
}再准备一个模板,保存为template.md
# {{ title }}
作者:{{ author }}然后运行:
knap render template.md \
--data article.json \
--output note.md最后就会生成:note.md。整个过程不需要数据库,也不需要启动什么服务器。
如何和 Obsidian 配合?
Knap 不是一个 Obsidian 插件。它的工作非常单纯:负责生成 Markdown 文件。 而 Obsidian 本身就是读取 Markdown 文件的。所以两者天然可以配合。
最简单的方式,直接让 Knap 把生成文件保存到 Obsidian库:数据 → Knap → .md 文件 → Obsidian Vault
比如提前规定:
---
title: {{ title }}
source: {{ url }}
---
# {{ title }}
{{ summary }}以后所有资料都通过这个模板生成。这样整个 Vault 中:标题格式一致、属性字段一致、正文结构一致。
Knap + AI Agent 才是更重要的
Knap 现已进入CEO大人自己维护的kepano/obsidian-skills

可以配合:Codex、Claude Code、OpenCode 等 AI Agent。 这就出现了一个非常实用的分工方式:AI Agent 负责理解内容,Knap 负责最终格式。
比如我们让 Codex 阅读一篇文章。以前可能直接告诉它:
阅读这篇文章,按照我的 Obsidian 模板生成 Markdown问题是,大模型生成内容本身具有一定随机性。使用 Knap 后,可以变成:文章 → AI 阅读和整理 → 结构化数据 → Knap → Markdown。AI只需要返回JSON数据,至于最后 Markdown 怎么写,由 Knap 的固定模板决定。
Knap 的技术原理
它的语法其实并不复杂。比如条件判断:
{% if author %}
作者:{{ author }}
{% endif %}循环:
{% for tag in tags %}
- {{ tag }}
{% endfor %}这些语法和很多成熟的模板工具非常相似。简单理解就是:模板 → Knap 理解规则 → 填入数据 → 输出 Markdown
另外一个比较重要的设计是:Knap 不会直接执行任意 JavaScript 代码。它只能执行自己规定好的模板语法和功能。这样更容易控制安全风险。