mcpField
P
publish

publish

github.com/garrytan文档处理31.3k242 次安装今天更新
代码仓库

关于 publish

publish 是用于将 gbrain 脑页面转换为独立 HTML 文档的技能,适合需要对外分享内容的用户。它会移除内部元数据,并默认使用客户端加密保护页面。

主要功能

  1. 01生成独立 HTML 文档
  2. 02移除私人元数据和内部链接
  3. 03默认使用 AES-256-GCM 加密
  4. 04支持本地文件与云存储分享

适用场景

  1. 01向外部人员分享简报或研究
  2. 02发布数据室分析或旅行计划
  3. 03通过静态托管分享加密页面

安装

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

$npx skills add https://github.com/garrytan/gbrain --skill publish

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

详细介绍

发布 Skill

将 brain 页面分享为精美的、自包含的 HTML 文档。可选使用客户端 AES-256-GCM 加密进行密码保护。无需服务器。

这是一个代码 + skill 组合:确定性代码(gbrain publish)负责剥离、加密和生成 HTML。本 skill 说明何时以及如何使用它。架构理念参见 Thin Harness, Fat Skills。

约定

  • 发布的 HTML 完全自包含:无外部依赖,无需服务器。
  • 所有私有元数据(frontmatter、来源引用、确认号、brain 交叉链接、时间线)在发布前都会被剥离。
  • 密码保护使用 AES-256-GCM,密钥通过 PBKDF2 派生;明文绝不会出现在加密后的 HTML 文件中。
  • 除非用户明确要求“open”“no password”或“public”,默认始终加密。
  • 外部 URL(https://...)予以保留;仅剥离 brain 内部路径。

何时发布

  • 用户要求分享 brain 页面、创建可分享链接,或说“给我一个页面”
  • 用户想把交易备忘录、人物简报或研究内容发送给外部人员
  • 用户要求发布数据室分析或行程计划
  • 任何需要让 brain 内容离开 brain、又不暴露整个系统的时候

默认:始终加密

Brain 内容属于私有信息。默认使用密码保护,除非用户明确说“open”“no password”或“public”。

如果未指定密码,则自动生成一个。密码应通过与 URL 不同的渠道分享。

快速参考

# Basic publish (outputs local HTML file)
gbrain publish brain/companies/acme.md

# Password protected (auto-generate password)
gbrain publish brain/companies/acme.md --password

# Password protected (specific password)
gbrain publish brain/companies/acme.md --password "secret123"

# Custom title
gbrain publish brain/companies/acme.md --password --title "Acme -- Deal Analysis"

# Custom output path
gbrain publish brain/companies/acme.md --out /tmp/acme-share.html

剥离内容

发布命令会自动移除所有私有/内部数据:

剥离内容示例原因
YAML frontmattertitle:、type:、tags:内部元数据
[Source: ...] 引用所有格式来源信息属于内部信息
确认号ABC123DEF -> "on file"PII/预订数据
Brain 交叉链接[Jane](../people/jane.md) -> Jane内部路径
时间线部分--- / ## Timeline 以下的全部内容原始证据日志
"See also" 行内部引用Brain 导航

**保留:**外部 URL(https://...)及其他所有内容。

分享工作流

方案 A:本地文件(最简单)
gbrain publish brain/people/jane-doe.md --password --out ~/Desktop/jane-briefing.html

通过邮件、Slack、AirDrop 分享 HTML 文件。密码需单独分享。

方案 B:上传到云存储
# Publish locally first
gbrain publish brain/companies/acme.md --password "secret" --out /tmp/acme.html

# Upload to Supabase Storage
gbrain files upload /tmp/acme.html --page shares/acme

# Get a signed URL (1-hour expiry)
gbrain files signed-url shares/acme/acme.html

分享签名 URL 和密码。URL 1 小时后过期。需要时可重新生成。

方案 C:静态托管(Render、Netlify、S3)

将 HTML 文件上传到任意静态托管服务。该文件是自包含的,无需服务端逻辑。密码保护的文件完全通过 Web Crypto API 在客户端工作。

方案 D:GitHub Pages / Gist
gbrain publish brain/trips/japan-2026.md --out trip.html
# Upload to a GitHub Gist or Pages repo

密码保护详情

  • **算法:**AES-256-GCM
  • **密钥派生:**PBKDF2,10 万次迭代,SHA-256
  • **盐值:**每次加密随机生成 16 字节
  • **IV:**每次加密随机生成 12 字节
  • **解密:**通过 Web Crypto API(SubtleCrypto)在客户端完成
  • 无需服务端认证——HTML 文件是自包含的
  • “在此设备上记住”——将密码保存到 localStorage

加密后,发布的 HTML 仅包含密文。明文不会出现在文件的任何位置。

更新已发布页面

使用相同的输出路径重新运行发布命令:

gbrain publish brain/companies/acme.md --password "same-password" --out shares/acme.html

文件不变、URL 不变(如已托管),内容已更新。

撤销访问

删除文件。如果使用签名 URL,该 URL 会自动过期(1 小时)。如果使用静态托管,请从主机上移除该文件。

失败时如何处理

对于任何 gbrain 错误 code、退出码、[AGENT] 块或通知块,请遵循 agent 操作协议。针对本技能的具体情况如下:

  • 源页面返回 page_not_found:先解析出真实的 slug;切勿发布猜测出来的页面。
  • gbrain files upload / gbrain files signed-url 失败(存储未配置,bucket_not_found):告知用户发布需要存储,并运行 gbrain doctor --json;不要改为粘贴私有页面内容。

反模式

  • 未加密发布。 大脑内容属于私有内容。默认使用密码保护,除非用户明确表示“公开”“无需密码”或“public”。
  • 在同一渠道中同时分享密码和 URL。 为确保安全,务必通过与 URL 不同的渠道分享密码。
  • 假设用户想要原始 Markdown。 发布命令会生成精美的 HTML。当 gbrain publish 可用时,不要直接复制粘贴 Markdown。
  • 包含内部元数据。 切勿手动分享包含 frontmatter、来源引用或时间线部分的内容。应让发布命令将其剥离。

输出格式

PUBLISHED: [page title]
========================

File: [output path]
Encrypted: [yes (AES-256-GCM) / no]
Password: [auto-generated password / user-provided / none]
Size: [file size]

Share the file via: [email / Slack / Airdrop / cloud upload]
Share the password via: [a different channel]

使用的工具

  • gbrain publish -- 确定性的 HTML 生成(不调用 LLM)
  • gbrain files upload -- 上传到云存储(可选)
  • gbrain files signed-url -- 生成访问链接(可选)

评论

支持 Markdown