mcpField
R
read

read

github.com/davepoon生产力3.7k60 次安装今天更新
代码仓库

关于 read

Origin 的页面预览技能,帮助用户在打开 Markdown 文件前确认页面内容。可按标题或词语搜索,也可通过 ID 直接获取页面。

主要功能

  1. 01按 ID 获取页面
  2. 02搜索标题或词语
  3. 03显示精简页面预览
  4. 04报告链接和过期状态
  5. 05标记用户编辑过的页面

适用场景

  1. 01打开页面前预览内容
  2. 02按标题或词语查找页面
  3. 03检查页面链接和新旧状态

MCP 相关

使用 Origin MCP 工具搜索和获取页面,并查询页面链接信息以生成预览。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davepoon/buildwithclaude --skill read

安装后在 Claude Code 中输入/read确认已加载。

详细介绍

/read

展示页面的基本信息,让用户决定是否打开。 /read 提供的是预览,而非全文。正文保存在磁盘上;预览能让聊天内容保持易于浏览,避免 Bash 输出被截断,并遵循“md 是权威版本,查看器是用户的编辑器”这一模式。

如何调用

支持两种形式:

  1. 页面 ID(以 page_ 开头;旧版 concept_ ID 仍可使用)→ 直接获取。
  2. 标题或自由输入的词语 → 搜索、选择最佳匹配项并获取。

两种形式都会以同一个预览块结束。

1. 直接使用 ID

调用 MCP 工具获取页面:

get_page(page_id="<id>")

响应是一个包装 { "page": {...} } 的 JSON 对象。从页面中读取 title、summary、space 和 source_memory_ids,然后在 ~/.origin/pages/.origin/state.json 中查找 md 文件名:

Bash: python3 -c '
import json, os, sys
state_path = os.path.expanduser("~/.origin/pages/.origin/state.json")
pid = "<id>"
filename = None
try:
    with open(state_path) as f:
        filename = json.load(f).get("pages", {}).get(pid, {}).get("file")
except FileNotFoundError:
    pass
print(f"~/.origin/pages/{filename}" if filename else "(no md projection on disk)")
'

将页面字段与解析出的 md 路径合并,然后输出预览块。

2. 使用标题或自由输入的词语

先搜索,再按 ID 获取排名第一的结果,并使用相同的预览块。始终通过 search_pages MCP 工具进行解析,绝不要在客户端推导 slug(技能启发式规则会在撇号和标点符号处理上偏离规范的 slugify())。

search_pages(query="<arg>", limit=1)

解析返回的 JSON——响应结构为 { "pages": [...] }。 读取第一个结果的 id。如果 pages 为空,告知用户“没有找到匹配 <arg> 的页面——试试 /distill <arg> 来创建页面”,然后停止。 否则,调用 get_page(page_id=<id>),并按第 1 节输出相同的预览块。

输出格式

始终只打印以下这些行(不含正文):

Title:    <title>
Version:  v<N> — <last_edited_by> <relative_time> (<last_delta_summary>)
Summary:  <one sentence>
Sources:  <N> memories
Space:    <space or (none)>
Links:    <N inbound, M outbound (<K> broken)>
Open:     ~/.origin/pages/<slug>.md
⚠ Stale: <stale_reason> — run /distill to refresh

锁定横幅规则:

当 get_page 返回的页面载荷中 user_edited == true 时,在渲染输出的标题之前,将以下行作为第一行:

🔒 You've edited this page. Auto-refresh paused. `/distill rebuild <page-id>` to unlock.

将 <page-id> 替换为实际的 page.id 值。当 user_edited 为 false 或缺失时,完全省略此行。

锁定意味着守护进程的蒸馏周期不会根据来源自动重写此页面的正文——除非用户明确运行 /distill rebuild 来清除并重新生成,否则编辑内容会保留。

版本行规则:

  • 始终显示 v<N>。当 version 为 null 或缺失时,省略此行。
  • 若 last_edited_by 有值,则追加 — <last_edited_by>(例如 re_distill、user、agent)。
  • 若设置了 last_edited_at,则追加相对时间(例如 2h ago、3d ago)。
  • 若字段非空,则追加 (<last_delta_summary>)。
  • 示例:
    • v1 — synthesized 4h ago
    • v4 — re_distill 2h ago (+mem_xyz, +250 chars)
    • v3 — user 1d ago

过时警告规则:

  • 仅当 stale_reason 非 null 且非空时,才输出 ⚠ Stale: 行。
  • 原样显示 stale_reason(由守护进程设置;source_updated、new_memories 等值已经足够易懂)。

链接行规则(不变):紧接着 get_page 调用 get_page_links(page_id="<id>") 并计数:

  • 入站 = len(inbound)
  • 出站 = len(outbound)
  • 断开的链接 = target_page_id 为 null 的出站条目

断开的链接数量为零时,省略括号中的内容。若入站和出站的数量之和为零,则完全省略此行。

不要改写标题,不要删减摘要,也不要装饰预览。预览块应占一屏,格式稳定,便于快速浏览。

如果用户想查看完整正文,应在其编辑器中打开 md 文件(Obsidian、VS Code、glow、bat,等等)。插件的 Markdown 渲染效果不如用户自己的工具。

适用场景

  • 用户提出“展示 X 页面”“ 里有什么”“预览一下”。
  • /distill 完成后,接着运行 /read "<title>"(标题在任何渲染界面中都能保留;ID 可能在视觉上被截断)。

不适用场景

  • 原始记忆查找 → 使用 /recall。
  • 列出所有页面 → 使用 list_pages_recent MCP 工具或 ls ~/.origin/pages/。
  • 阅读完整正文 → 在用户的编辑器中打开 md 文件。

评论

支持 Markdown