Publish Skill 是 garrytan/gbrain 项目中的一项技能,用于将 brain 页面发布为可分享的、自包含的 HTML 文档。它由确定性代码(gbrain publish 命令)和技能说明两部分组成:代码负责内容剥离、加密和 HTML 生成,技能说明则指导何时以及如何使用。整个发布过程不涉及 LLM 调用。
用途 该技能适用于以下场景:用户要求分享某个 brain 页面、创建可分享链接,或希望将交易备忘录、人物简报、研究资料、数据室分析或旅行计划发送给外部人员。任何需要将 brain 内容分享出去而又不暴露整个系统时,均可使用。
主要能力 发布生成的 HTML 完全自包含,无外部依赖,无需服务器。所有私有元数据在发布前会被自动剥离,包括:YAML frontmatter(标题、类型、标签等内部元数据)、[Source: ...] 来源引用(出处属于内部信息)、确认编号(替换为“on file”以保护 PII 和预订数据)、brain 内部交叉链接(如 Jane 简化为 Jane,移除内部路径)、时间线部分(原始证据日志)以及内部“See also”引用。外部 URL(https://...)会被保留。
密码保护使用 AES-256-GCM 算法,密钥通过 PBKDF2 派生(10 万次迭代,SHA-256),每次加密使用随机 16 字节盐和随机 12 字节 IV。解密在客户端通过 Web Crypto API(SubtleCrypto)完成,无需服务器认证。加密后的 HTML 文件中仅包含密文,明文不会出现在文件任何位置。支持“在此设备上记住密码”,将密码保存在 localStorage 中。
使用方式 基本发布命令:gbrain publish brain/companies/acme.md,输出本地 HTML 文件。密码保护(自动生成密码):gbrain publish brain/companies/acme.md --password。指定密码:gbrain publish brain/companies/acme.md --password "secret123"。自定义标题:gbrain publish brain/companies/acme.md --password --title "Acme -- Deal Analysis"。自定义输出路径:gbrain publish brain/companies/acme.md --out /tmp/acme-share.html。
分享工作流包括:本地文件分享(通过电子邮件、Slack、Airdrop 等分享 HTML 文件,密码通过单独渠道传递);上传到云存储(先用 gbrain publish 本地发布,再用 gbrain files upload 上传到 Supabase Storage,通过 gbrain files signed-url 生成 1 小时有效的签名 URL);静态托管(Render、Netlify、S3 等,文件自包含,密码保护完全在客户端运行);GitHub Pages 或 Gist。
更新已发布页面时,使用相同输出路径重新运行发布命令即可。撤销访问可通过删除文件实现;签名 URL 会在 1 小时后自动过期;静态托管则需从主机移除文件。
适用场景 该技能适合需要将 brain 内容分享给外部人员而又保持内容私密性的场景,如发送交易备忘录、人物简报、研究资料或旅行计划。默认始终加密,除非用户明确要求“open”、“no password”或“public”。
限制与注意事项 默认必须加密,brain 内容属于私有信息。密码和 URL 应通过不同渠道分享。不应假设用户想要原始 markdown,应使用 gbrain publish 生成美观 HTML。不要手动分享包含 frontmatter、来源引用或时间线部分的内容,应让发布命令自动剥离。如果源页面返回 page_not_found,需先解析真实 slug,切勿发布猜测的页面。如果 gbrain files upload 或 signed-url 失败(存储未配置、bucket_not_found),需告知用户发布需要存储并运行 gbrain doctor --json,不要粘贴私有页面内容代替。