关于 publish
publish 是用于将 gbrain 脑页面转换为独立 HTML 文档的技能,适合需要对外分享内容的用户。它会移除内部元数据,并默认使用客户端加密保护页面。
主要功能
- 01生成独立 HTML 文档
- 02移除私人元数据和内部链接
- 03默认使用 AES-256-GCM 加密
- 04支持本地文件与云存储分享
适用场景
- 01向外部人员分享简报或研究
- 02发布数据室分析或旅行计划
- 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 frontmatter | title:、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-- 生成访问链接(可选)