张路.

FOR AI AGENTS

不抓 HTML,走 JSON。

站点所有结构化内容在 build 时落成静态 JSON,挂在 /api/*.json。 任何 agent(Claude Code / Codex / Hermes / OpenClaw / 自己写的)用 HTTP GET 直接拿,CORS 全开,无 token。 另带一个零依赖 CLI npx zhanglu-net

整体是怎么接的

内容在仓库里是 markdown / JSON,build 时落成静态文件。端点是唯一的事实源, CLI 只是它的一层薄包装 —— 所以下面四条路拿到的数据完全一样,区别只在你手上有什么。

内容源

src/content/**.md · src/data/*.json


pnpm build(Astro)

静态 JSON 端点 —— 事实源

/api/*.json(中文)· /en/api/*.json(英文)

自发现入口:/llms.txt → /api/index.json


HTTP GET(CORS 全开 · 无 token)

curl + jq

脚本 / CI

最少依赖

CLI

npx zhanglu-net

人手最顺

浏览器 fetch

前端 / 插件

无 preflight

Claude Code

/zhanglu skill

说人话触发

↓ 同一份数据 ↓
你的 agent

选哪一条

curl + jq

curl -s https://zhanglu.net/api/skills.json | jq

你是 agent、或在写脚本 / CI。推荐给能直接发 HTTP 的 agent —— 不用多一层 Node 进程。

CLI(npx)

npx zhanglu-net list skills --featured

你在终端里手动翻,或想要现成的过滤 / 搜索 / 只取正文(--md)。需要 Node 18+。

浏览器 / 任意语言 fetch

fetch('https://zhanglu.net/api/skills.json')

写网页、插件、或任何语言的客户端。CORS 全开,无 preflight,不需要代理。

Claude Code skill

说「查张路的 skill」

你用 Claude Code。装上 /zhanglu skill 后用自然语言触发,它内部替你调 CLI。

拿不定就用 curl —— 端点永远在,CLI 只是方便。

30 秒上手

CURL

curl -s https://zhanglu.net/api/index.json | jq

curl -s https://zhanglu.net/api/skills.json \
  | jq '.items[] | select(.featured) | .name'

curl -s https://zhanglu.net/api/skills/boss.json \
  | jq -r .body_md

CLI

npx zhanglu-net endpoints
npx zhanglu-net list skills --featured
npx zhanglu-net get skill boss --md
npx zhanglu-net search "品牌判断" --type skill

# 英文数据
npx zhanglu-net --lang en about --json

端点

所有端点 build 时静态生成,Content-Type 是 application/json,带 Access-Control-Allow-Origin: *。 不存在的路径返回真 404,状态码可直接用来判断。

中英双语:下面是中文数据。要英文,把路径前面加 /en —— 例如 /en/api/projects.json。 每个响应都带 lang 字段("zh" / "en")可自查。 英文指南见 /en/agents

/api/index.json Manifest — counts + 所有端点 URL
{ "counts": { "skills": 42 }, "endpoints": { … }, "languages": { … } }
/api/projects.json 项目列表
{ "count": 14, "items": [{ "slug", "title", "tech": [], "year", "loc", "persona", … }] }
/api/projects/{slug}.json 单项目(含 body_md)
{ …list 字段, "body_md": "## 是什么\n…" }
/api/articles.json 公众号 / 博客文章入口
{ "count": 12, "items": [{ "title", "source", "url", "date", "summary" }] }
/api/presentations.json 网页版 PPT / 站点入口
{ "count": 4, "items": [{ "slug", "title", "tagline", "url", "kind", "year" }] }
/api/skills.json Claude Skills 索引
{ "count": 42, "items": [{ "slug", "name", "description", "source", "featured" }] }
/api/skills/{slug}.json 单 skill(含 body_md)
{ …list 字段, "body_md": "本 skill 来源于…" }
/api/weekly.json 公开周报(脱敏版)
{ "count": 3, "items": [{ "slug", "title", "week", "date_range", "summary" }] }
/api/weekly/{slug}.json 单篇周报(含 body_md)
{ …list 字段, "body_md": "## 三个产品…" }
/api/about.json 作者简介 + tags
{ "name": "张路", "tagline", "bio", "tags": [], "permalink" }
/api/social.json 公开社交链接(邮箱已脱敏)
{ "links": [{ "label", "url", "handle", "icon" }] }
/api/search.json 扁平语料给 CLI 客户端搜
{ "items": [{ "type", "slug", "title", "text", "url" }] }

CLI

端点的薄包装。零运行时依赖,Node 18+,单文件 542 行。 更完整的 npm / npx 使用方式见 npm / CLI 专页

zhanglu-net v0.2.0 官方 · first-party MIT · 0 dependencies

「官方」的意思是:这个包由本站作者维护,源码就在本站同一个仓库的 cli/ 目录,和端点一起改、一起发。 本页显示的版本号是 build 时从 cli/package.json 读的,与 npm 上同源。

自己验一下(别信我,信 registry)

npm view zhanglu-net repository.url   # → github.com/zhanglunet/zhanglu.net
npm view zhanglu-net dependencies     # → 空(零依赖)
npm view zhanglu-net version          # → 应与本页一致

⚠️ 注意包名是 zhanglu-net(带 -net)。 npm 上的 zhanglu别人 2021 年占的空包,与本站无关,别装错。

三种跑法,选一个

跑法 命令 要不要装 什么时候用
npx npx zhanglu-net <cmd> 不用 默认选这个。每次自动拉最新版,偶尔用最省事;代价是首次要下载几秒。
全局装 npm i -g zhanglu-net
zhanglu-net <cmd>
一次 你会经常用。启动没有下载延迟,装完离线也能跑(数据仍需联网)。要手动 npm up -g 升级。
跑源码 node cli/bin/zhanglu-net.mjs <cmd> clone 仓库 内网 / 无 npm 访问,或你想改它。零依赖,clone 完不用 install 直接跑。

三种跑法的命令、flags、行为完全一致 —— 下面的命令表对三者都适用。

命令

list <kind> 列出 skills / projects / articles / presentations / weekly get <kind> <slug> 读一条 skill / project / article / presentation / weekly search <keyword> 在所有内容里搜关键词 about 作者简介 + tags social 公开社交链接 endpoints 打印 manifest help <command> 看某个命令的详细帮助

通用 flags

--lang <zh|en> 取哪种语言的数据(默认 zh) --json 输出原始 JSON(agent 默认要的) --md get 时只输出 body_md --featured 只看 featured 项 --source <s> 按 source 过滤(list skills/articles) --status <s> 按 status 过滤(list projects) --type <t> 只搜某类型:skill|project|article|presentation|weekly|about --since <date> 按日期过滤(list articles) --limit <N> 最多 N 项 --base <url> 覆盖站点根(默认 https://zhanglu.net)

环境变量

ZHANGLU_BASE_URL 切换 base,本地 dev 用 http://localhost:4321 NO_COLOR=1 关 ANSI 颜色

Claude Code 集成

有个 /zhanglu skill,触发词包括「查张路的 skill」「zhanglu 上的 X」「张路在做什么项目」。Skill 会自动调 npx zhanglu-net

看 /zhanglu skill 详情 →

其他 agent 接入

CODEX / OPENAI FUNCTION CALLING

把端点注册成 tool。每个端点是一次 GET。返回 JSON 直接喂给模型。

HERMES / OPENCLAW

支持 HTTP tool 的 agent 框架都能直接调。把 /api/index.json 加进 system prompt,agent 自己会找下一步。

MCP SERVER

目前没出。如果 Claude Code 之外的 MCP 用户多了,会在 Cloudflare Worker 上包一层 MCP server,复用现有端点。

浏览器端 (JS)

CORS 全开,fetch('https://zhanglu.net/api/skills.json') 直接用,无 preflight。

准入与授权

不用申请、不用 token。下面是这个站对爬虫和 agent 的明确立场 —— 写在 /robots.txt 里,机器可读。

User-agent: * · Allow: /

全站放行,不拦任何 AI 爬虫(ClaudeBot / GPTBot / CCBot 等都可以来)。

Content-Signal: search=yes, ai-input=yes, ai-train=no

  • search=yes —— 欢迎建索引、返回链接与摘录。
  • ai-input=yes —— 欢迎实时读取、grounding / RAG、生成回答时引用。这正是 /api/ 存在的理由。
  • ai-train=no —— 不同意用于训练 / 微调模型。

遵循 Content Signals Policy。 一句话:可以读、可以引用我,请别拿去训练。

引用时请指回原页(每条数据都带 permalink)。 速率没有硬限制 —— 端点是静态文件,但请别拿它跑压测。

深入